* [PATCH v3 0/3] Add Unit Tests for BaseCryptLib to CryptoPkg @ 2020-07-14 18:23 matthewfcarlson 2020-07-14 18:23 ` [PATCH v3 1/3] UnitTestFrameworkPkg : BaseTimerLibPosix: Adds a host-based timer Lib matthewfcarlson ` (2 more replies) 0 siblings, 3 replies; 10+ messages in thread From: matthewfcarlson @ 2020-07-14 18:23 UTC (permalink / raw) To: devel From: Matthew Carlson <macarl@microsoft.com> This turns on Host Based Unit Tests for CryptoPkg, adds the unit test itself, and adds a POSIX BaseTimerLib for unit tests. Matthew Carlson (3): UnitTestFrameworkPkg : BaseTimerLibPosix: Adds a host-based timer Lib CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based) AzurePipelines : Pr Gate: Turn on HBUT for CryptoPkg CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrtWrapper.c | 93 ++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/AuthenticodeTests.c | 1002 ++++++++++++++++++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCryptLibUnitTests.c | 66 ++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCipherTests.c | 293 ++++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c | 106 +++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests.c | 197 ++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c | 184 ++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncryptTests.c | 308 ++++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkdf2Tests.c | 71 ++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTests.c | 524 ++++++++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests.c | 51 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7Tests.c | 415 ++++++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.c | 310 ++++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c | 335 +++++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMain.c | 81 ++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMainBCOP.c | 58 ++ UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/TimerLibPosix.c | 132 +++ .azurepipelines/templates/pr-gate-build-job.yml | 2 +- CryptoPkg/CryptoPkg.ci.yaml | 4 + CryptoPkg/CryptoPkg.dsc | 26 + CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf | 90 ++ CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc | 35 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTestSignatures.h | 789 +++++++++++++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLib.h | 121 +++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibHost.inf | 46 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibUefiShell.inf | 49 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/ChainCreationInstructions.txt | 92 ++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/CreateTestCerts.cmd | 11 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/SignFirmwareWithEKUs.cmd | 76 ++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingIssuingCA.ini | 45 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSigner.ini | 25 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid1.ini | 24 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid12345.ini | 27 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingNoEKUsInSigner.ini | 16 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingPolicyCA.ini | 28 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingRoot.ini | 28 + UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.inf | 33 + UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.uni | 14 + UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest.dsc | 1 + UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc | 1 + 40 files changed, 5808 insertions(+), 1 deletion(-) create mode 100644 CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrtWrapper.c create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/AuthenticodeTests.c create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCryptLibUnitTests.c create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCipherTests.c create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests.c create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncryptTests.c create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkdf2Tests.c create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTests.c create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests.c create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7Tests.c create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.c create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMain.c create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMainBCOP.c create mode 100644 UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/TimerLibPosix.c create mode 100644 CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf create mode 100644 CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTestSignatures.h create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLib.h create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibHost.inf create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibUefiShell.inf create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/ChainCreationInstructions.txt create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/CreateTestCerts.cmd create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/SignFirmwareWithEKUs.cmd create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingIssuingCA.ini create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSigner.ini create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid1.ini create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid12345.ini create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingNoEKUsInSigner.ini create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingPolicyCA.ini create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingRoot.ini create mode 100644 UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.inf create mode 100644 UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.uni -- 2.27.0.windows.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v3 1/3] UnitTestFrameworkPkg : BaseTimerLibPosix: Adds a host-based timer Lib 2020-07-14 18:23 [PATCH v3 0/3] Add Unit Tests for BaseCryptLib to CryptoPkg matthewfcarlson @ 2020-07-14 18:23 ` matthewfcarlson 2020-07-15 2:38 ` Michael D Kinney 2020-07-14 18:23 ` [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based) matthewfcarlson 2020-07-14 18:23 ` [PATCH v3 3/3] AzurePipelines : Pr Gate: Turn on HBUT for CryptoPkg matthewfcarlson 2 siblings, 1 reply; 10+ messages in thread From: matthewfcarlson @ 2020-07-14 18:23 UTC (permalink / raw) To: devel; +Cc: Michael D Kinney, Sean Brogan, Bret Barkelew From: Matthew Carlson <macarl@microsoft.com> This adds a host based BaseTimerLib that won't assert. Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Sean Brogan <sean.brogan@microsoft.com> Cc: Bret Barkelew <Bret.Barkelew@microsoft.com> Signed-off-by: Matthew Carlson <matthewfcarlson@gmail.com> --- UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/TimerLibPosix.c | 132 ++++++++++++++++++++ UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.inf | 33 +++++ UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.uni | 14 +++ UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest.dsc | 1 + UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc | 1 + 5 files changed, 181 insertions(+) diff --git a/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/TimerLibPosix.c b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/TimerLibPosix.c new file mode 100644 index 000000000000..3c1394e3b21b --- /dev/null +++ b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/TimerLibPosix.c @@ -0,0 +1,132 @@ +/** @file + A semi-functional instance of the Timer Library. + + Copyright (c) Microsoft Corporation. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include <Base.h> +#include <Library/TimerLib.h> +#include <Library/DebugLib.h> +#include <stdio.h> +#include <stdlib.h> +#include <time.h> + +/** + Stalls the CPU for at least the given number of microseconds. + + @param MicroSeconds The minimum number of microseconds to delay. + @return The value of MicroSeconds inputted. + +**/ +UINTN +EFIAPI +MicroSecondDelay ( + IN UINTN MicroSeconds + ) +{ + // Since this is a host based test, we don't actually want to stall + return MicroSeconds; +} + +/** + Stalls the CPU for at least the given number of nanoseconds. + + @param NanoSeconds The minimum number of nanoseconds to delay. + @return The value of NanoSeconds inputted. + +**/ +UINTN +EFIAPI +NanoSecondDelay ( + IN UINTN NanoSeconds + ) +{ + // Since this is a host based test, we don't actually want to stall + return NanoSeconds; +} + +/** + Retrieves the current value of a 64-bit free running performance counter. + + The counter can either count up by 1 or count down by 1. If the physical + performance counter counts by a larger increment, then the counter values + must be translated. The properties of the counter can be retrieved from + GetPerformanceCounterProperties(). + + @return The current value of the free running performance counter. + +**/ +UINT64 +EFIAPI +GetPerformanceCounter ( + VOID + ) +{ + struct timespec ts; + timespec_get(&ts, TIME_UTC); + // Return the current number of nanoseconds on the clock + return ts.tv_nsec; +} + +/** + Retrieves the 64-bit frequency in Hz and the range of performance counter + values. + + If StartValue is not NULL, then the value that the performance counter starts + with immediately after is it rolls over is returned in StartValue. If + EndValue is not NULL, then the value that the performance counter end with + immediately before it rolls over is returned in EndValue. The 64-bit + frequency of the performance counter in Hz is always returned. If StartValue + is less than EndValue, then the performance counter counts up. If StartValue + is greater than EndValue, then the performance counter counts down. For + example, a 64-bit free running counter that counts up would have a StartValue + of 0 and an EndValue of 0xFFFFFFFFFFFFFFFF. A 24-bit free running counter + that counts down would have a StartValue of 0xFFFFFF and an EndValue of 0. + + @param StartValue The value the performance counter starts with when it + rolls over. + @param EndValue The value that the performance counter ends with before + it rolls over. + + @return The frequency in Hz. + +**/ +UINT64 +EFIAPI +GetPerformanceCounterProperties ( + OUT UINT64 *StartValue, OPTIONAL + OUT UINT64 *EndValue OPTIONAL + ) +{ + if ( EndValue != NULL ) { + *EndValue = MAX_UINT64; + } + if ( StartValue != NULL ) { + *StartValue = 0; + } + // Return the number of nanoseconds in a second + return 1000000000; +} + +/** + Converts elapsed ticks of performance counter to time in nanoseconds. + + This function converts the elapsed ticks of running performance counter to + time value in unit of nanoseconds. + + @param Ticks The number of elapsed ticks of running performance counter. + + @return The elapsed time in nanoseconds. + +**/ +UINT64 +EFIAPI +GetTimeInNanoSecond ( + IN UINT64 Ticks + ) +{ + return Ticks; +} diff --git a/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.inf b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.inf new file mode 100644 index 000000000000..797f04bb125b --- /dev/null +++ b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.inf @@ -0,0 +1,33 @@ +## @file +# An instance of Timer Library for posix compliant hosts. +# +# A semi-functional instance of the Timer Library that can be used for +# host based testing as a functional timer library instance. +# +# Copyright (c) Microsoft Corporation. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +# +## + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = BaseTimerLibPosix + MODULE_UNI_FILE = BaseTimerLibPosix.uni + FILE_GUID = a2a413b8-43c3-40cc-a298-be7a214d3564 + MODULE_TYPE = BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = TimerLib|HOST_APPLICATION +# +# VALID_ARCHITECTURES = HOST +# + +[Sources] + TimerLibPosix.c + +[Packages] + MdePkg/MdePkg.dec + +[LibraryClasses] + DebugLib diff --git a/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.uni b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.uni new file mode 100644 index 000000000000..a6859a0fc88a --- /dev/null +++ b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.uni @@ -0,0 +1,14 @@ +// @file +// An instance of Timer Library for posix compliant hosts. +// +// A semi-functional instance of the Timer Library that can be used +// for host based unit tests on posix compliant machines. +// +// Copyright (c) Microsoft Corporation. +// +// SPDX-License-Identifier: BSD-2-Clause-Patent +// + +#string STR_MODULE_ABSTRACT #language en-US "Host instance of Timer Library" + +#string STR_MODULE_DESCRIPTION #language en-US "An instance of the Timer Library that can be used for host based unit tests." diff --git a/UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest.dsc b/UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest.dsc index 701e7299d767..f82b3b7a323e 100644 --- a/UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest.dsc +++ b/UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest.dsc @@ -30,4 +30,5 @@ UnitTestFrameworkPkg/Library/CmockaLib/CmockaLib.inf UnitTestFrameworkPkg/Library/Posix/DebugLibPosix/DebugLibPosix.inf UnitTestFrameworkPkg/Library/Posix/MemoryAllocationLibPosix/MemoryAllocationLibPosix.inf + UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.inf UnitTestFrameworkPkg/Library/UnitTestLib/UnitTestLibCmocka.inf diff --git a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc b/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc index e954968efc52..76f0a719ded3 100644 --- a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc +++ b/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc @@ -13,6 +13,7 @@ UnitTestLib|UnitTestFrameworkPkg/Library/UnitTestLib/UnitTestLibCmocka.inf DebugLib|UnitTestFrameworkPkg/Library/Posix/DebugLibPosix/DebugLibPosix.inf MemoryAllocationLib|UnitTestFrameworkPkg/Library/Posix/MemoryAllocationLibPosix/MemoryAllocationLibPosix.inf + TimerLib|UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.inf [BuildOptions] GCC:*_*_*_CC_FLAGS = -fno-pie -- 2.27.0.windows.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v3 1/3] UnitTestFrameworkPkg : BaseTimerLibPosix: Adds a host-based timer Lib 2020-07-14 18:23 ` [PATCH v3 1/3] UnitTestFrameworkPkg : BaseTimerLibPosix: Adds a host-based timer Lib matthewfcarlson @ 2020-07-15 2:38 ` Michael D Kinney 0 siblings, 0 replies; 10+ messages in thread From: Michael D Kinney @ 2020-07-15 2:38 UTC (permalink / raw) To: matthewfcarlson@gmail.com, devel@edk2.groups.io, Kinney, Michael D Cc: Sean Brogan, Bret Barkelew Matt, Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com> Mike > -----Original Message----- > From: matthewfcarlson@gmail.com > <matthewfcarlson@gmail.com> > Sent: Tuesday, July 14, 2020 11:23 AM > To: devel@edk2.groups.io > Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Sean > Brogan <sean.brogan@microsoft.com>; Bret Barkelew > <Bret.Barkelew@microsoft.com> > Subject: [PATCH v3 1/3] UnitTestFrameworkPkg : > BaseTimerLibPosix: Adds a host-based timer Lib > > From: Matthew Carlson <macarl@microsoft.com> > > This adds a host based BaseTimerLib that won't assert. > > Cc: Michael D Kinney <michael.d.kinney@intel.com> > Cc: Sean Brogan <sean.brogan@microsoft.com> > Cc: Bret Barkelew <Bret.Barkelew@microsoft.com> > Signed-off-by: Matthew Carlson > <matthewfcarlson@gmail.com> > --- > > UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/Tim > erLibPosix.c | 132 ++++++++++++++++++++ > > UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/Bas > eTimerLibPosix.inf | 33 +++++ > > UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/Bas > eTimerLibPosix.uni | 14 +++ > > UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest.d > sc | 1 + > UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc > | 1 + > 5 files changed, 181 insertions(+) > > diff --git > a/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/T > imerLibPosix.c > b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/T > imerLibPosix.c > new file mode 100644 > index 000000000000..3c1394e3b21b > --- /dev/null > +++ > b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/T > imerLibPosix.c > @@ -0,0 +1,132 @@ > +/** @file > > + A semi-functional instance of the Timer Library. > > + > > + Copyright (c) Microsoft Corporation. > > + > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include <Base.h> > > +#include <Library/TimerLib.h> > > +#include <Library/DebugLib.h> > > +#include <stdio.h> > > +#include <stdlib.h> > > +#include <time.h> > > + > > +/** > > + Stalls the CPU for at least the given number of > microseconds. > > + > > + @param MicroSeconds The minimum number of > microseconds to delay. > > + @return The value of MicroSeconds inputted. > > + > > +**/ > > +UINTN > > +EFIAPI > > +MicroSecondDelay ( > > + IN UINTN MicroSeconds > > + ) > > +{ > > + // Since this is a host based test, we don't actually > want to stall > > + return MicroSeconds; > > +} > > + > > +/** > > + Stalls the CPU for at least the given number of > nanoseconds. > > + > > + @param NanoSeconds The minimum number of nanoseconds > to delay. > > + @return The value of NanoSeconds inputted. > > + > > +**/ > > +UINTN > > +EFIAPI > > +NanoSecondDelay ( > > + IN UINTN NanoSeconds > > + ) > > +{ > > + // Since this is a host based test, we don't actually > want to stall > > + return NanoSeconds; > > +} > > + > > +/** > > + Retrieves the current value of a 64-bit free running > performance counter. > > + > > + The counter can either count up by 1 or count down by > 1. If the physical > > + performance counter counts by a larger increment, > then the counter values > > + must be translated. The properties of the counter can > be retrieved from > > + GetPerformanceCounterProperties(). > > + > > + @return The current value of the free running > performance counter. > > + > > +**/ > > +UINT64 > > +EFIAPI > > +GetPerformanceCounter ( > > + VOID > > + ) > > +{ > > + struct timespec ts; > > + timespec_get(&ts, TIME_UTC); > > + // Return the current number of nanoseconds on the > clock > > + return ts.tv_nsec; > > +} > > + > > +/** > > + Retrieves the 64-bit frequency in Hz and the range of > performance counter > > + values. > > + > > + If StartValue is not NULL, then the value that the > performance counter starts > > + with immediately after is it rolls over is returned > in StartValue. If > > + EndValue is not NULL, then the value that the > performance counter end with > > + immediately before it rolls over is returned in > EndValue. The 64-bit > > + frequency of the performance counter in Hz is always > returned. If StartValue > > + is less than EndValue, then the performance counter > counts up. If StartValue > > + is greater than EndValue, then the performance > counter counts down. For > > + example, a 64-bit free running counter that counts up > would have a StartValue > > + of 0 and an EndValue of 0xFFFFFFFFFFFFFFFF. A 24-bit > free running counter > > + that counts down would have a StartValue of 0xFFFFFF > and an EndValue of 0. > > + > > + @param StartValue The value the performance counter > starts with when it > > + rolls over. > > + @param EndValue The value that the performance > counter ends with before > > + it rolls over. > > + > > + @return The frequency in Hz. > > + > > +**/ > > +UINT64 > > +EFIAPI > > +GetPerformanceCounterProperties ( > > + OUT UINT64 *StartValue, > OPTIONAL > > + OUT UINT64 *EndValue > OPTIONAL > > + ) > > +{ > > + if ( EndValue != NULL ) { > > + *EndValue = MAX_UINT64; > > + } > > + if ( StartValue != NULL ) { > > + *StartValue = 0; > > + } > > + // Return the number of nanoseconds in a second > > + return 1000000000; > > +} > > + > > +/** > > + Converts elapsed ticks of performance counter to time > in nanoseconds. > > + > > + This function converts the elapsed ticks of running > performance counter to > > + time value in unit of nanoseconds. > > + > > + @param Ticks The number of elapsed ticks of > running performance counter. > > + > > + @return The elapsed time in nanoseconds. > > + > > +**/ > > +UINT64 > > +EFIAPI > > +GetTimeInNanoSecond ( > > + IN UINT64 Ticks > > + ) > > +{ > > + return Ticks; > > +} > > diff --git > a/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/B > aseTimerLibPosix.inf > b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/B > aseTimerLibPosix.inf > new file mode 100644 > index 000000000000..797f04bb125b > --- /dev/null > +++ > b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/B > aseTimerLibPosix.inf > @@ -0,0 +1,33 @@ > +## @file > > +# An instance of Timer Library for posix compliant > hosts. > > +# > > +# A semi-functional instance of the Timer Library that > can be used for > > +# host based testing as a functional timer library > instance. > > +# > > +# Copyright (c) Microsoft Corporation. > > +# > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +# > > +# > > +## > > + > > +[Defines] > > + INF_VERSION = 0x00010005 > > + BASE_NAME = BaseTimerLibPosix > > + MODULE_UNI_FILE = > BaseTimerLibPosix.uni > > + FILE_GUID = a2a413b8-43c3-40cc- > a298-be7a214d3564 > > + MODULE_TYPE = BASE > > + VERSION_STRING = 1.0 > > + LIBRARY_CLASS = > TimerLib|HOST_APPLICATION > > +# > > +# VALID_ARCHITECTURES = HOST > > +# > > + > > +[Sources] > > + TimerLibPosix.c > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + > > +[LibraryClasses] > > + DebugLib > > diff --git > a/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/B > aseTimerLibPosix.uni > b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/B > aseTimerLibPosix.uni > new file mode 100644 > index 000000000000..a6859a0fc88a > --- /dev/null > +++ > b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/B > aseTimerLibPosix.uni > @@ -0,0 +1,14 @@ > +// @file > > +// An instance of Timer Library for posix compliant > hosts. > > +// > > +// A semi-functional instance of the Timer Library that > can be used > > +// for host based unit tests on posix compliant > machines. > > +// > > +// Copyright (c) Microsoft Corporation. > > +// > > +// SPDX-License-Identifier: BSD-2-Clause-Patent > > +// > > + > > +#string STR_MODULE_ABSTRACT #language en-US > "Host instance of Timer Library" > > + > > +#string STR_MODULE_DESCRIPTION #language en-US > "An instance of the Timer Library that can be used for > host based unit tests." > > diff --git > a/UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest > .dsc > b/UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest > .dsc > index 701e7299d767..f82b3b7a323e 100644 > --- > a/UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest > .dsc > +++ > b/UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest > .dsc > @@ -30,4 +30,5 @@ > UnitTestFrameworkPkg/Library/CmockaLib/CmockaLib.inf > > > UnitTestFrameworkPkg/Library/Posix/DebugLibPosix/DebugLi > bPosix.inf > > > UnitTestFrameworkPkg/Library/Posix/MemoryAllocationLibPo > six/MemoryAllocationLibPosix.inf > > + > UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/Bas > eTimerLibPosix.inf > > > UnitTestFrameworkPkg/Library/UnitTestLib/UnitTestLibCmoc > ka.inf > > diff --git > a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc > b/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc > index e954968efc52..76f0a719ded3 100644 > --- > a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc > +++ > b/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc > @@ -13,6 +13,7 @@ > > UnitTestLib|UnitTestFrameworkPkg/Library/UnitTestLib/Uni > tTestLibCmocka.inf > > > DebugLib|UnitTestFrameworkPkg/Library/Posix/DebugLibPosi > x/DebugLibPosix.inf > > > MemoryAllocationLib|UnitTestFrameworkPkg/Library/Posix/M > emoryAllocationLibPosix/MemoryAllocationLibPosix.inf > > + > TimerLib|UnitTestFrameworkPkg/Library/Posix/BaseTimerLib > Posix/BaseTimerLibPosix.inf > > > > [BuildOptions] > > GCC:*_*_*_CC_FLAGS = -fno-pie > > -- > 2.27.0.windows.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based) 2020-07-14 18:23 [PATCH v3 0/3] Add Unit Tests for BaseCryptLib to CryptoPkg matthewfcarlson 2020-07-14 18:23 ` [PATCH v3 1/3] UnitTestFrameworkPkg : BaseTimerLibPosix: Adds a host-based timer Lib matthewfcarlson @ 2020-07-14 18:23 ` matthewfcarlson 2020-07-15 2:52 ` [edk2-devel] " Michael D Kinney 2020-07-14 18:23 ` [PATCH v3 3/3] AzurePipelines : Pr Gate: Turn on HBUT for CryptoPkg matthewfcarlson 2 siblings, 1 reply; 10+ messages in thread From: matthewfcarlson @ 2020-07-14 18:23 UTC (permalink / raw) To: devel; +Cc: Jian J Wang, Xiaoyu Lu From: Matthew Carlson <macarl@microsoft.com> This adds a new INF for BaseCryptLib suitable for host based environments. It adds a host based unit test for BaseCryptLib that can also be built as a shell based Unit Test. Cc: Jian J Wang <jian.j.wang@intel.com> Cc: Xiaoyu Lu <xiaoyux.lu@intel.com> Signed-off-by: Matthew Carlson <matthewfcarlson@gmail.com> --- CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrtWrapper.c | 93 ++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/AuthenticodeTests.c | 1002 ++++++++++++++++++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCryptLibUnitTests.c | 66 ++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCipherTests.c | 293 ++++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c | 106 +++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests.c | 197 ++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c | 184 ++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncryptTests.c | 308 ++++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkdf2Tests.c | 71 ++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTests.c | 524 ++++++++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests.c | 51 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7Tests.c | 415 ++++++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.c | 310 ++++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c | 335 +++++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMain.c | 81 ++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMainBCOP.c | 58 ++ CryptoPkg/CryptoPkg.ci.yaml | 4 + CryptoPkg/CryptoPkg.dsc | 26 + CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf | 90 ++ CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc | 35 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTestSignatures.h | 789 +++++++++++++++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLib.h | 121 +++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibHost.inf | 46 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibUefiShell.inf | 49 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/ChainCreationInstructions.txt | 92 ++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/CreateTestCerts.cmd | 11 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/SignFirmwareWithEKUs.cmd | 76 ++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingIssuingCA.ini | 45 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSigner.ini | 25 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid1.ini | 24 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid12345.ini | 27 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingNoEKUsInSigner.ini | 16 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingPolicyCA.ini | 28 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingRoot.ini | 28 + 34 files changed, 5626 insertions(+) diff --git a/CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrtWrapper.c b/CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrtWrapper.c new file mode 100644 index 000000000000..a9c288e8f2be --- /dev/null +++ b/CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrtWrapper.c @@ -0,0 +1,93 @@ +/** @file + C Run-Time Libraries (CRT) Wrapper Implementation for OpenSSL-based + Cryptographic Library. + +Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR> +Copyright (c) Microsoft Corporation +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include <stdio.h> + +#include <Base.h> +#include <Library/DebugLib.h> + +/* Convert character to lowercase */ +int tolower (int c) +{ + if (('A' <= (c)) && ((c) <= 'Z')) { + return (c - ('A' - 'a')); + } + return (c); +} + +/* Compare first n bytes of string s1 with string s2, ignoring case */ +int strncasecmp (const char *s1, const char *s2, size_t n) +{ + int Val; + + ASSERT(s1 != NULL); + ASSERT(s2 != NULL); + + if (n != 0) { + do { + Val = tolower(*s1) - tolower(*s2); + if (Val != 0) { + return Val; + } + ++s1; + ++s2; + if (*s1 == '\0') { + break; + } + } while (--n != 0); + } + return 0; +} + +/* Read formatted data from a string */ +int sscanf (const char *buffer, const char *format, ...) +{ + // + // Null sscanf() function implementation to satisfy the linker, since + // no direct functionality logic dependency in present UEFI cases. + // + return 0; +} + +// +// -- Dummy OpenSSL Support Routines -- +// + +int BIO_printf (void *bio, const char *format, ...) +{ + return 0; +} + +int BIO_snprintf(char *buf, size_t n, const char *format, ...) +{ + return 0; +} + +uid_t getuid (void) +{ + return 0; +} + +uid_t geteuid (void) +{ + return 0; +} + +gid_t getgid (void) +{ + return 0; +} + +gid_t getegid (void) +{ + return 0; +} + +int errno = 0; diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/AuthenticodeTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/AuthenticodeTests.c new file mode 100644 index 000000000000..8935f289d87a --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/AuthenticodeTests.c @@ -0,0 +1,1002 @@ +/** @file + Sample Implementation for Microsoft Authenticode Verification. + +Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR> +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "TestBaseCryptLib.h" + +// +// Sample PE/COFF Image Hash Value (Digested by SHA-1). +// This value should be calculated following MSFT's Authenticode Specification +// +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 PeSha1Hash[] = { + 0x44, 0xFD, 0x4F, 0xA9, 0x17, 0xEE, 0xAC, 0xCF, 0x1F, 0x0B, 0xE3, 0xA1, 0x4D, 0x5B, 0xA6, 0x61, + 0x82, 0x97, 0xC4, 0xB6 + }; + +// +// Sample PE/COFF Image Hash Value (Digested by SHA-256). +// +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 PeSha256Hash[] = { + 0x61, 0x82, 0xB7, 0xF8, 0x8C, 0xFF, 0xC2, 0xEB, 0x79, 0x6E, 0x9D, 0xA9, 0xDD, 0x39, 0x52, 0xDD, + 0x36, 0xDD, 0xF1, 0x43, 0x27, 0x58, 0x8C, 0xA7, 0xCC, 0xAE, 0xDE, 0xDD, 0x3C, 0x02, 0x12, 0x49 + }; + +// +// Sample Authenticode Data with SHA-1 hash algorithm. +// This data should be retrieved from signed PE/COFF image according to SECURITY +// directory in PE/COFF Header. +// +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 AuthenticodeWithSha1[] = { + 0x30, 0x82, 0x1C, 0x43, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x02, 0xA0, + 0x82, 0x1C, 0x34, 0x30, 0x82, 0x1C, 0x30, 0x02, 0x01, 0x01, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x05, + 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0x30, 0x68, 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, + 0x82, 0x37, 0x02, 0x01, 0x04, 0xA0, 0x5A, 0x30, 0x58, 0x30, 0x33, 0x06, 0x0A, 0x2B, 0x06, 0x01, + 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x0F, 0x30, 0x25, 0x03, 0x01, 0x00, 0xA0, 0x20, 0xA2, 0x1E, + 0x80, 0x1C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x73, 0x00, 0x6F, + 0x00, 0x6C, 0x00, 0x65, 0x00, 0x74, 0x00, 0x65, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x3E, 0x30, 0x21, + 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14, 0x44, 0xFD, 0x4F, + 0xA9, 0x17, 0xEE, 0xAC, 0xCF, 0x1F, 0x0B, 0xE3, 0xA1, 0x4D, 0x5B, 0xA6, 0x61, 0x82, 0x97, 0xC4, + 0xB6, 0xA0, 0x82, 0x17, 0x18, 0x30, 0x82, 0x04, 0xCA, 0x30, 0x82, 0x03, 0xB2, 0xA0, 0x03, 0x02, + 0x01, 0x02, 0x02, 0x0A, 0x61, 0x03, 0xDC, 0xF6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x30, 0x0D, + 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x77, 0x31, + 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, + 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, + 0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, + 0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, + 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, + 0x69, 0x6F, 0x6E, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x18, 0x4D, 0x69, + 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x2D, 0x53, 0x74, 0x61, + 0x6D, 0x70, 0x20, 0x50, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x30, 0x38, 0x30, 0x37, 0x32, 0x35, + 0x31, 0x39, 0x31, 0x32, 0x35, 0x30, 0x5A, 0x17, 0x0D, 0x31, 0x31, 0x30, 0x37, 0x32, 0x35, 0x31, + 0x39, 0x32, 0x32, 0x35, 0x30, 0x5A, 0x30, 0x81, 0xB3, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, + 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, + 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06, + 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30, + 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, + 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x0D, 0x30, + 0x0B, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x04, 0x4D, 0x4F, 0x50, 0x52, 0x31, 0x27, 0x30, 0x25, + 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x1E, 0x6E, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x44, + 0x53, 0x45, 0x20, 0x45, 0x53, 0x4E, 0x3A, 0x31, 0x35, 0x39, 0x43, 0x2D, 0x41, 0x33, 0x46, 0x37, + 0x2D, 0x32, 0x35, 0x37, 0x30, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1C, + 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x2D, 0x53, + 0x74, 0x61, 0x6D, 0x70, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x30, 0x82, 0x01, 0x22, + 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, + 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC0, 0xED, 0x81, + 0x14, 0xA1, 0x5E, 0x77, 0xC0, 0x5B, 0xF4, 0x76, 0x89, 0x62, 0xFA, 0xAD, 0x7C, 0x68, 0x14, 0xB4, + 0xF7, 0xBD, 0x35, 0xD8, 0x13, 0x79, 0x5A, 0x17, 0xCA, 0xD9, 0x6C, 0x51, 0x45, 0x62, 0x26, 0x7A, + 0x2F, 0x1F, 0xD8, 0xEA, 0xC1, 0x6E, 0x01, 0x17, 0xF9, 0xC3, 0xA6, 0x1F, 0x67, 0xDB, 0x51, 0xB0, + 0x2C, 0xDE, 0x8A, 0x17, 0xED, 0xFF, 0x20, 0xAD, 0x34, 0xEA, 0x98, 0xFB, 0xA5, 0xD6, 0x2A, 0xD2, + 0xF1, 0x44, 0x27, 0x07, 0x5A, 0x2D, 0x3A, 0x93, 0xFF, 0x56, 0x53, 0xB0, 0xC8, 0xF5, 0xF3, 0x03, + 0xF2, 0x49, 0xCC, 0x16, 0xD0, 0xF5, 0x00, 0x4C, 0x58, 0xF8, 0x9B, 0xF5, 0x07, 0x25, 0xB1, 0x66, + 0x17, 0xC0, 0xBD, 0xC8, 0xD2, 0x52, 0x85, 0x8D, 0xC2, 0x2B, 0x38, 0xB2, 0xC3, 0x36, 0xBE, 0xF9, + 0x87, 0xDA, 0xF4, 0x8E, 0x5D, 0x43, 0xD7, 0x06, 0xBF, 0x99, 0x05, 0x9F, 0xA4, 0xCE, 0xFE, 0xAB, + 0x8D, 0x61, 0x63, 0xE7, 0x39, 0xC5, 0xF3, 0x18, 0xF6, 0xD8, 0xFC, 0x31, 0x36, 0x69, 0x72, 0x5A, + 0xA2, 0x1A, 0x4C, 0x3E, 0xEA, 0x87, 0x25, 0x42, 0x9D, 0xD1, 0x3E, 0xF1, 0x97, 0xD2, 0x18, 0x32, + 0x93, 0x70, 0x55, 0x53, 0x81, 0x1E, 0xE3, 0x3B, 0x0D, 0xE8, 0xBE, 0x82, 0x78, 0x6D, 0xE6, 0xFA, + 0xCD, 0x98, 0xA4, 0x6F, 0xDB, 0xEE, 0x66, 0xF4, 0x95, 0xC8, 0xCD, 0x35, 0xC9, 0x9E, 0xBB, 0x36, + 0x0D, 0x83, 0x96, 0x94, 0x26, 0xA7, 0x90, 0xE0, 0xA9, 0x34, 0x3B, 0xD5, 0xC0, 0x9E, 0x3E, 0xF0, + 0xD4, 0x47, 0x8D, 0x86, 0x0C, 0x82, 0xA4, 0x58, 0x30, 0x3A, 0x1C, 0x76, 0xE3, 0xAD, 0x95, 0x66, + 0xB4, 0xB7, 0xFD, 0x09, 0x8A, 0x05, 0x60, 0x0F, 0xA3, 0x0F, 0xE2, 0x93, 0x96, 0x58, 0x22, 0x9C, + 0x9D, 0x2B, 0xDB, 0xA2, 0x94, 0x18, 0x90, 0x95, 0x02, 0xBD, 0x06, 0x40, 0x95, 0x02, 0x03, 0x01, + 0x00, 0x01, 0xA3, 0x82, 0x01, 0x19, 0x30, 0x82, 0x01, 0x15, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, + 0x0E, 0x04, 0x16, 0x04, 0x14, 0xD2, 0xED, 0x0D, 0x1E, 0x24, 0xBB, 0x37, 0xA9, 0xD8, 0x20, 0x6A, + 0x4D, 0x1D, 0xD2, 0x16, 0xD5, 0x2E, 0xBE, 0x9E, 0xEB, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, + 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x23, 0x34, 0xF8, 0xD9, 0x52, 0x46, 0x70, 0x0A, 0xED, 0x40, + 0xFB, 0x76, 0xFB, 0xB3, 0x2B, 0xB0, 0xC3, 0x35, 0xB3, 0x0F, 0x30, 0x54, 0x06, 0x03, 0x55, 0x1D, + 0x1F, 0x04, 0x4D, 0x30, 0x4B, 0x30, 0x49, 0xA0, 0x47, 0xA0, 0x45, 0x86, 0x43, 0x68, 0x74, 0x74, + 0x70, 0x3A, 0x2F, 0x2F, 0x63, 0x72, 0x6C, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, + 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x72, 0x6C, 0x2F, 0x70, 0x72, + 0x6F, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, + 0x54, 0x69, 0x6D, 0x65, 0x53, 0x74, 0x61, 0x6D, 0x70, 0x50, 0x43, 0x41, 0x2E, 0x63, 0x72, 0x6C, + 0x30, 0x58, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x4C, 0x30, 0x4A, + 0x30, 0x48, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x3C, 0x68, 0x74, + 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, + 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x65, 0x72, 0x74, 0x73, + 0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x54, 0x69, 0x6D, 0x65, 0x53, 0x74, + 0x61, 0x6D, 0x70, 0x50, 0x43, 0x41, 0x2E, 0x63, 0x72, 0x74, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1D, + 0x25, 0x04, 0x0C, 0x30, 0x0A, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x08, 0x30, + 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x06, 0xC0, 0x30, + 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, + 0x01, 0x01, 0x00, 0x9C, 0x0A, 0x55, 0xC8, 0xCC, 0x44, 0x13, 0x34, 0x0C, 0xD8, 0x63, 0x27, 0x76, + 0x7D, 0x3E, 0xFA, 0x38, 0x32, 0x83, 0x53, 0x9D, 0xF2, 0x08, 0xF9, 0x32, 0xF5, 0xC5, 0x6E, 0x70, + 0xA1, 0xC9, 0xB1, 0x63, 0x6B, 0x19, 0x9D, 0x09, 0x67, 0xD9, 0x9D, 0xEB, 0x8A, 0x6A, 0xDB, 0x60, + 0x66, 0xE9, 0xE9, 0x52, 0x26, 0xF3, 0x3B, 0xC6, 0x6A, 0xD3, 0xC2, 0x52, 0xBE, 0xA8, 0xB9, 0xEB, + 0x6A, 0xAA, 0x78, 0x8C, 0xC9, 0x16, 0x7D, 0x90, 0x95, 0xA0, 0xCC, 0x21, 0xB3, 0x9E, 0x81, 0xBD, + 0xCD, 0xC1, 0x8B, 0x29, 0xBD, 0x62, 0x25, 0xEF, 0x09, 0x57, 0xE7, 0x86, 0x4E, 0x2A, 0xEC, 0x80, + 0xCA, 0xBB, 0xFC, 0x21, 0x16, 0xC4, 0x3F, 0x4E, 0x52, 0x19, 0xE6, 0x0E, 0xB1, 0xD8, 0xC1, 0xC2, + 0x79, 0x90, 0x64, 0xB4, 0x50, 0x73, 0x10, 0x35, 0x5E, 0x5D, 0x11, 0xC1, 0xB8, 0xBA, 0xAA, 0xCF, + 0x52, 0xF6, 0x80, 0x91, 0x00, 0xE6, 0xEF, 0x51, 0x43, 0x46, 0xE9, 0xD0, 0xE8, 0x94, 0xF6, 0x2C, + 0x24, 0x0D, 0x8A, 0xC6, 0xB2, 0x31, 0x8A, 0xA3, 0x7E, 0x36, 0x6C, 0xA4, 0x05, 0x4C, 0x67, 0x07, + 0x2A, 0xBB, 0xBB, 0x10, 0xA5, 0xA5, 0x30, 0x1A, 0x72, 0xD0, 0x06, 0x20, 0x3B, 0x24, 0x93, 0x5B, + 0x15, 0xD9, 0x39, 0x93, 0xD3, 0x73, 0x2D, 0x1A, 0xC4, 0xD4, 0x6C, 0x1E, 0xA1, 0x08, 0xEC, 0xF6, + 0x31, 0xB8, 0x6B, 0x4B, 0xEC, 0xEE, 0x5C, 0x33, 0x02, 0x14, 0x32, 0x8C, 0x7C, 0x11, 0x20, 0x2F, + 0x20, 0x03, 0x7F, 0xF9, 0x0C, 0x9D, 0xB8, 0xD3, 0x9E, 0x5F, 0xD6, 0x08, 0xFC, 0x81, 0xA0, 0x99, + 0xB8, 0xBB, 0x55, 0x6E, 0xCD, 0x42, 0x4B, 0x3A, 0x4D, 0x8C, 0x14, 0x2B, 0xCA, 0xC8, 0x12, 0xD3, + 0x62, 0x6E, 0xEA, 0x0D, 0x0A, 0x9D, 0x09, 0xA3, 0x66, 0xD9, 0x79, 0x4F, 0x8E, 0x1A, 0xA2, 0xFF, + 0xCC, 0x98, 0x04, 0x30, 0x82, 0x05, 0x96, 0x30, 0x82, 0x04, 0x7E, 0xA0, 0x03, 0x02, 0x01, 0x02, + 0x02, 0x0A, 0x61, 0x01, 0xC6, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x30, 0x0D, 0x06, 0x09, + 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x81, 0x81, 0x31, 0x0B, + 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, + 0x03, 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, + 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, + 0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, + 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, + 0x6F, 0x6E, 0x31, 0x2B, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x4D, 0x69, 0x63, + 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x20, 0x56, + 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x50, 0x43, 0x41, 0x30, + 0x1E, 0x17, 0x0D, 0x30, 0x38, 0x31, 0x30, 0x32, 0x32, 0x32, 0x30, 0x33, 0x39, 0x32, 0x32, 0x5A, + 0x17, 0x0D, 0x31, 0x30, 0x30, 0x31, 0x32, 0x32, 0x32, 0x30, 0x34, 0x39, 0x32, 0x32, 0x5A, 0x30, + 0x7F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, + 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, + 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, + 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, + 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, + 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x0D, 0x30, 0x0B, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x04, + 0x4D, 0x4F, 0x50, 0x52, 0x31, 0x1A, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x11, 0x4D, + 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, + 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, + 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, + 0x00, 0xDC, 0x3A, 0xD3, 0x44, 0xF4, 0x6E, 0x20, 0x9F, 0xDD, 0xA4, 0x0E, 0x82, 0x4E, 0xC7, 0x86, + 0x5E, 0x63, 0xCC, 0xCA, 0xE5, 0x42, 0x53, 0x4B, 0x85, 0xFA, 0x5D, 0x71, 0x6C, 0xCF, 0x76, 0x0C, + 0x18, 0x8B, 0xA6, 0x0D, 0xF5, 0x4A, 0xF7, 0xFE, 0x17, 0xF2, 0x90, 0xCC, 0x62, 0xC7, 0x24, 0xAD, + 0x9B, 0x9A, 0xE1, 0x45, 0x3B, 0x61, 0xD8, 0x0D, 0x05, 0x69, 0xC7, 0xCD, 0x88, 0x2A, 0xB8, 0xB9, + 0x18, 0x1E, 0x60, 0x10, 0x5F, 0x88, 0xC6, 0xD2, 0x82, 0x4E, 0x6D, 0x49, 0xC5, 0xBE, 0x5C, 0x12, + 0x86, 0x48, 0x85, 0x89, 0x91, 0x81, 0xCD, 0x1B, 0xAD, 0x1F, 0xB7, 0x2D, 0x67, 0x79, 0xF1, 0x7B, + 0x9F, 0x25, 0x87, 0x14, 0x76, 0x5F, 0xE3, 0x0E, 0x64, 0xA1, 0x72, 0x61, 0x25, 0xE5, 0x75, 0x69, + 0xC5, 0x14, 0xF1, 0x5F, 0x07, 0x56, 0xA4, 0x0D, 0x70, 0x06, 0x23, 0xA7, 0x6C, 0xDD, 0x82, 0xAE, + 0xD9, 0x9B, 0x47, 0xA4, 0xA5, 0x6C, 0x08, 0xB0, 0x58, 0xF1, 0x53, 0x6A, 0x4F, 0xDA, 0x85, 0x61, + 0xCB, 0x02, 0x7B, 0x49, 0xAF, 0x1F, 0xBB, 0xE0, 0xD7, 0xB9, 0x5E, 0xDB, 0x73, 0x89, 0x76, 0xC1, + 0x3A, 0xBB, 0x0D, 0xF5, 0x97, 0xF0, 0x88, 0x5D, 0x69, 0x77, 0x80, 0xCF, 0xF1, 0x7E, 0x03, 0x9F, + 0x73, 0x6D, 0xDE, 0x05, 0xB8, 0x2F, 0x77, 0xB5, 0x54, 0x55, 0x45, 0xD0, 0xD2, 0x38, 0xBD, 0x96, + 0xE3, 0xF7, 0xEA, 0x40, 0xE5, 0xAC, 0x19, 0xFC, 0x71, 0xCB, 0x28, 0x27, 0xAA, 0x71, 0xA1, 0x72, + 0xB5, 0x12, 0x27, 0xC1, 0x51, 0xF6, 0x36, 0xC5, 0xC0, 0xC7, 0x7B, 0x3A, 0x3A, 0x93, 0x37, 0x04, + 0xCC, 0xEE, 0x0B, 0x69, 0x78, 0x64, 0x75, 0x41, 0xB6, 0x78, 0x22, 0x0F, 0x77, 0x84, 0xF7, 0x4B, + 0x8D, 0x46, 0x65, 0x92, 0x5B, 0x4D, 0x56, 0x6B, 0x75, 0x04, 0x46, 0x3F, 0x0B, 0x1B, 0xB4, 0x19, + 0xBF, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x82, 0x02, 0x0F, 0x30, 0x82, 0x02, 0x0B, 0x30, 0x1F, + 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, 0x18, 0x30, 0x16, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, + 0x07, 0x03, 0x03, 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x0A, 0x03, 0x06, 0x30, + 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xA1, 0xE6, 0xC3, 0x65, 0xD0, 0xE6, + 0xE8, 0x28, 0x62, 0xC2, 0xF3, 0xC2, 0x23, 0xA6, 0x1C, 0x49, 0x82, 0x0B, 0xD5, 0x53, 0x30, 0x0E, + 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x1F, + 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x90, 0x8B, 0x11, + 0xA5, 0x70, 0xED, 0xE0, 0xF9, 0xA9, 0xC0, 0xAC, 0x08, 0xC7, 0xB5, 0xF4, 0x82, 0xB1, 0x3C, 0xC5, + 0x4A, 0x30, 0x7B, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x74, 0x30, 0x72, 0x30, 0x70, 0xA0, 0x6E, + 0xA0, 0x6C, 0x86, 0x34, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x63, 0x72, 0x6C, 0x2E, 0x6D, + 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, + 0x2F, 0x63, 0x72, 0x6C, 0x2F, 0x70, 0x72, 0x6F, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2F, 0x57, 0x69, + 0x6E, 0x50, 0x43, 0x41, 0x2E, 0x63, 0x72, 0x6C, 0x86, 0x34, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, + 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, + 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x72, 0x6C, 0x2F, 0x70, 0x72, 0x6F, 0x64, 0x75, + 0x63, 0x74, 0x73, 0x2F, 0x57, 0x69, 0x6E, 0x50, 0x43, 0x41, 0x2E, 0x63, 0x72, 0x6C, 0x30, 0x52, + 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x46, 0x30, 0x44, 0x30, 0x42, + 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x36, 0x68, 0x74, 0x74, 0x70, + 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, + 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x65, 0x72, 0x74, 0x73, 0x2F, 0x4D, + 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x57, 0x69, 0x6E, 0x50, 0x43, 0x41, 0x2E, 0x63, + 0x72, 0x74, 0x30, 0x81, 0xC6, 0x06, 0x03, 0x55, 0x1D, 0x20, 0x04, 0x81, 0xBE, 0x30, 0x81, 0xBB, + 0x30, 0x81, 0xB8, 0x06, 0x09, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x2F, 0x30, 0x81, + 0xAA, 0x30, 0x40, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, 0x16, 0x34, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, + 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x73, 0x73, 0x6C, + 0x2F, 0x63, 0x70, 0x73, 0x2F, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x50, 0x43, 0x41, 0x2E, + 0x68, 0x74, 0x6D, 0x30, 0x66, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x02, 0x30, + 0x5A, 0x1E, 0x58, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00, + 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x20, 0x00, 0xA9, 0x00, 0x20, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x2D, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x35, 0x00, 0x20, 0x00, + 0x4D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x66, 0x00, + 0x74, 0x00, 0x20, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, + 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x2E, 0x30, 0x0D, 0x06, 0x09, 0x2A, + 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x73, + 0x5F, 0xCA, 0x80, 0x1C, 0x60, 0x46, 0x6F, 0xB9, 0x34, 0x9D, 0x88, 0xE3, 0xBE, 0x22, 0x8C, 0xFA, + 0xE6, 0x58, 0x9A, 0xAB, 0x7B, 0x1A, 0x97, 0xFD, 0xED, 0x2E, 0x39, 0xCC, 0x59, 0x5B, 0x1D, 0x7A, + 0x06, 0x8A, 0xBB, 0x43, 0x93, 0x7B, 0x1E, 0xA1, 0x88, 0x53, 0xDF, 0x44, 0xF8, 0x53, 0xA9, 0xEA, + 0xF6, 0x67, 0x1B, 0x3A, 0x78, 0x84, 0x11, 0x6A, 0x6F, 0x29, 0x47, 0x90, 0x0A, 0x0C, 0x7B, 0x22, + 0x77, 0x4E, 0x6F, 0xB8, 0x64, 0x29, 0xDF, 0x06, 0xC7, 0xC8, 0x73, 0x84, 0xD6, 0x66, 0xA0, 0xCA, + 0xD9, 0x5A, 0x26, 0x82, 0x57, 0xF9, 0xE3, 0x4F, 0x39, 0xAF, 0x2E, 0x8E, 0xB1, 0x06, 0x5B, 0x72, + 0xF2, 0x37, 0x32, 0xAE, 0x4E, 0xCE, 0x3C, 0x7D, 0xB0, 0x12, 0x2B, 0x9E, 0xA5, 0x75, 0xE3, 0x43, + 0xA6, 0x12, 0x8B, 0x06, 0x14, 0x98, 0x77, 0xE3, 0x58, 0x32, 0x25, 0x60, 0x07, 0x8C, 0x59, 0x71, + 0xA7, 0x71, 0x41, 0xB3, 0x06, 0x8D, 0x5C, 0xEF, 0x9C, 0x7F, 0x5A, 0x22, 0x6D, 0xB7, 0xD3, 0xD9, + 0xF5, 0xA6, 0x1B, 0x52, 0xDE, 0xF5, 0x7E, 0x76, 0x7C, 0xFE, 0xF4, 0xC8, 0x23, 0x1A, 0x4B, 0x25, + 0xEB, 0xE4, 0xEE, 0xAF, 0x10, 0x0B, 0x55, 0xC3, 0xD8, 0xC1, 0x17, 0x85, 0x61, 0x6F, 0xD3, 0x3F, + 0xB6, 0xE9, 0xEC, 0x84, 0xA5, 0xEE, 0x6D, 0xB2, 0xFF, 0xE8, 0x6C, 0x95, 0xAB, 0x2B, 0x5E, 0xC8, + 0x85, 0xC3, 0x11, 0x60, 0xAC, 0xFA, 0x02, 0x05, 0xF1, 0x7B, 0xDA, 0xC3, 0x69, 0x49, 0x96, 0xA5, + 0x70, 0xF9, 0x65, 0x66, 0x46, 0x10, 0x8D, 0x34, 0xE9, 0x21, 0x94, 0x3C, 0x0F, 0x71, 0x4A, 0x1C, + 0xEA, 0x1F, 0xF7, 0x23, 0xA6, 0x87, 0x60, 0x34, 0xE9, 0x14, 0xE1, 0xDE, 0x03, 0x59, 0xB4, 0x02, + 0x1D, 0x3A, 0xAF, 0xE3, 0x55, 0x05, 0xF5, 0xED, 0xC1, 0xF4, 0xE4, 0x5D, 0x0E, 0xD3, 0x97, 0x30, + 0x82, 0x06, 0x07, 0x30, 0x82, 0x03, 0xEF, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0A, 0x61, 0x16, + 0x68, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, + 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x5F, 0x31, 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09, + 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19, + 0x30, 0x17, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09, + 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x31, 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F, + 0x6F, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, + 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1E, 0x17, 0x0D, 0x30, 0x37, 0x30, 0x34, + 0x30, 0x33, 0x31, 0x32, 0x35, 0x33, 0x30, 0x39, 0x5A, 0x17, 0x0D, 0x32, 0x31, 0x30, 0x34, 0x30, + 0x33, 0x31, 0x33, 0x30, 0x33, 0x30, 0x39, 0x5A, 0x30, 0x77, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, + 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, + 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, + 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, + 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, + 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x21, + 0x30, 0x1F, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x18, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, + 0x66, 0x74, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x2D, 0x53, 0x74, 0x61, 0x6D, 0x70, 0x20, 0x50, 0x43, + 0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, + 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, + 0x01, 0x00, 0x9F, 0xA1, 0x6C, 0xB1, 0xDF, 0xDB, 0x48, 0x92, 0x2A, 0x7C, 0x6B, 0x2E, 0x19, 0xE1, + 0xBD, 0xE2, 0xE3, 0xC5, 0x99, 0x51, 0x23, 0x50, 0xAD, 0xCE, 0xDD, 0x18, 0x4E, 0x24, 0x0F, 0xEE, + 0xD1, 0xA7, 0xD1, 0x4C, 0xAD, 0x74, 0x30, 0x20, 0x11, 0xEB, 0x07, 0xD5, 0x54, 0x95, 0x15, 0x49, + 0x94, 0x1B, 0x42, 0x92, 0xAE, 0x98, 0x5C, 0x30, 0x26, 0xDA, 0x00, 0x6B, 0xE8, 0x7B, 0xBD, 0xEC, + 0x89, 0x07, 0x0F, 0xF7, 0x0E, 0x04, 0x98, 0xF0, 0x89, 0xCC, 0x1F, 0xCB, 0x33, 0x24, 0x87, 0x9D, + 0xF2, 0xF4, 0x67, 0x1C, 0x2C, 0xFC, 0x7B, 0xE7, 0x88, 0x1D, 0xEA, 0xE7, 0x4E, 0xA3, 0xA1, 0xC1, + 0x23, 0x53, 0xCA, 0x8D, 0xFA, 0x45, 0xCF, 0x09, 0xD0, 0x5E, 0xAF, 0xD0, 0xB0, 0x42, 0x04, 0xA2, + 0xF9, 0xA6, 0x6C, 0x93, 0x67, 0xD7, 0x28, 0xDC, 0x46, 0x53, 0xB0, 0x86, 0xD0, 0xE5, 0x28, 0x46, + 0x2E, 0x27, 0xAC, 0x86, 0x4F, 0x55, 0x52, 0x0C, 0xE4, 0x03, 0x2C, 0xFB, 0x6A, 0x90, 0x90, 0x30, + 0x6E, 0x87, 0xF3, 0x59, 0x30, 0x9D, 0xFA, 0x7E, 0xD6, 0x97, 0xB3, 0xE8, 0x21, 0x97, 0x7E, 0xF8, + 0xD2, 0x13, 0xF3, 0x08, 0xB7, 0x53, 0x6D, 0x52, 0xB4, 0x45, 0x90, 0x9F, 0x48, 0x00, 0x4A, 0x47, + 0x66, 0x11, 0x27, 0x29, 0x66, 0xA8, 0x97, 0xE4, 0xD3, 0x06, 0x81, 0x4A, 0xA2, 0xF9, 0x84, 0xA7, + 0x11, 0x47, 0x14, 0x09, 0x82, 0x9F, 0x84, 0xED, 0x55, 0x78, 0xFE, 0x01, 0x9A, 0x1D, 0x50, 0x08, + 0x85, 0x00, 0x10, 0x30, 0x46, 0xED, 0xB7, 0xDE, 0x23, 0x46, 0xBB, 0xC4, 0x2D, 0x54, 0x9F, 0xAF, + 0x1E, 0x78, 0x41, 0x31, 0x77, 0xCC, 0x9B, 0xDF, 0x3B, 0x83, 0x93, 0xA1, 0x61, 0x02, 0xB5, 0x1D, + 0x0D, 0xB1, 0xFC, 0xF7, 0x9B, 0xB2, 0x01, 0xCE, 0x22, 0x4B, 0x54, 0xFF, 0xF9, 0x05, 0xC3, 0xC2, + 0x20, 0x0B, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x82, 0x01, 0xAB, 0x30, 0x82, 0x01, 0xA7, 0x30, + 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, + 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x23, 0x34, 0xF8, 0xD9, 0x52, + 0x46, 0x70, 0x0A, 0xED, 0x40, 0xFB, 0x76, 0xFB, 0xB3, 0x2B, 0xB0, 0xC3, 0x35, 0xB3, 0x0F, 0x30, + 0x0B, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x10, 0x06, 0x09, + 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x81, + 0x98, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x81, 0x90, 0x30, 0x81, 0x8D, 0x80, 0x14, 0x0E, 0xAC, + 0x82, 0x60, 0x40, 0x56, 0x27, 0x97, 0xE5, 0x25, 0x13, 0xFC, 0x2A, 0xE1, 0x0A, 0x53, 0x95, 0x59, + 0xE4, 0xA4, 0xA1, 0x63, 0xA4, 0x61, 0x30, 0x5F, 0x31, 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09, 0x92, + 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30, + 0x17, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6D, + 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x31, 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55, 0x04, + 0x03, 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F, + 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, + 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x82, 0x10, 0x79, 0xAD, 0x16, 0xA1, 0x4A, 0xA0, 0xA5, + 0xAD, 0x4C, 0x73, 0x58, 0xF4, 0x07, 0x13, 0x2E, 0x65, 0x30, 0x50, 0x06, 0x03, 0x55, 0x1D, 0x1F, + 0x04, 0x49, 0x30, 0x47, 0x30, 0x45, 0xA0, 0x43, 0xA0, 0x41, 0x86, 0x3F, 0x68, 0x74, 0x74, 0x70, + 0x3A, 0x2F, 0x2F, 0x63, 0x72, 0x6C, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, + 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x72, 0x6C, 0x2F, 0x70, 0x72, 0x6F, + 0x64, 0x75, 0x63, 0x74, 0x73, 0x2F, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x72, + 0x6F, 0x6F, 0x74, 0x63, 0x65, 0x72, 0x74, 0x2E, 0x63, 0x72, 0x6C, 0x30, 0x54, 0x06, 0x08, 0x2B, + 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x48, 0x30, 0x46, 0x30, 0x44, 0x06, 0x08, 0x2B, + 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x38, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, + 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, + 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x65, 0x72, 0x74, 0x73, 0x2F, 0x4D, 0x69, 0x63, 0x72, + 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x52, 0x6F, 0x6F, 0x74, 0x43, 0x65, 0x72, 0x74, 0x2E, 0x63, 0x72, + 0x74, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, 0x0C, 0x30, 0x0A, 0x06, 0x08, 0x2B, 0x06, + 0x01, 0x05, 0x05, 0x07, 0x03, 0x08, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, + 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x10, 0x97, 0x8A, 0xC3, 0x5C, 0x03, + 0x44, 0x36, 0xDD, 0xE9, 0xB4, 0xAD, 0x77, 0xDB, 0xCE, 0x79, 0x51, 0x4D, 0x01, 0xB1, 0x2E, 0x74, + 0x71, 0x5B, 0x6D, 0x0C, 0x13, 0xAB, 0xCE, 0xBE, 0x7B, 0x8F, 0xB8, 0x2E, 0xD4, 0x12, 0xA2, 0x8C, + 0x6D, 0x62, 0xB8, 0x57, 0x02, 0xCB, 0x4E, 0x20, 0x13, 0x50, 0x99, 0xDD, 0x7A, 0x40, 0xE2, 0x57, + 0xBB, 0xAF, 0x58, 0x9A, 0x1C, 0xE1, 0x1D, 0x01, 0x86, 0xAC, 0xBB, 0x78, 0xF2, 0x8B, 0xD0, 0xEC, + 0x3B, 0x01, 0xEE, 0xE2, 0xBE, 0x8F, 0x0A, 0x05, 0xC8, 0x8D, 0x48, 0xE2, 0xF0, 0x53, 0x15, 0xDD, + 0x4F, 0xAB, 0x92, 0xE4, 0xE7, 0x8D, 0x6A, 0xD5, 0x80, 0xC1, 0xE6, 0x94, 0xF2, 0x06, 0x2F, 0x85, + 0x03, 0xE9, 0x91, 0x2A, 0x24, 0x22, 0x70, 0xFB, 0xF6, 0xFC, 0xE4, 0x78, 0x99, 0x2E, 0x0D, 0xF7, + 0x07, 0xE2, 0x70, 0xBC, 0x18, 0x4E, 0x9D, 0x8E, 0x6B, 0x0A, 0x72, 0x95, 0xB8, 0xA1, 0x39, 0x9C, + 0x67, 0x2D, 0xC5, 0x51, 0x0E, 0xEA, 0x62, 0x5C, 0x3F, 0x16, 0x98, 0x8B, 0x20, 0x3F, 0xE2, 0x07, + 0x1A, 0x32, 0xF9, 0xCC, 0x31, 0x4A, 0x76, 0x31, 0x3D, 0x2B, 0x72, 0x0B, 0xC8, 0xEA, 0x70, 0x3D, + 0xFF, 0x85, 0x0A, 0x13, 0xDF, 0xC2, 0x0A, 0x61, 0x8E, 0xF0, 0xD7, 0xB8, 0x17, 0xEB, 0x4E, 0x8B, + 0x7F, 0xC5, 0x35, 0x2B, 0x5E, 0xA3, 0xBF, 0xEB, 0xBC, 0x7D, 0x0B, 0x42, 0x7B, 0xD4, 0x53, 0x72, + 0x21, 0xEE, 0x30, 0xCA, 0xBB, 0x78, 0x65, 0x5C, 0x5B, 0x01, 0x17, 0x0A, 0x14, 0x0E, 0xD2, 0xDA, + 0x14, 0x98, 0xF5, 0x3C, 0xB9, 0x66, 0x58, 0xB3, 0x2D, 0x2F, 0xE7, 0xF9, 0x85, 0x86, 0xCC, 0x51, + 0x56, 0xE8, 0x9D, 0x70, 0x94, 0x6C, 0xAC, 0x39, 0x4C, 0xD4, 0xF6, 0x79, 0xBF, 0xAA, 0x18, 0x7A, + 0x62, 0x29, 0xEF, 0xA2, 0x9B, 0x29, 0x34, 0x06, 0x77, 0x1A, 0x62, 0xC9, 0x3D, 0x1E, 0x6D, 0x1F, + 0x82, 0xF0, 0x0B, 0xC7, 0x2C, 0xBB, 0xCF, 0x43, 0xB3, 0xE5, 0xF9, 0xEC, 0x7D, 0xB5, 0xE3, 0xA4, + 0xA8, 0x74, 0x35, 0xB8, 0x4E, 0xC5, 0x71, 0x23, 0x12, 0x26, 0x76, 0x0B, 0x3C, 0x52, 0x8C, 0x71, + 0x5A, 0x46, 0x43, 0x14, 0xBC, 0xB3, 0xB3, 0xB0, 0x4D, 0x67, 0xC8, 0x9F, 0x42, 0xFF, 0x80, 0x79, + 0x21, 0x80, 0x9E, 0x15, 0x30, 0x66, 0xE8, 0x42, 0x12, 0x5E, 0x1A, 0xC8, 0x9E, 0x22, 0x21, 0xD0, + 0x43, 0xE9, 0x2B, 0xE9, 0xBB, 0xF4, 0x48, 0xCC, 0x2C, 0xD4, 0xD8, 0x32, 0x80, 0x4C, 0x26, 0x2A, + 0x48, 0x24, 0x5F, 0x5A, 0xEA, 0x56, 0xEF, 0xA6, 0xDE, 0x99, 0x9D, 0xCA, 0x3A, 0x6F, 0xBD, 0x81, + 0x27, 0x74, 0x06, 0x11, 0xEE, 0x76, 0x21, 0xBF, 0x9B, 0x82, 0xC1, 0x27, 0x54, 0xB6, 0xB1, 0x6A, + 0x3D, 0x89, 0xA1, 0x76, 0x61, 0xB4, 0x6E, 0xA1, 0x13, 0xA6, 0xBF, 0xAA, 0x47, 0xF0, 0x12, 0x6F, + 0xFD, 0x8A, 0x32, 0x6C, 0xB2, 0xFE, 0xDF, 0x51, 0xC8, 0x8C, 0x23, 0xC9, 0x66, 0xBD, 0x9D, 0x1D, + 0x87, 0x12, 0x64, 0x02, 0x3D, 0x2D, 0xAF, 0x59, 0x8F, 0xB8, 0xE4, 0x21, 0xE5, 0xB5, 0xB0, 0xCA, + 0x63, 0xB4, 0x78, 0x54, 0x05, 0xD4, 0x41, 0x2E, 0x50, 0xAC, 0x94, 0xB0, 0xA5, 0x78, 0xAB, 0xB3, + 0xA0, 0x96, 0x75, 0x1A, 0xD9, 0x92, 0x87, 0x13, 0x75, 0x22, 0x2F, 0x32, 0xA8, 0x08, 0x6E, 0xA0, + 0x5B, 0x8C, 0x25, 0xBF, 0xA0, 0xEF, 0x84, 0xCA, 0x21, 0xD6, 0xEB, 0x1E, 0x4F, 0xC9, 0x9A, 0xEE, + 0x49, 0xE0, 0xF7, 0x01, 0x65, 0x6F, 0x89, 0x0B, 0x7D, 0xC8, 0x69, 0xC8, 0xE6, 0x6E, 0xEA, 0xA7, + 0x97, 0xCE, 0x31, 0x29, 0xFF, 0x0E, 0xC5, 0x5B, 0x5C, 0xD8, 0x4D, 0x1B, 0xA1, 0xD8, 0xFA, 0x2F, + 0x9E, 0x3F, 0x2E, 0x55, 0x16, 0x6B, 0xC9, 0x13, 0xA3, 0xFD, 0x30, 0x82, 0x06, 0xA1, 0x30, 0x82, + 0x04, 0x89, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0A, 0x61, 0x07, 0x02, 0xDC, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0B, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, + 0x05, 0x00, 0x30, 0x5F, 0x31, 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, + 0x2C, 0x64, 0x01, 0x19, 0x16, 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30, 0x17, 0x06, 0x0A, 0x09, + 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6D, 0x69, 0x63, 0x72, 0x6F, + 0x73, 0x6F, 0x66, 0x74, 0x31, 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x24, 0x4D, + 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x43, 0x65, + 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, + 0x69, 0x74, 0x79, 0x30, 0x1E, 0x17, 0x0D, 0x30, 0x35, 0x30, 0x39, 0x31, 0x35, 0x32, 0x31, 0x35, + 0x35, 0x34, 0x31, 0x5A, 0x17, 0x0D, 0x31, 0x36, 0x30, 0x33, 0x31, 0x35, 0x32, 0x32, 0x30, 0x35, + 0x34, 0x31, 0x5A, 0x30, 0x81, 0x81, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, + 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, 0x61, + 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, + 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03, + 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x43, + 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x2B, 0x30, 0x29, 0x06, 0x03, + 0x55, 0x04, 0x03, 0x13, 0x22, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x57, + 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x20, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6F, 0x6E, 0x20, 0x50, 0x43, 0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, + 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, + 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC5, 0xAC, 0x93, 0x4E, 0xE6, 0x4A, 0x11, 0x9E, + 0x37, 0xD0, 0x35, 0xD2, 0xB0, 0x06, 0x5C, 0x83, 0x14, 0xA5, 0x61, 0x92, 0xFC, 0xFE, 0xB3, 0x89, + 0xC1, 0xE6, 0xCD, 0xC8, 0x1F, 0x31, 0x84, 0x09, 0x91, 0x34, 0x46, 0x92, 0x2C, 0xB8, 0xEE, 0x2C, + 0xC5, 0x20, 0x73, 0xC4, 0xE8, 0x1A, 0xD8, 0x8D, 0xCE, 0x7A, 0x68, 0xB5, 0x66, 0x78, 0x8B, 0xE5, + 0x60, 0x15, 0xA2, 0xF6, 0x29, 0x5A, 0x1D, 0x5E, 0x5D, 0xFC, 0x62, 0xD3, 0xC1, 0x5C, 0x29, 0x89, + 0xFB, 0x33, 0xF8, 0x16, 0x95, 0x36, 0xDD, 0xB1, 0x46, 0x74, 0x69, 0x72, 0x53, 0xD5, 0xAA, 0xE8, + 0x8A, 0x99, 0x1A, 0xD8, 0xF7, 0x67, 0x09, 0xD9, 0x09, 0x20, 0x22, 0x38, 0x7A, 0xD6, 0x03, 0x23, + 0xD7, 0x89, 0x9F, 0x1C, 0x01, 0xB7, 0x51, 0xDF, 0x98, 0x66, 0x2A, 0x02, 0x8B, 0x06, 0xEC, 0xE4, + 0x29, 0xEF, 0x5B, 0x42, 0x17, 0x15, 0x97, 0x51, 0x8D, 0x7D, 0x25, 0x0A, 0xAF, 0x25, 0xE8, 0xDE, + 0xDC, 0x9B, 0x67, 0x16, 0x0A, 0x56, 0x73, 0x9D, 0xB3, 0x1D, 0x85, 0x83, 0x0B, 0x7E, 0x33, 0x2B, + 0x62, 0x33, 0xCE, 0x1C, 0x20, 0x81, 0x4B, 0x5E, 0xD3, 0xC6, 0x49, 0xB8, 0xF6, 0x2E, 0xD3, 0x4E, + 0xB0, 0x71, 0x44, 0x46, 0x64, 0x3E, 0xDE, 0x43, 0x66, 0x04, 0xB9, 0xCC, 0x83, 0x48, 0x3A, 0xC5, + 0x36, 0x7A, 0x04, 0x48, 0x0B, 0x89, 0x02, 0x3D, 0x63, 0xA2, 0x01, 0x76, 0x29, 0x97, 0x75, 0xE9, + 0x01, 0xE6, 0x00, 0x97, 0x09, 0x92, 0xF8, 0xE2, 0x27, 0xF0, 0x29, 0x67, 0x43, 0x77, 0xC3, 0x50, + 0x96, 0x53, 0x31, 0xE1, 0xB6, 0x71, 0x8B, 0xEC, 0x77, 0xC7, 0x7C, 0x31, 0x48, 0xD5, 0xB8, 0x25, + 0x22, 0x8C, 0x00, 0xF7, 0x28, 0x38, 0x7A, 0xBD, 0x7C, 0xC7, 0x3F, 0xCD, 0x40, 0x26, 0x77, 0xDD, + 0x00, 0x00, 0x11, 0x9A, 0x95, 0xBE, 0x1F, 0xDB, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x82, 0x02, + 0x3A, 0x30, 0x82, 0x02, 0x36, 0x30, 0x10, 0x06, 0x09, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, + 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, + 0x04, 0x14, 0x90, 0x8B, 0x11, 0xA5, 0x70, 0xED, 0xE0, 0xF9, 0xA9, 0xC0, 0xAC, 0x08, 0xC7, 0xB5, + 0xF4, 0x82, 0xB1, 0x3C, 0xC5, 0x4A, 0x30, 0x0B, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x04, 0x04, 0x03, + 0x02, 0x01, 0xC6, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, + 0x03, 0x01, 0x01, 0xFF, 0x30, 0x81, 0x98, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x81, 0x90, 0x30, + 0x81, 0x8D, 0x80, 0x14, 0x0E, 0xAC, 0x82, 0x60, 0x40, 0x56, 0x27, 0x97, 0xE5, 0x25, 0x13, 0xFC, + 0x2A, 0xE1, 0x0A, 0x53, 0x95, 0x59, 0xE4, 0xA4, 0xA1, 0x63, 0xA4, 0x61, 0x30, 0x5F, 0x31, 0x13, + 0x30, 0x11, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x03, + 0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30, 0x17, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, + 0x64, 0x01, 0x19, 0x16, 0x09, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x31, 0x2D, + 0x30, 0x2B, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, + 0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x82, 0x10, 0x79, + 0xAD, 0x16, 0xA1, 0x4A, 0xA0, 0xA5, 0xAD, 0x4C, 0x73, 0x58, 0xF4, 0x07, 0x13, 0x2E, 0x65, 0x30, + 0x50, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x49, 0x30, 0x47, 0x30, 0x45, 0xA0, 0x43, 0xA0, 0x41, + 0x86, 0x3F, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x63, 0x72, 0x6C, 0x2E, 0x6D, 0x69, 0x63, + 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, + 0x72, 0x6C, 0x2F, 0x70, 0x72, 0x6F, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2F, 0x6D, 0x69, 0x63, 0x72, + 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x72, 0x6F, 0x6F, 0x74, 0x63, 0x65, 0x72, 0x74, 0x2E, 0x63, 0x72, + 0x6C, 0x30, 0x54, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x48, 0x30, + 0x46, 0x30, 0x44, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x38, 0x68, + 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, + 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x65, 0x72, 0x74, + 0x73, 0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x52, 0x6F, 0x6F, 0x74, 0x43, + 0x65, 0x72, 0x74, 0x2E, 0x63, 0x72, 0x74, 0x30, 0x81, 0x80, 0x06, 0x03, 0x55, 0x1D, 0x20, 0x04, + 0x79, 0x30, 0x77, 0x30, 0x75, 0x06, 0x09, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x2F, + 0x30, 0x68, 0x30, 0x66, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x02, 0x30, 0x5A, + 0x1E, 0x58, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, + 0x00, 0x68, 0x00, 0x74, 0x00, 0x20, 0x00, 0xA9, 0x00, 0x20, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x2D, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x35, 0x00, 0x20, 0x00, 0x4D, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x74, + 0x00, 0x20, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x61, + 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x2E, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, + 0x25, 0x04, 0x18, 0x30, 0x16, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x03, 0x06, + 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x0A, 0x03, 0x06, 0x30, 0x0D, 0x06, 0x09, 0x2A, + 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x25, + 0x31, 0xA1, 0x58, 0xEA, 0x52, 0xE5, 0xE1, 0x17, 0x0C, 0xE6, 0xF1, 0x3F, 0x78, 0xA3, 0x3F, 0x72, + 0xAF, 0xA7, 0x57, 0x10, 0x53, 0x89, 0x10, 0x5E, 0x32, 0x9C, 0xB6, 0x70, 0xC3, 0x15, 0x2B, 0x4D, + 0x15, 0x30, 0x34, 0xE8, 0xC0, 0x6A, 0xE4, 0x1C, 0xD3, 0x2E, 0x20, 0x65, 0x48, 0xD7, 0x1B, 0x98, + 0x62, 0x21, 0xBA, 0x45, 0x9F, 0x4A, 0xEC, 0xDB, 0x2F, 0x09, 0x19, 0x51, 0xE5, 0xED, 0x32, 0x19, + 0x51, 0x2F, 0xE1, 0xDD, 0xFB, 0xC6, 0x52, 0xFD, 0xEB, 0xC6, 0x82, 0x25, 0x42, 0x03, 0x09, 0xA6, + 0x38, 0xB6, 0x36, 0x1F, 0xCC, 0xC9, 0x80, 0xBB, 0x5A, 0x69, 0x18, 0x31, 0xC3, 0xB3, 0xA0, 0xB3, + 0x67, 0x47, 0xBE, 0x9D, 0xC7, 0xE2, 0x3F, 0x96, 0xB3, 0x88, 0xF8, 0x19, 0xBE, 0x39, 0xB9, 0xE9, + 0x95, 0xCE, 0xFC, 0x7C, 0xAF, 0xA8, 0xCD, 0xD0, 0x41, 0x90, 0xE0, 0xD5, 0xB3, 0x1C, 0x2F, 0x68, + 0xBB, 0xDB, 0x0F, 0x6C, 0x6A, 0xDD, 0xF2, 0xAF, 0xDE, 0xF2, 0xB5, 0xDE, 0x0D, 0xB6, 0xA6, 0x5A, + 0xF0, 0x86, 0x0A, 0xB9, 0x6D, 0x99, 0x4B, 0x3F, 0x7B, 0x2D, 0x01, 0x84, 0x6C, 0x8F, 0x87, 0xDC, + 0x7F, 0x8F, 0xAB, 0x14, 0x88, 0xD0, 0x06, 0x91, 0x34, 0xBE, 0x1B, 0x82, 0x22, 0xA4, 0xBC, 0x55, + 0x8A, 0xAD, 0x9B, 0xFC, 0x73, 0x14, 0x10, 0xC4, 0xC9, 0x19, 0x1E, 0x07, 0x7D, 0x9B, 0x0E, 0xC0, + 0x95, 0x26, 0x5D, 0xC6, 0x1F, 0xAC, 0xB4, 0xF2, 0x7E, 0xBA, 0x25, 0x70, 0x4A, 0x7B, 0xD7, 0x8E, + 0xD1, 0x9D, 0xA0, 0x13, 0x49, 0x7A, 0xB0, 0x02, 0x52, 0x52, 0x24, 0xF4, 0xAF, 0xDD, 0x40, 0x2D, + 0xE5, 0x3E, 0x32, 0x58, 0xB3, 0x4A, 0x6A, 0xDD, 0x11, 0x59, 0xAA, 0x2D, 0xBC, 0xA4, 0xA0, 0x73, + 0x38, 0xF9, 0x40, 0x77, 0x6B, 0x34, 0x19, 0x57, 0xCD, 0x38, 0x68, 0x27, 0x82, 0xF8, 0xD1, 0x6F, + 0xEB, 0x23, 0xC0, 0x3F, 0x52, 0xF3, 0x4E, 0xD5, 0x02, 0x3E, 0x6A, 0x9A, 0x2B, 0xC1, 0xF5, 0x31, + 0x71, 0xDB, 0x41, 0x4D, 0x3B, 0xDE, 0xEF, 0xAD, 0xAF, 0x1F, 0x88, 0x65, 0x43, 0x1B, 0x51, 0xB7, + 0x9A, 0x75, 0xCA, 0x8E, 0x69, 0x49, 0x10, 0x8F, 0x78, 0x8A, 0x74, 0x45, 0xB9, 0x09, 0x8E, 0x73, + 0x77, 0x07, 0x32, 0x4A, 0x4B, 0xD7, 0x68, 0x2B, 0x98, 0xC5, 0xBA, 0x54, 0xEA, 0x3F, 0xCB, 0xA2, + 0x00, 0x8C, 0xBB, 0xD8, 0x10, 0x58, 0xF2, 0xDB, 0xDC, 0x9B, 0xCD, 0xD8, 0xEA, 0x48, 0x43, 0xE2, + 0x4A, 0x7E, 0x65, 0xB2, 0xDC, 0xF5, 0x2D, 0x4E, 0x25, 0x67, 0xA8, 0xE0, 0xB5, 0xBA, 0xA7, 0xDD, + 0x7E, 0x5E, 0xC1, 0x4C, 0x02, 0x74, 0xC9, 0xB3, 0x6E, 0xE3, 0xF8, 0xF0, 0x0B, 0xED, 0xFC, 0xB9, + 0x29, 0xC5, 0x5B, 0xC9, 0x36, 0x51, 0x90, 0xDB, 0x78, 0x7D, 0xB9, 0x32, 0x0F, 0x5E, 0x76, 0xD2, + 0x15, 0x5C, 0x3B, 0x37, 0x21, 0xC6, 0xDB, 0xC9, 0x19, 0x6E, 0xED, 0x74, 0x2A, 0x5C, 0x2C, 0x0B, + 0x51, 0x49, 0x45, 0x53, 0xB0, 0xB2, 0xB3, 0x23, 0xD4, 0xA1, 0xB0, 0x5F, 0x0D, 0x19, 0xCD, 0x14, + 0xA7, 0xE3, 0x3C, 0x9B, 0x97, 0x72, 0x94, 0x14, 0xDF, 0xFF, 0xC1, 0x90, 0x1B, 0xA5, 0xDF, 0xF5, + 0xA9, 0xF3, 0x1B, 0x17, 0xDA, 0xB5, 0xFC, 0x44, 0xE0, 0xE8, 0xE2, 0x3C, 0xA2, 0x7A, 0xBB, 0xBB, + 0x65, 0xE6, 0x4D, 0xB1, 0xB5, 0x15, 0xA1, 0xD9, 0x67, 0x3B, 0xB0, 0x0C, 0x7D, 0x3B, 0xE9, 0xEE, + 0x51, 0x2A, 0x47, 0xF5, 0x15, 0x0F, 0x8C, 0xAD, 0x5D, 0x2E, 0x35, 0xDF, 0xF4, 0xA4, 0x2E, 0xF6, + 0x13, 0x37, 0x5A, 0x2B, 0xE8, 0x55, 0x9A, 0x49, 0x2C, 0x97, 0xCE, 0x9D, 0x01, 0x9E, 0x97, 0x46, + 0x5C, 0xD9, 0x2D, 0xBC, 0x24, 0x5A, 0x95, 0x59, 0x6F, 0x4D, 0xCA, 0x9D, 0xD6, 0x57, 0x26, 0x31, + 0x82, 0x04, 0x96, 0x30, 0x82, 0x04, 0x92, 0x02, 0x01, 0x01, 0x30, 0x81, 0x90, 0x30, 0x81, 0x81, + 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, + 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, + 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, + 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, + 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, + 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x2B, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x4D, + 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, + 0x20, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x50, 0x43, + 0x41, 0x02, 0x0A, 0x61, 0x01, 0xC6, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x30, 0x09, 0x06, + 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0xA0, 0x81, 0xBA, 0x30, 0x19, 0x06, 0x09, 0x2A, + 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x03, 0x31, 0x0C, 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, + 0x01, 0x82, 0x37, 0x02, 0x01, 0x04, 0x30, 0x1C, 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, + 0x37, 0x02, 0x01, 0x0B, 0x31, 0x0E, 0x30, 0x0C, 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, + 0x37, 0x02, 0x01, 0x15, 0x30, 0x23, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, + 0x04, 0x31, 0x16, 0x04, 0x14, 0xC5, 0xC5, 0xC1, 0xC3, 0x46, 0xC4, 0x12, 0xB9, 0x38, 0xED, 0xE5, + 0x7E, 0x66, 0x78, 0x4E, 0x8F, 0x55, 0x10, 0x7D, 0xAC, 0x30, 0x5A, 0x06, 0x0A, 0x2B, 0x06, 0x01, + 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x0C, 0x31, 0x4C, 0x30, 0x4A, 0xA0, 0x24, 0x80, 0x22, 0x00, + 0x4D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x66, 0x00, + 0x74, 0x00, 0x20, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, + 0x73, 0xA1, 0x22, 0x80, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, + 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x77, 0x69, + 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, + 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0xC0, 0x53, 0x19, 0xE7, 0x27, 0xE6, 0xD6, 0xD7, + 0xA8, 0xAE, 0xA0, 0xE6, 0x4C, 0xEF, 0x9A, 0xBC, 0x1D, 0x19, 0xD4, 0xC5, 0x7F, 0x7C, 0x71, 0xFF, + 0x14, 0x7C, 0xAD, 0x7A, 0x8F, 0x2D, 0x0F, 0x40, 0x38, 0x9B, 0x83, 0x09, 0xEE, 0xF5, 0x34, 0x92, + 0xB4, 0x85, 0x34, 0x7C, 0xBA, 0x9B, 0x58, 0x5D, 0xA6, 0x15, 0xDE, 0x99, 0xBF, 0x25, 0x89, 0xDB, + 0xC0, 0x3A, 0x98, 0x21, 0x1C, 0x25, 0x09, 0xBD, 0x41, 0xAA, 0x0F, 0x90, 0x6C, 0x62, 0xE9, 0xBD, + 0x1D, 0xDD, 0x7C, 0xA4, 0x1F, 0x19, 0x3F, 0xC8, 0x11, 0xF5, 0x1C, 0x9E, 0xEA, 0x2E, 0x1A, 0xCE, + 0x5A, 0x61, 0x8A, 0x77, 0xFA, 0x65, 0x1F, 0x03, 0xB4, 0x45, 0x02, 0x0F, 0xB4, 0x0E, 0xB9, 0x44, + 0xF6, 0x75, 0xF6, 0x67, 0x91, 0xAD, 0xFA, 0xF9, 0xC3, 0xFA, 0x63, 0x91, 0x58, 0xFE, 0x40, 0xDF, + 0x92, 0x6B, 0x59, 0x42, 0x44, 0x66, 0xD2, 0x88, 0x49, 0x59, 0x29, 0x1D, 0x6A, 0xF9, 0x93, 0x9B, + 0xD5, 0x38, 0x84, 0x96, 0xD7, 0xAF, 0xBA, 0xEC, 0x29, 0x8D, 0x06, 0x8C, 0x8B, 0xF4, 0xA1, 0x56, + 0x0F, 0x78, 0x3F, 0x35, 0xCB, 0x12, 0x8A, 0x85, 0xD5, 0x7C, 0xFC, 0x63, 0xDD, 0x72, 0xA1, 0x13, + 0xD3, 0x25, 0x4A, 0x59, 0x21, 0xD0, 0xC6, 0x47, 0x9F, 0x22, 0xF7, 0xF8, 0x32, 0xA2, 0x05, 0x2B, + 0x53, 0xC5, 0x96, 0x98, 0x0D, 0x39, 0x02, 0xAD, 0x85, 0xF7, 0x18, 0x73, 0x34, 0x12, 0x7F, 0x5A, + 0xCB, 0xE1, 0xA2, 0xFB, 0x4E, 0x25, 0x81, 0xF0, 0x9F, 0x7A, 0x79, 0xDB, 0x4F, 0x4B, 0x66, 0x44, + 0x30, 0x8E, 0x0D, 0x57, 0x23, 0xD3, 0x7F, 0x60, 0x87, 0xDE, 0xD0, 0x4C, 0x90, 0x90, 0x84, 0x64, + 0x70, 0xE8, 0x15, 0x65, 0xCA, 0x18, 0xF8, 0x9A, 0xB6, 0x0C, 0x24, 0xF5, 0xDF, 0xC3, 0x47, 0xE2, + 0x7C, 0xAD, 0x91, 0x70, 0x6D, 0xF8, 0x43, 0xE9, 0xA1, 0x82, 0x02, 0x1D, 0x30, 0x82, 0x02, 0x19, + 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x06, 0x31, 0x82, 0x02, 0x0A, 0x30, + 0x82, 0x02, 0x06, 0x02, 0x01, 0x01, 0x30, 0x81, 0x85, 0x30, 0x77, 0x31, 0x0B, 0x30, 0x09, 0x06, + 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, + 0x08, 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, + 0x0E, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, + 0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, + 0x6F, 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, + 0x21, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x18, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, + 0x6F, 0x66, 0x74, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x2D, 0x53, 0x74, 0x61, 0x6D, 0x70, 0x20, 0x50, + 0x43, 0x41, 0x02, 0x0A, 0x61, 0x03, 0xDC, 0xF6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x30, 0x07, + 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0xA0, 0x5D, 0x30, 0x18, 0x06, 0x09, 0x2A, 0x86, 0x48, + 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x03, 0x31, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, + 0x01, 0x07, 0x01, 0x30, 0x1C, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x05, + 0x31, 0x0F, 0x17, 0x0D, 0x30, 0x39, 0x30, 0x34, 0x32, 0x32, 0x30, 0x35, 0x35, 0x34, 0x33, 0x34, + 0x5A, 0x30, 0x23, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x04, 0x31, 0x16, + 0x04, 0x14, 0x74, 0xD7, 0x54, 0xA0, 0xC0, 0x9E, 0x62, 0xF0, 0xDD, 0x92, 0xDC, 0xD6, 0x96, 0x34, + 0xA1, 0x0B, 0xF0, 0xD5, 0xB5, 0x3A, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, + 0x01, 0x01, 0x05, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0x8D, 0x16, 0xB5, 0xC8, 0x3D, 0xBC, 0x8A, + 0xB5, 0xC3, 0x23, 0xF3, 0x33, 0xB0, 0xFA, 0x75, 0xAD, 0xAC, 0x53, 0x0D, 0x5C, 0xF4, 0xD9, 0xBE, + 0x63, 0xEB, 0x0D, 0x6F, 0x69, 0x63, 0x91, 0xF8, 0x8E, 0x67, 0x03, 0xE1, 0xC6, 0x2E, 0xCD, 0x9C, + 0xEB, 0xDD, 0x9C, 0xCA, 0x65, 0x4A, 0xBB, 0xF2, 0xF4, 0x1C, 0x85, 0x44, 0xD6, 0x58, 0x70, 0x2E, + 0x3B, 0xFE, 0x97, 0xD0, 0xEC, 0x72, 0x77, 0x20, 0xA8, 0x20, 0xAC, 0xF0, 0xED, 0x86, 0xC4, 0xFF, + 0x3A, 0x3D, 0x40, 0xD9, 0xF6, 0xD5, 0x99, 0xBE, 0xCC, 0xD2, 0xD8, 0xBA, 0x71, 0x51, 0x60, 0xAA, + 0x72, 0x36, 0x13, 0x8B, 0x0A, 0xA9, 0xD6, 0xF5, 0x36, 0xE0, 0x44, 0x6B, 0xC1, 0x44, 0x42, 0x43, + 0x56, 0x1A, 0xD6, 0xF1, 0x5A, 0x98, 0xCC, 0xBA, 0xA9, 0x4C, 0xCF, 0xC9, 0x86, 0xC3, 0x5B, 0x1C, + 0xDF, 0x75, 0x22, 0x54, 0x6A, 0xF0, 0x18, 0x34, 0x0B, 0x29, 0xB0, 0x26, 0x07, 0x59, 0xB6, 0x52, + 0x7B, 0x69, 0x74, 0x11, 0x1B, 0xB8, 0x29, 0x19, 0x36, 0x0E, 0xB7, 0x65, 0xCB, 0x87, 0x09, 0x9E, + 0x03, 0x28, 0x6C, 0xDB, 0xA7, 0xFB, 0xDF, 0xC7, 0xF7, 0xCE, 0x0D, 0xC2, 0xBA, 0xEA, 0x3C, 0xE8, + 0x43, 0x1E, 0x7F, 0xF2, 0x64, 0xDA, 0x87, 0x89, 0xC0, 0xCD, 0x67, 0xE4, 0x84, 0x9B, 0xA7, 0x77, + 0xFA, 0x6C, 0x69, 0x19, 0x5B, 0xD1, 0xF7, 0xD9, 0x07, 0x91, 0x50, 0xDD, 0x98, 0x26, 0x10, 0xE3, + 0x2E, 0x39, 0x62, 0xF0, 0x56, 0xE9, 0xD9, 0x5C, 0x85, 0x67, 0x9B, 0x2F, 0xDE, 0xD1, 0x00, 0x45, + 0x0E, 0x99, 0x1F, 0xDF, 0x7E, 0xC9, 0x10, 0x56, 0xC7, 0x00, 0x6D, 0x5F, 0x23, 0x57, 0x12, 0x84, + 0xCD, 0xAC, 0x82, 0xAE, 0x39, 0x52, 0xA5, 0x19, 0x23, 0xA3, 0x6B, 0xE7, 0x49, 0x8F, 0x86, 0x74, + 0x46, 0x41, 0x2A, 0x0F, 0x3D, 0x29, 0xB7, 0xAE, 0x8C, 0x00 + }; + +// +// Sample Authenticode Data with SHA-256 hash algorithm. +// This data should be retrieved from signed PE/COFF image according to SECURITY +// directory in PE/COFF Header. +// +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 AuthenticodeWithSha256[] = { + 0x30, 0x82, 0x0e, 0xd1, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0, + 0x82, 0x0e, 0xc2, 0x30, 0x82, 0x0e, 0xbe, 0x02, 0x01, 0x01, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x09, + 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x5c, 0x06, 0x0a, 0x2b, + 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x04, 0xa0, 0x4e, 0x30, 0x4c, 0x30, 0x17, 0x06, + 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x0f, 0x30, 0x09, 0x03, 0x01, 0x00, + 0xa0, 0x04, 0xa2, 0x02, 0x80, 0x00, 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, + 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20, 0x61, 0x82, 0xb7, 0xf8, 0x8c, 0xff, 0xc2, + 0xeb, 0x79, 0x6e, 0x9d, 0xa9, 0xdd, 0x39, 0x52, 0xdd, 0x36, 0xdd, 0xf1, 0x43, 0x27, 0x58, 0x8c, + 0xa7, 0xcc, 0xae, 0xde, 0xdd, 0x3c, 0x02, 0x12, 0x49, 0xa0, 0x82, 0x0c, 0x0a, 0x30, 0x82, 0x05, + 0xe5, 0x30, 0x82, 0x03, 0xcd, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0a, 0x61, 0x03, 0x5f, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, + 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x90, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, + 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, + 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, + 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, + 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, + 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x3a, 0x30, 0x38, + 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x31, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, + 0x20, 0x54, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, + 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x20, 0x32, 0x30, 0x31, 0x30, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x36, + 0x32, 0x31, 0x32, 0x32, 0x35, 0x35, 0x30, 0x31, 0x5a, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x36, 0x32, + 0x31, 0x32, 0x33, 0x30, 0x35, 0x30, 0x31, 0x5a, 0x30, 0x81, 0x81, 0x31, 0x13, 0x30, 0x11, 0x06, + 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x03, 0x63, 0x6f, 0x6d, + 0x31, 0x19, 0x30, 0x17, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, + 0x16, 0x09, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x31, 0x14, 0x30, 0x12, 0x06, + 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x04, 0x63, 0x6f, 0x72, + 0x70, 0x31, 0x17, 0x30, 0x15, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, + 0x19, 0x16, 0x07, 0x72, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, + 0x55, 0x04, 0x03, 0x13, 0x17, 0x4d, 0x53, 0x49, 0x54, 0x20, 0x54, 0x65, 0x73, 0x74, 0x20, 0x43, + 0x6f, 0x64, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x43, 0x41, 0x20, 0x33, 0x30, 0x82, 0x01, 0x22, + 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, + 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0x9b, 0x71, 0xdd, + 0x0d, 0x32, 0x2d, 0x08, 0xe8, 0x2d, 0x01, 0x90, 0x9c, 0xdf, 0x9f, 0x32, 0x58, 0x8b, 0x47, 0xd0, + 0xfe, 0x9a, 0x6b, 0x40, 0x5e, 0x76, 0xa2, 0x10, 0x00, 0x0e, 0xd2, 0x8f, 0xce, 0xa1, 0x5f, 0x42, + 0xa7, 0x0b, 0x5e, 0x83, 0xc2, 0xe9, 0x06, 0xa6, 0x0a, 0xb4, 0x3d, 0x30, 0x50, 0xdb, 0x35, 0x43, + 0x2c, 0xd3, 0xc3, 0xc6, 0x3c, 0xc9, 0xb5, 0x88, 0xfc, 0x0b, 0xe6, 0xa3, 0x71, 0x47, 0xce, 0xfd, + 0x88, 0x62, 0xa4, 0x25, 0xe2, 0x4e, 0x1b, 0x79, 0x3d, 0xe3, 0xbf, 0x8b, 0x84, 0x2d, 0x64, 0x25, + 0xa5, 0xfa, 0x8e, 0x30, 0xae, 0xe3, 0x34, 0x7d, 0x27, 0xf3, 0x5e, 0xf4, 0x05, 0x60, 0xc6, 0x0f, + 0x1a, 0x1b, 0x9e, 0xaf, 0x21, 0x37, 0xa9, 0xd9, 0xb6, 0xb7, 0x6a, 0x54, 0x4b, 0x5e, 0xa0, 0x75, + 0xb5, 0x9a, 0xc4, 0xb6, 0xbe, 0x28, 0xe3, 0x3b, 0xf7, 0x5a, 0x08, 0x77, 0xd9, 0x39, 0x4a, 0x2a, + 0x7a, 0xf8, 0xf4, 0xfe, 0xe8, 0x12, 0x54, 0x41, 0x11, 0x55, 0xc8, 0xc7, 0x98, 0x3e, 0x64, 0xa5, + 0xbb, 0xda, 0x6b, 0xa4, 0xaa, 0x29, 0x8c, 0x9f, 0x27, 0x55, 0x25, 0xe7, 0xfd, 0x31, 0x70, 0x60, + 0x1d, 0xd3, 0xc4, 0xf2, 0xb9, 0xef, 0x92, 0x4a, 0x9f, 0xc8, 0x4c, 0x93, 0xe7, 0x19, 0xa8, 0x4e, + 0xbc, 0xe3, 0x62, 0xf4, 0xe0, 0x6e, 0xec, 0x45, 0x6e, 0x61, 0x4e, 0xad, 0x58, 0xe0, 0xf0, 0xea, + 0xf7, 0x74, 0x2c, 0xdf, 0x1b, 0xf6, 0x43, 0x3c, 0x84, 0xc2, 0x8c, 0x0b, 0xb4, 0xbd, 0x4a, 0x57, + 0xa6, 0x0c, 0x4e, 0x9e, 0x73, 0x43, 0x5f, 0x2d, 0xaf, 0x22, 0xf4, 0xa6, 0xfd, 0x5a, 0x87, 0xb9, + 0xbe, 0x6f, 0x9e, 0x1d, 0x99, 0xc8, 0xdf, 0x95, 0xc2, 0x02, 0xad, 0x7d, 0x4a, 0xf3, 0xba, 0x5d, + 0xe8, 0x7b, 0x6e, 0x57, 0xe5, 0x3a, 0x02, 0xf8, 0xd3, 0x01, 0x15, 0xae, 0x4f, 0x02, 0x03, 0x01, + 0x00, 0x01, 0xa3, 0x82, 0x01, 0x4c, 0x30, 0x82, 0x01, 0x48, 0x30, 0x10, 0x06, 0x09, 0x2b, 0x06, + 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x1d, 0x06, 0x03, + 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x4e, 0xfe, 0x61, 0x39, 0x6f, 0xca, 0xc5, 0x64, 0xe0, + 0x20, 0xb6, 0xda, 0xc1, 0xb9, 0x52, 0x0e, 0xca, 0xdf, 0x8e, 0xfe, 0x30, 0x19, 0x06, 0x09, 0x2b, + 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04, 0x0c, 0x1e, 0x0a, 0x00, 0x53, 0x00, 0x75, + 0x00, 0x62, 0x00, 0x43, 0x00, 0x41, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, + 0x02, 0x01, 0x86, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x08, 0x30, + 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x00, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, + 0x30, 0x16, 0x80, 0x14, 0xa3, 0x01, 0x04, 0x7e, 0x30, 0x88, 0x33, 0xeb, 0xb9, 0x31, 0x9c, 0xca, + 0xeb, 0x85, 0x76, 0x67, 0xfc, 0x65, 0xb4, 0xd1, 0x30, 0x59, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, + 0x52, 0x30, 0x50, 0x30, 0x4e, 0xa0, 0x4c, 0xa0, 0x4a, 0x86, 0x48, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63, 0x54, 0x65, 0x73, 0x52, 0x6f, 0x6f, 0x43, 0x65, + 0x72, 0x41, 0x75, 0x74, 0x5f, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x30, 0x36, 0x2d, 0x31, 0x37, 0x2e, + 0x63, 0x72, 0x6c, 0x30, 0x5d, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, + 0x51, 0x30, 0x4f, 0x30, 0x4d, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, + 0x41, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63, 0x72, + 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x65, + 0x72, 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63, 0x54, 0x65, 0x73, 0x52, 0x6f, 0x6f, 0x43, 0x65, 0x72, + 0x41, 0x75, 0x74, 0x5f, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x30, 0x36, 0x2d, 0x31, 0x37, 0x2e, 0x63, + 0x72, 0x74, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, + 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x91, 0x2d, 0x11, 0x36, 0xd1, 0x2c, 0x5e, 0x21, 0x77, 0x62, + 0x1a, 0xa1, 0xcf, 0x9a, 0x7e, 0x62, 0x2d, 0xc9, 0x90, 0xb9, 0x0e, 0x3d, 0x71, 0x0d, 0xa0, 0x4a, + 0x48, 0xad, 0xe1, 0xd6, 0xb0, 0x73, 0x4a, 0x51, 0x4b, 0x4c, 0xb2, 0x6b, 0x88, 0x0a, 0x5a, 0xb7, + 0xe9, 0x55, 0x67, 0x43, 0x8b, 0xf1, 0x9d, 0xcc, 0x52, 0x03, 0xaf, 0xac, 0x85, 0xe9, 0xd3, 0x75, + 0xce, 0xe5, 0x6f, 0x8b, 0x3c, 0x80, 0x81, 0xab, 0xd1, 0xd1, 0x73, 0x0d, 0x6b, 0xb0, 0x51, 0xb8, + 0xa2, 0x5e, 0x0c, 0x09, 0xe5, 0xa6, 0xbc, 0x54, 0x49, 0xe5, 0x54, 0x38, 0x5a, 0xb7, 0x43, 0xd2, + 0x75, 0x34, 0x52, 0xdd, 0x35, 0x79, 0x95, 0x98, 0xd5, 0x3c, 0xc6, 0xda, 0x46, 0xb2, 0xd8, 0xa0, + 0xa7, 0xcc, 0x30, 0x31, 0x0f, 0x4b, 0xeb, 0xb7, 0x02, 0xab, 0x2b, 0x38, 0xd2, 0xb7, 0x27, 0xc2, + 0xc7, 0x0d, 0x62, 0xa4, 0xc0, 0x48, 0xf4, 0x1a, 0x48, 0x79, 0x7d, 0xe1, 0x31, 0xa4, 0x5d, 0x19, + 0xd0, 0x18, 0x17, 0x00, 0xca, 0xe3, 0x5d, 0x0b, 0xc1, 0x85, 0x7f, 0xf1, 0xbe, 0xd3, 0xcb, 0x97, + 0xf4, 0x1b, 0x62, 0x0f, 0xd7, 0x14, 0x38, 0x8d, 0xb2, 0x2e, 0x98, 0xd4, 0x41, 0x6a, 0xb0, 0xb5, + 0x84, 0xee, 0xd8, 0x2c, 0x2d, 0x13, 0xfc, 0x50, 0x1d, 0x9a, 0x6f, 0x31, 0x87, 0x1c, 0xe0, 0xd0, + 0xd0, 0xd3, 0x24, 0x52, 0xdf, 0x12, 0x8d, 0xfb, 0xf7, 0x7f, 0x33, 0x04, 0x17, 0x7a, 0x8b, 0xe3, + 0xbd, 0x7c, 0x1e, 0xa2, 0x2a, 0x91, 0x76, 0xd9, 0xfc, 0x43, 0x17, 0xa7, 0x0a, 0xa1, 0xd9, 0xc6, + 0x3c, 0x3a, 0x42, 0xed, 0xb7, 0x12, 0xcd, 0x9e, 0xdd, 0xfe, 0x91, 0x9d, 0x98, 0xb5, 0x35, 0xe8, + 0x94, 0xdd, 0x9a, 0xce, 0xd4, 0xf4, 0xac, 0xca, 0xa6, 0xcd, 0x59, 0x3d, 0xde, 0x44, 0xbf, 0x0e, + 0x82, 0xe5, 0xdf, 0x5c, 0xe3, 0x49, 0xcb, 0x01, 0xa0, 0x7f, 0x7b, 0xe2, 0x25, 0x21, 0xab, 0x95, + 0x50, 0x1e, 0x9f, 0xea, 0x77, 0x56, 0x47, 0x74, 0x73, 0xf2, 0x25, 0x1b, 0x0e, 0x36, 0xb9, 0xa2, + 0x57, 0xbf, 0x2c, 0x57, 0xbc, 0xe4, 0xfb, 0x88, 0xb1, 0x83, 0x56, 0xd8, 0x3c, 0xe0, 0x7c, 0xfd, + 0x11, 0x9f, 0xde, 0xe1, 0xb7, 0xd4, 0xc6, 0x23, 0xaf, 0xae, 0xc7, 0x5e, 0x4f, 0xc5, 0x23, 0x74, + 0x98, 0x38, 0x74, 0x9d, 0x0d, 0x0d, 0x6d, 0xf4, 0xde, 0x28, 0x44, 0x41, 0xd8, 0x22, 0x68, 0xe7, + 0x57, 0xa7, 0x66, 0x74, 0xb5, 0xc3, 0x31, 0x24, 0xe2, 0x7c, 0xd5, 0x52, 0x5d, 0x8a, 0xd2, 0x4e, + 0x14, 0xbb, 0x08, 0xd3, 0x1a, 0x31, 0x12, 0x04, 0x58, 0x9b, 0x3a, 0x99, 0x78, 0x93, 0x51, 0x3f, + 0x0b, 0x85, 0xce, 0xde, 0x09, 0x58, 0xf9, 0x96, 0x1b, 0x91, 0x11, 0xa0, 0x68, 0x53, 0x33, 0xcb, + 0xbe, 0x08, 0x89, 0xcc, 0x95, 0x55, 0xae, 0x06, 0x78, 0x27, 0x99, 0xa2, 0x56, 0xef, 0xae, 0x95, + 0x0a, 0x7f, 0x0d, 0xeb, 0x43, 0x0c, 0xc6, 0x9e, 0x3f, 0x80, 0xbb, 0xc4, 0x74, 0x03, 0x9d, 0xb8, + 0x1a, 0xaa, 0xbc, 0xcb, 0x1e, 0x03, 0xfb, 0xd8, 0x49, 0x89, 0x9d, 0x20, 0xaa, 0x25, 0x4b, 0x47, + 0x67, 0xf4, 0xa7, 0x0d, 0x8d, 0x76, 0x30, 0xc6, 0x48, 0xce, 0xdd, 0x8d, 0xfa, 0xbe, 0xda, 0xb4, + 0xeb, 0x3d, 0xd8, 0x0c, 0x3b, 0x15, 0x9a, 0xd1, 0x83, 0x85, 0xe5, 0xe3, 0x92, 0xaa, 0x3b, 0xad, + 0x34, 0x0c, 0x39, 0xf1, 0x7f, 0x75, 0xae, 0xe8, 0x70, 0xb0, 0xfd, 0xf2, 0x8e, 0x29, 0xda, 0xdc, + 0x09, 0x4f, 0x8a, 0x7b, 0x63, 0xbe, 0x1e, 0x8a, 0xc3, 0x58, 0xd1, 0x03, 0xbe, 0x37, 0xe9, 0xed, + 0x32, 0x26, 0xa8, 0x0c, 0xfe, 0xed, 0x12, 0xa7, 0x63, 0x04, 0xb3, 0x92, 0x97, 0xd9, 0x46, 0xa3, + 0x33, 0x33, 0x9c, 0x5b, 0xbc, 0x54, 0x30, 0x82, 0x06, 0x1d, 0x30, 0x82, 0x05, 0x05, 0xa0, 0x03, + 0x02, 0x01, 0x02, 0x02, 0x0a, 0x4e, 0x30, 0xa5, 0xbb, 0x00, 0x00, 0x00, 0x12, 0x7b, 0xf2, 0x30, + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, + 0x81, 0x31, 0x13, 0x30, 0x11, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, + 0x19, 0x16, 0x03, 0x63, 0x6f, 0x6d, 0x31, 0x19, 0x30, 0x17, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, + 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, + 0x74, 0x31, 0x14, 0x30, 0x12, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, + 0x19, 0x16, 0x04, 0x63, 0x6f, 0x72, 0x70, 0x31, 0x17, 0x30, 0x15, 0x06, 0x0a, 0x09, 0x92, 0x26, + 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x07, 0x72, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, + 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x17, 0x4d, 0x53, 0x49, 0x54, 0x20, + 0x54, 0x65, 0x73, 0x74, 0x20, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x43, 0x41, + 0x20, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x31, 0x30, 0x34, 0x32, 0x31, 0x30, 0x33, 0x33, 0x33, + 0x34, 0x39, 0x5a, 0x17, 0x0d, 0x31, 0x33, 0x30, 0x34, 0x32, 0x30, 0x30, 0x33, 0x33, 0x33, 0x34, + 0x39, 0x5a, 0x30, 0x70, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, + 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, + 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, + 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, + 0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, + 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, + 0x03, 0x13, 0x11, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x57, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x73, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, + 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, + 0x02, 0x82, 0x01, 0x01, 0x00, 0xca, 0x9f, 0xcb, 0x8c, 0x5e, 0x61, 0x19, 0xb5, 0x37, 0x72, 0xd1, + 0xe2, 0x88, 0x1f, 0x37, 0x56, 0xce, 0xa8, 0x88, 0x05, 0x3e, 0xe8, 0xa6, 0x8d, 0xfd, 0x0b, 0x30, + 0x63, 0x54, 0x89, 0x1d, 0xda, 0x11, 0x70, 0x5a, 0x06, 0x00, 0x86, 0xd7, 0x7f, 0xe6, 0x21, 0x70, + 0x41, 0x81, 0x26, 0x4b, 0x6e, 0xc7, 0x02, 0xe2, 0xbf, 0x61, 0x45, 0x04, 0x2f, 0x45, 0xbc, 0xd2, + 0x0d, 0xf6, 0xac, 0xda, 0x91, 0x6d, 0xc6, 0x60, 0xad, 0xb3, 0x0b, 0x32, 0xe5, 0x13, 0x95, 0x96, + 0x02, 0x4e, 0x10, 0xad, 0x2e, 0x6c, 0xb0, 0xc7, 0x65, 0x6d, 0xea, 0x89, 0x91, 0x67, 0x73, 0x5d, + 0x05, 0x12, 0x9f, 0x95, 0x74, 0x6a, 0x6d, 0xb0, 0x6a, 0xd8, 0x94, 0x9b, 0xb0, 0x70, 0x79, 0xb0, + 0x85, 0x42, 0xe7, 0xd7, 0x19, 0xc4, 0x33, 0xfd, 0xac, 0xbe, 0x2b, 0xd5, 0x7e, 0x5a, 0xa9, 0xc7, + 0xa7, 0x68, 0x53, 0xed, 0xaa, 0x51, 0x2a, 0x6b, 0xac, 0x5a, 0xd7, 0x6e, 0xcf, 0x68, 0x60, 0x90, + 0xc7, 0xda, 0xd1, 0xe7, 0xf2, 0x53, 0x4a, 0x01, 0xaf, 0xe8, 0xb1, 0x29, 0x91, 0xab, 0x4c, 0x58, + 0x64, 0xe6, 0xb6, 0xcc, 0xdc, 0x0f, 0x43, 0xf2, 0x87, 0x15, 0xf8, 0x73, 0x06, 0xb8, 0x1f, 0xaa, + 0xf2, 0x66, 0x49, 0x82, 0xca, 0xf0, 0xdd, 0x4c, 0x7c, 0xd5, 0xe7, 0x59, 0xb7, 0xc6, 0xd3, 0x81, + 0x29, 0x5c, 0xce, 0xe4, 0xfd, 0xf7, 0xeb, 0x58, 0x6b, 0x50, 0x79, 0x72, 0x83, 0x4d, 0x59, 0xec, + 0xd1, 0xd2, 0xfc, 0x3a, 0x10, 0xc5, 0x7a, 0xba, 0x90, 0xea, 0xfd, 0x54, 0xc7, 0xc8, 0x58, 0x2d, + 0x84, 0xe5, 0x5b, 0x51, 0x98, 0x2c, 0x36, 0x7c, 0x42, 0x2b, 0xb1, 0x62, 0x4b, 0x0f, 0xf9, 0x72, + 0xd3, 0x3f, 0x99, 0xc8, 0xb4, 0x02, 0x17, 0x39, 0xe5, 0x0b, 0xf2, 0x5d, 0x2d, 0x7f, 0x23, 0x41, + 0xcd, 0x58, 0x3a, 0x25, 0x75, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x02, 0xa5, 0x30, 0x82, + 0x02, 0xa1, 0x30, 0x3d, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x07, 0x04, + 0x30, 0x30, 0x2e, 0x06, 0x26, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x08, 0x83, 0xcf, + 0x89, 0x4d, 0xad, 0xf2, 0x02, 0x85, 0xa1, 0x9f, 0x0c, 0x82, 0xfa, 0xca, 0x7d, 0x81, 0xe1, 0xfb, + 0x74, 0x81, 0x4f, 0x84, 0x9a, 0xf1, 0x69, 0x85, 0xa1, 0xad, 0x1d, 0x02, 0x01, 0x64, 0x02, 0x01, + 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x29, + 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x0a, 0x04, 0x1c, 0x30, 0x1a, 0x30, + 0x0c, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x0a, 0x03, 0x06, 0x30, 0x0a, 0x06, + 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x03, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x25, + 0x04, 0x18, 0x30, 0x16, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x0a, 0x03, 0x06, + 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x03, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, + 0x0e, 0x04, 0x16, 0x04, 0x14, 0xc9, 0x5a, 0xb3, 0x11, 0x02, 0x66, 0x71, 0x8c, 0x5b, 0x06, 0x80, + 0x8a, 0x6d, 0x4f, 0x5b, 0xf2, 0xb5, 0x67, 0x45, 0xb5, 0x30, 0x30, 0x06, 0x03, 0x55, 0x1d, 0x11, + 0x04, 0x29, 0x30, 0x27, 0xa0, 0x25, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, + 0x02, 0x03, 0xa0, 0x17, 0x0c, 0x15, 0x77, 0x69, 0x6e, 0x63, 0x62, 0x6c, 0x64, 0x40, 0x6d, 0x69, + 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x1f, 0x06, 0x03, 0x55, + 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x4e, 0xfe, 0x61, 0x39, 0x6f, 0xca, 0xc5, 0x64, + 0xe0, 0x20, 0xb6, 0xda, 0xc1, 0xb9, 0x52, 0x0e, 0xca, 0xdf, 0x8e, 0xfe, 0x30, 0x81, 0xe8, 0x06, + 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x81, 0xe0, 0x30, 0x81, 0xdd, 0x30, 0x81, 0xda, 0xa0, 0x81, 0xd7, + 0xa0, 0x81, 0xd4, 0x86, 0x36, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x6f, 0x72, 0x70, + 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x4d, 0x53, 0x49, 0x54, 0x25, 0x32, 0x30, 0x54, + 0x65, 0x73, 0x74, 0x25, 0x32, 0x30, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x25, 0x32, + 0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x33, 0x2e, 0x63, 0x72, 0x6c, 0x86, 0x4d, 0x68, 0x74, 0x74, + 0x70, 0x3a, 0x2f, 0x2f, 0x6d, 0x73, 0x63, 0x72, 0x6c, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, + 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x6d, 0x73, 0x63, 0x6f, + 0x72, 0x70, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x4d, 0x53, 0x49, 0x54, 0x25, 0x32, 0x30, 0x54, 0x65, + 0x73, 0x74, 0x25, 0x32, 0x30, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x25, 0x32, 0x30, + 0x43, 0x41, 0x25, 0x32, 0x30, 0x33, 0x2e, 0x63, 0x72, 0x6c, 0x86, 0x4b, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x6d, 0x73, 0x63, 0x6f, 0x72, 0x70, 0x2f, + 0x63, 0x72, 0x6c, 0x2f, 0x4d, 0x53, 0x49, 0x54, 0x25, 0x32, 0x30, 0x54, 0x65, 0x73, 0x74, 0x25, + 0x32, 0x30, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x25, 0x32, 0x30, 0x43, 0x41, 0x25, + 0x32, 0x30, 0x33, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x81, 0xa9, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, + 0x05, 0x07, 0x01, 0x01, 0x04, 0x81, 0x9c, 0x30, 0x81, 0x99, 0x30, 0x42, 0x06, 0x08, 0x2b, 0x06, + 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x36, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, + 0x6f, 0x72, 0x70, 0x70, 0x6b, 0x69, 0x2f, 0x61, 0x69, 0x61, 0x2f, 0x4d, 0x53, 0x49, 0x54, 0x25, + 0x32, 0x30, 0x54, 0x65, 0x73, 0x74, 0x25, 0x32, 0x30, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x67, + 0x6e, 0x25, 0x32, 0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x33, 0x2e, 0x63, 0x72, 0x74, 0x30, 0x53, + 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x47, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x6d, 0x73, 0x63, 0x6f, 0x72, 0x70, 0x2f, + 0x4d, 0x53, 0x49, 0x54, 0x25, 0x32, 0x30, 0x54, 0x65, 0x73, 0x74, 0x25, 0x32, 0x30, 0x43, 0x6f, + 0x64, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x25, 0x32, 0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x33, 0x2e, + 0x63, 0x72, 0x74, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, + 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x97, 0x6d, 0x52, 0x46, 0x65, 0x08, 0x60, 0x01, 0x12, + 0x7a, 0x26, 0xaa, 0xd9, 0xc3, 0x15, 0xec, 0xc6, 0xae, 0x0b, 0x75, 0xe4, 0xd5, 0xe0, 0x31, 0xf6, + 0xda, 0xc0, 0xb1, 0x1b, 0x7b, 0x8a, 0x07, 0xda, 0x2f, 0x82, 0x4a, 0x21, 0x89, 0xe6, 0x61, 0x97, + 0xe4, 0x3a, 0x38, 0xd8, 0x0a, 0x26, 0x4e, 0x83, 0x54, 0xbf, 0x32, 0xe3, 0x64, 0x36, 0x61, 0x40, + 0x75, 0x55, 0xf1, 0xaa, 0x34, 0xb2, 0xd3, 0x45, 0x8d, 0x79, 0x9a, 0x93, 0x0b, 0x9f, 0x5a, 0xb3, + 0x5b, 0xcf, 0x0d, 0x28, 0x00, 0x46, 0x68, 0xe7, 0x36, 0xc9, 0xe6, 0xd2, 0x03, 0x2d, 0x1c, 0x2b, + 0x24, 0x79, 0x32, 0xfb, 0xd8, 0x43, 0xb4, 0x0e, 0xd0, 0x37, 0x3b, 0x5e, 0x15, 0xbf, 0x8a, 0x00, + 0x56, 0x00, 0x95, 0x00, 0xd4, 0x71, 0x09, 0xe1, 0x84, 0xfa, 0x6e, 0xc5, 0x75, 0x2f, 0xe1, 0x83, + 0x7b, 0x66, 0xe2, 0x22, 0x75, 0x23, 0x6a, 0xf3, 0x83, 0xfc, 0x94, 0xf8, 0x51, 0x6d, 0x40, 0x6d, + 0x20, 0x7e, 0xb0, 0xe9, 0xac, 0xa8, 0x28, 0x04, 0xa0, 0x1a, 0x3c, 0x88, 0x7e, 0x7e, 0x3b, 0x96, + 0xe9, 0xd0, 0x4b, 0xfa, 0xfa, 0x34, 0x4a, 0x4f, 0xe7, 0xe8, 0x76, 0x16, 0x20, 0xc0, 0x10, 0xca, + 0x1f, 0x7a, 0xde, 0x54, 0xfd, 0xb7, 0xf0, 0xea, 0x8f, 0xe2, 0xcb, 0xa5, 0x1c, 0x58, 0x18, 0x57, + 0x6c, 0x7d, 0x06, 0xde, 0x8c, 0xbd, 0x45, 0xd7, 0x28, 0x86, 0x13, 0x42, 0xaa, 0x4a, 0x9a, 0x50, + 0xc5, 0x76, 0x7f, 0x63, 0x99, 0xd0, 0x90, 0x92, 0xd6, 0xc9, 0x21, 0xf2, 0xb8, 0x66, 0x9c, 0x96, + 0x53, 0xd2, 0xe5, 0xc4, 0xdd, 0x3a, 0x7c, 0x06, 0xae, 0xb1, 0x7a, 0xb4, 0x36, 0x04, 0x9d, 0xe6, + 0x2a, 0xe4, 0x6a, 0x56, 0xd0, 0x9a, 0x98, 0xa2, 0xbf, 0x6f, 0x43, 0xf2, 0xb0, 0x5b, 0xfd, 0xd9, + 0xfa, 0x08, 0x17, 0xc8, 0x3c, 0x61, 0xf1, 0x31, 0x82, 0x02, 0x3a, 0x30, 0x82, 0x02, 0x36, 0x02, + 0x01, 0x01, 0x30, 0x81, 0x90, 0x30, 0x81, 0x81, 0x31, 0x13, 0x30, 0x11, 0x06, 0x0a, 0x09, 0x92, + 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x03, 0x63, 0x6f, 0x6d, 0x31, 0x19, 0x30, + 0x17, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6d, + 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x31, 0x14, 0x30, 0x12, 0x06, 0x0a, 0x09, 0x92, + 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x04, 0x63, 0x6f, 0x72, 0x70, 0x31, 0x17, + 0x30, 0x15, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x07, + 0x72, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, + 0x13, 0x17, 0x4d, 0x53, 0x49, 0x54, 0x20, 0x54, 0x65, 0x73, 0x74, 0x20, 0x43, 0x6f, 0x64, 0x65, + 0x53, 0x69, 0x67, 0x6e, 0x20, 0x43, 0x41, 0x20, 0x33, 0x02, 0x0a, 0x4e, 0x30, 0xa5, 0xbb, 0x00, + 0x00, 0x00, 0x12, 0x7b, 0xf2, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, + 0x02, 0x01, 0x05, 0x00, 0xa0, 0x7c, 0x30, 0x10, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, + 0x37, 0x02, 0x01, 0x0c, 0x31, 0x02, 0x30, 0x00, 0x30, 0x19, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, + 0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0c, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, + 0x02, 0x01, 0x04, 0x30, 0x1c, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, + 0x0b, 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, + 0x15, 0x30, 0x2f, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x22, + 0x04, 0x20, 0x25, 0x60, 0x6e, 0xc8, 0x66, 0x72, 0x73, 0xb0, 0x71, 0x7b, 0x82, 0x09, 0x8c, 0x27, + 0xe8, 0xb1, 0x4a, 0x36, 0x1c, 0x81, 0x36, 0xb4, 0x1b, 0x44, 0xdf, 0x09, 0x82, 0x8b, 0xf9, 0xb6, + 0x1c, 0x65, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x01, 0xb7, 0x8e, 0x46, 0x9b, 0xb4, 0x18, 0xcd, 0xf6, 0x39, 0x8f, + 0x82, 0x79, 0xbc, 0x96, 0x55, 0x7e, 0xd7, 0x84, 0x8f, 0x18, 0x37, 0x48, 0x4e, 0x8f, 0x25, 0x6f, + 0x1a, 0x6c, 0x60, 0xe9, 0xc1, 0x5f, 0x65, 0xec, 0xb0, 0x4b, 0x35, 0x98, 0x8a, 0x31, 0x6b, 0xfd, + 0xa9, 0xd2, 0x28, 0xa7, 0x00, 0xd0, 0x5c, 0x97, 0x2e, 0x3d, 0x19, 0x96, 0x75, 0xc2, 0x9a, 0xa7, + 0x4e, 0x2d, 0x3c, 0x6a, 0xd7, 0xd1, 0x81, 0x96, 0x2e, 0x06, 0x54, 0x82, 0xe9, 0x87, 0xa2, 0x53, + 0x63, 0x6a, 0xda, 0x72, 0xa3, 0x41, 0x4f, 0x14, 0xc5, 0x3d, 0x41, 0x7d, 0xbb, 0xd7, 0x29, 0x11, + 0x96, 0x14, 0x60, 0x5f, 0xb9, 0xd3, 0x47, 0xb6, 0x23, 0x97, 0x64, 0xf6, 0xe1, 0xac, 0x6c, 0x4d, + 0xa9, 0x58, 0xc2, 0x35, 0xbf, 0x02, 0xee, 0x29, 0xd4, 0x52, 0x80, 0x25, 0xa1, 0x7e, 0xbe, 0x21, + 0xcd, 0x04, 0x3c, 0x4d, 0x7d, 0xdb, 0x9b, 0x13, 0x71, 0x35, 0x13, 0x8d, 0x16, 0x0a, 0x40, 0x7b, + 0x63, 0x45, 0x00, 0x11, 0xc5, 0x3e, 0xc8, 0x21, 0x37, 0xc9, 0xbc, 0xd2, 0x0f, 0x82, 0x21, 0xf9, + 0x2f, 0xde, 0xb3, 0x1c, 0x9b, 0x67, 0xb6, 0x5a, 0xb8, 0x74, 0xa0, 0x30, 0xd8, 0x86, 0x1f, 0xd9, + 0x08, 0x45, 0xf9, 0x6b, 0xe8, 0x57, 0xda, 0xb7, 0x14, 0xf7, 0x63, 0x97, 0xfd, 0x87, 0x61, 0x1e, + 0x95, 0x6f, 0xba, 0x53, 0x40, 0x5e, 0x9f, 0x49, 0xf6, 0xe7, 0x3c, 0x59, 0xd9, 0x78, 0x08, 0x4c, + 0xa6, 0x4a, 0xa2, 0x05, 0x42, 0xa7, 0x77, 0xbc, 0x44, 0x7b, 0xed, 0xdb, 0x77, 0x63, 0x4c, 0x63, + 0x22, 0xb6, 0x17, 0x3f, 0x4f, 0x33, 0xed, 0xa6, 0xd9, 0x0f, 0x74, 0xfa, 0x97, 0x8d, 0x98, 0x55, + 0x42, 0x14, 0x76, 0xd4, 0x89, 0x07, 0xf2, 0x30, 0x5a, 0x27, 0x96, 0x1b, 0x92, 0x70, 0x5a, 0x83, + 0x89, 0x0f, 0xdb, 0x47, 0x7a, 0x00, 0x00, 0x00, 0x0a + }; + +// +// Sample root certificate for code signing. +// A trusted certificate with self-signing, will be used to construct the certificate chains for +// authority checking. +// +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 TestRootCert1[] = { + 0x30, 0x82, 0x05, 0x99, 0x30, 0x82, 0x03, 0x81, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x79, + 0xAD, 0x16, 0xA1, 0x4A, 0xA0, 0xA5, 0xAD, 0x4C, 0x73, 0x58, 0xF4, 0x07, 0x13, 0x2E, 0x65, 0x30, + 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x5F, + 0x31, 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, + 0x16, 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30, 0x17, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, + 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, + 0x31, 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72, 0x6F, + 0x73, 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x30, + 0x1E, 0x17, 0x0D, 0x30, 0x31, 0x30, 0x35, 0x30, 0x39, 0x32, 0x33, 0x31, 0x39, 0x32, 0x32, 0x5A, + 0x17, 0x0D, 0x32, 0x31, 0x30, 0x35, 0x30, 0x39, 0x32, 0x33, 0x32, 0x38, 0x31, 0x33, 0x5A, 0x30, + 0x5F, 0x31, 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, + 0x19, 0x16, 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30, 0x17, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, + 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, + 0x74, 0x31, 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72, + 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, + 0x30, 0x82, 0x02, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, + 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0F, 0x00, 0x30, 0x82, 0x02, 0x0A, 0x02, 0x82, 0x02, 0x01, + 0x00, 0xF3, 0x5D, 0xFA, 0x80, 0x67, 0xD4, 0x5A, 0xA7, 0xA9, 0x0C, 0x2C, 0x90, 0x20, 0xD0, 0x35, + 0x08, 0x3C, 0x75, 0x84, 0xCD, 0xB7, 0x07, 0x89, 0x9C, 0x89, 0xDA, 0xDE, 0xCE, 0xC3, 0x60, 0xFA, + 0x91, 0x68, 0x5A, 0x9E, 0x94, 0x71, 0x29, 0x18, 0x76, 0x7C, 0xC2, 0xE0, 0xC8, 0x25, 0x76, 0x94, + 0x0E, 0x58, 0xFA, 0x04, 0x34, 0x36, 0xE6, 0xDF, 0xAF, 0xF7, 0x80, 0xBA, 0xE9, 0x58, 0x0B, 0x2B, + 0x93, 0xE5, 0x9D, 0x05, 0xE3, 0x77, 0x22, 0x91, 0xF7, 0x34, 0x64, 0x3C, 0x22, 0x91, 0x1D, 0x5E, + 0xE1, 0x09, 0x90, 0xBC, 0x14, 0xFE, 0xFC, 0x75, 0x58, 0x19, 0xE1, 0x79, 0xB7, 0x07, 0x92, 0xA3, + 0xAE, 0x88, 0x59, 0x08, 0xD8, 0x9F, 0x07, 0xCA, 0x03, 0x58, 0xFC, 0x68, 0x29, 0x6D, 0x32, 0xD7, + 0xD2, 0xA8, 0xCB, 0x4B, 0xFC, 0xE1, 0x0B, 0x48, 0x32, 0x4F, 0xE6, 0xEB, 0xB8, 0xAD, 0x4F, 0xE4, + 0x5C, 0x6F, 0x13, 0x94, 0x99, 0xDB, 0x95, 0xD5, 0x75, 0xDB, 0xA8, 0x1A, 0xB7, 0x94, 0x91, 0xB4, + 0x77, 0x5B, 0xF5, 0x48, 0x0C, 0x8F, 0x6A, 0x79, 0x7D, 0x14, 0x70, 0x04, 0x7D, 0x6D, 0xAF, 0x90, + 0xF5, 0xDA, 0x70, 0xD8, 0x47, 0xB7, 0xBF, 0x9B, 0x2F, 0x6C, 0xE7, 0x05, 0xB7, 0xE1, 0x11, 0x60, + 0xAC, 0x79, 0x91, 0x14, 0x7C, 0xC5, 0xD6, 0xA6, 0xE4, 0xE1, 0x7E, 0xD5, 0xC3, 0x7E, 0xE5, 0x92, + 0xD2, 0x3C, 0x00, 0xB5, 0x36, 0x82, 0xDE, 0x79, 0xE1, 0x6D, 0xF3, 0xB5, 0x6E, 0xF8, 0x9F, 0x33, + 0xC9, 0xCB, 0x52, 0x7D, 0x73, 0x98, 0x36, 0xDB, 0x8B, 0xA1, 0x6B, 0xA2, 0x95, 0x97, 0x9B, 0xA3, + 0xDE, 0xC2, 0x4D, 0x26, 0xFF, 0x06, 0x96, 0x67, 0x25, 0x06, 0xC8, 0xE7, 0xAC, 0xE4, 0xEE, 0x12, + 0x33, 0x95, 0x31, 0x99, 0xC8, 0x35, 0x08, 0x4E, 0x34, 0xCA, 0x79, 0x53, 0xD5, 0xB5, 0xBE, 0x63, + 0x32, 0x59, 0x40, 0x36, 0xC0, 0xA5, 0x4E, 0x04, 0x4D, 0x3D, 0xDB, 0x5B, 0x07, 0x33, 0xE4, 0x58, + 0xBF, 0xEF, 0x3F, 0x53, 0x64, 0xD8, 0x42, 0x59, 0x35, 0x57, 0xFD, 0x0F, 0x45, 0x7C, 0x24, 0x04, + 0x4D, 0x9E, 0xD6, 0x38, 0x74, 0x11, 0x97, 0x22, 0x90, 0xCE, 0x68, 0x44, 0x74, 0x92, 0x6F, 0xD5, + 0x4B, 0x6F, 0xB0, 0x86, 0xE3, 0xC7, 0x36, 0x42, 0xA0, 0xD0, 0xFC, 0xC1, 0xC0, 0x5A, 0xF9, 0xA3, + 0x61, 0xB9, 0x30, 0x47, 0x71, 0x96, 0x0A, 0x16, 0xB0, 0x91, 0xC0, 0x42, 0x95, 0xEF, 0x10, 0x7F, + 0x28, 0x6A, 0xE3, 0x2A, 0x1F, 0xB1, 0xE4, 0xCD, 0x03, 0x3F, 0x77, 0x71, 0x04, 0xC7, 0x20, 0xFC, + 0x49, 0x0F, 0x1D, 0x45, 0x88, 0xA4, 0xD7, 0xCB, 0x7E, 0x88, 0xAD, 0x8E, 0x2D, 0xEC, 0x45, 0xDB, + 0xC4, 0x51, 0x04, 0xC9, 0x2A, 0xFC, 0xEC, 0x86, 0x9E, 0x9A, 0x11, 0x97, 0x5B, 0xDE, 0xCE, 0x53, + 0x88, 0xE6, 0xE2, 0xB7, 0xFD, 0xAC, 0x95, 0xC2, 0x28, 0x40, 0xDB, 0xEF, 0x04, 0x90, 0xDF, 0x81, + 0x33, 0x39, 0xD9, 0xB2, 0x45, 0xA5, 0x23, 0x87, 0x06, 0xA5, 0x55, 0x89, 0x31, 0xBB, 0x06, 0x2D, + 0x60, 0x0E, 0x41, 0x18, 0x7D, 0x1F, 0x2E, 0xB5, 0x97, 0xCB, 0x11, 0xEB, 0x15, 0xD5, 0x24, 0xA5, + 0x94, 0xEF, 0x15, 0x14, 0x89, 0xFD, 0x4B, 0x73, 0xFA, 0x32, 0x5B, 0xFC, 0xD1, 0x33, 0x00, 0xF9, + 0x59, 0x62, 0x70, 0x07, 0x32, 0xEA, 0x2E, 0xAB, 0x40, 0x2D, 0x7B, 0xCA, 0xDD, 0x21, 0x67, 0x1B, + 0x30, 0x99, 0x8F, 0x16, 0xAA, 0x23, 0xA8, 0x41, 0xD1, 0xB0, 0x6E, 0x11, 0x9B, 0x36, 0xC4, 0xDE, + 0x40, 0x74, 0x9C, 0xE1, 0x58, 0x65, 0xC1, 0x60, 0x1E, 0x7A, 0x5B, 0x38, 0xC8, 0x8F, 0xBB, 0x04, + 0x26, 0x7C, 0xD4, 0x16, 0x40, 0xE5, 0xB6, 0x6B, 0x6C, 0xAA, 0x86, 0xFD, 0x00, 0xBF, 0xCE, 0xC1, + 0x35, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x51, 0x30, 0x4F, 0x30, 0x0B, 0x06, 0x03, 0x55, 0x1D, + 0x0F, 0x04, 0x04, 0x03, 0x02, 0x01, 0xC6, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, + 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, + 0x16, 0x04, 0x14, 0x0E, 0xAC, 0x82, 0x60, 0x40, 0x56, 0x27, 0x97, 0xE5, 0x25, 0x13, 0xFC, 0x2A, + 0xE1, 0x0A, 0x53, 0x95, 0x59, 0xE4, 0xA4, 0x30, 0x10, 0x06, 0x09, 0x2B, 0x06, 0x01, 0x04, 0x01, + 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, + 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0xC5, 0x11, 0x4D, + 0x03, 0x3A, 0x60, 0xDD, 0x5D, 0x52, 0x11, 0x77, 0x8F, 0xB2, 0xBB, 0x36, 0xC8, 0xB2, 0x05, 0xBF, + 0xB4, 0xB7, 0xA8, 0xD8, 0x20, 0x9D, 0x5C, 0x13, 0x03, 0xB6, 0x1C, 0x22, 0xFA, 0x06, 0x13, 0x35, + 0xB6, 0xC8, 0x63, 0xD4, 0x9A, 0x47, 0x6F, 0x26, 0x57, 0xD2, 0x55, 0xF1, 0x04, 0xB1, 0x26, 0x5F, + 0xD6, 0xA9, 0x50, 0x68, 0xA0, 0xBC, 0xD2, 0xB8, 0x6E, 0xCC, 0xC3, 0xE9, 0xAC, 0xDF, 0x19, 0xCD, + 0x78, 0xAC, 0x59, 0x74, 0xAC, 0x66, 0x34, 0x36, 0xC4, 0x1B, 0x3E, 0x6C, 0x38, 0x4C, 0x33, 0x0E, + 0x30, 0x12, 0x0D, 0xA3, 0x26, 0xFE, 0x51, 0x53, 0x00, 0xFF, 0xAF, 0x5A, 0x4E, 0x84, 0x0D, 0x0F, + 0x1F, 0xE4, 0x6D, 0x05, 0x2E, 0x4E, 0x85, 0x4B, 0x8D, 0x6C, 0x33, 0x6F, 0x54, 0xD2, 0x64, 0xAB, + 0xBF, 0x50, 0xAF, 0x7D, 0x7A, 0x39, 0xA0, 0x37, 0xED, 0x63, 0x03, 0x0F, 0xFC, 0x13, 0x06, 0xCE, + 0x16, 0x36, 0xD4, 0x54, 0x3B, 0x95, 0x1B, 0x51, 0x62, 0x3A, 0xE5, 0x4D, 0x17, 0xD4, 0x05, 0x39, + 0x92, 0x9A, 0x27, 0xA8, 0x5B, 0xAA, 0xBD, 0xEC, 0xBB, 0xBE, 0xE3, 0x20, 0x89, 0x60, 0x71, 0x6C, + 0x56, 0xB3, 0xA5, 0x13, 0xD0, 0x6D, 0x0E, 0x23, 0x7E, 0x95, 0x03, 0xED, 0x68, 0x3D, 0xF2, 0xD8, + 0x63, 0xB8, 0x6B, 0x4D, 0xB6, 0xE8, 0x30, 0xB5, 0xE1, 0xCA, 0x94, 0x4B, 0xF7, 0xA2, 0xAA, 0x5D, + 0x99, 0x30, 0xB2, 0x3D, 0xA7, 0xC2, 0x51, 0x6C, 0x28, 0x20, 0x01, 0x24, 0x27, 0x2B, 0x4B, 0x00, + 0xB7, 0x9D, 0x11, 0x6B, 0x70, 0xBE, 0xB2, 0x10, 0x82, 0xBC, 0x0C, 0x9B, 0x68, 0xD0, 0x8D, 0x3B, + 0x24, 0x87, 0xAA, 0x99, 0x28, 0x72, 0x9D, 0x33, 0x5F, 0x59, 0x90, 0xBD, 0xF5, 0xDE, 0x93, 0x9E, + 0x3A, 0x62, 0x5A, 0x34, 0x39, 0xE2, 0x88, 0x55, 0x1D, 0xB9, 0x06, 0xB0, 0xC1, 0x89, 0x6B, 0x2D, + 0xD7, 0x69, 0xC3, 0x19, 0x12, 0x36, 0x84, 0xD0, 0xC9, 0xA0, 0xDA, 0xFF, 0x2F, 0x69, 0x78, 0xB2, + 0xE5, 0x7A, 0xDA, 0xEB, 0xD7, 0x0C, 0xC0, 0xF7, 0xBD, 0x63, 0x17, 0xB8, 0x39, 0x13, 0x38, 0xA2, + 0x36, 0x5B, 0x7B, 0xF2, 0x85, 0x56, 0x6A, 0x1D, 0x64, 0x62, 0xC1, 0x38, 0xE2, 0xAA, 0xBF, 0x51, + 0x66, 0xA2, 0x94, 0xF5, 0x12, 0x9C, 0x66, 0x22, 0x10, 0x6B, 0xF2, 0xB7, 0x30, 0x92, 0x2D, 0xF2, + 0x29, 0xF0, 0x3D, 0x3B, 0x14, 0x43, 0x68, 0xA2, 0xF1, 0x9C, 0x29, 0x37, 0xCB, 0xCE, 0x38, 0x20, + 0x25, 0x6D, 0x7C, 0x67, 0xF3, 0x7E, 0x24, 0x12, 0x24, 0x03, 0x08, 0x81, 0x47, 0xEC, 0xA5, 0x9E, + 0x97, 0xF5, 0x18, 0xD7, 0xCF, 0xBB, 0xD5, 0xEF, 0x76, 0x96, 0xEF, 0xFD, 0xCE, 0xDB, 0x56, 0x9D, + 0x95, 0xA0, 0x42, 0xF9, 0x97, 0x58, 0xE1, 0xD7, 0x31, 0x22, 0xD3, 0x5F, 0x59, 0xE6, 0x3E, 0x6E, + 0x22, 0x00, 0xEA, 0x43, 0x84, 0xB6, 0x25, 0xDB, 0xD9, 0xF3, 0x08, 0x56, 0x68, 0xC0, 0x64, 0x6B, + 0x1D, 0x7C, 0xEC, 0xB6, 0x93, 0xA2, 0x62, 0x57, 0x6E, 0x2E, 0xD8, 0xE7, 0x58, 0x8F, 0xC4, 0x31, + 0x49, 0x26, 0xDD, 0xDE, 0x29, 0x35, 0x87, 0xF5, 0x30, 0x71, 0x70, 0x5B, 0x14, 0x3C, 0x69, 0xBD, + 0x89, 0x12, 0x7D, 0xEB, 0x2E, 0xA3, 0xFE, 0xD8, 0x7F, 0x9E, 0x82, 0x5A, 0x52, 0x0A, 0x2B, 0xC1, + 0x43, 0x2B, 0xD9, 0x30, 0x88, 0x9F, 0xC8, 0x10, 0xFB, 0x89, 0x8D, 0xE6, 0xA1, 0x85, 0x75, 0x33, + 0x7E, 0x6C, 0x9E, 0xDB, 0x73, 0x13, 0x64, 0x62, 0x69, 0xA5, 0x2F, 0x7D, 0xCA, 0x96, 0x6D, 0x9F, + 0xF8, 0x04, 0x4D, 0x30, 0x92, 0x3D, 0x6E, 0x21, 0x14, 0x21, 0xC9, 0x3D, 0xE0, 0xC3, 0xFD, 0x8A, + 0x6B, 0x9D, 0x4A, 0xFD, 0xD1, 0xA1, 0x9D, 0x99, 0x43, 0x77, 0x3F, 0xB0, 0xDA +}; + +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 TestRootCert2[] = { + 0x30, 0x82, 0x05, 0xfd, 0x30, 0x82, 0x03, 0xe5, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x74, + 0x45, 0xc8, 0x78, 0x4e, 0x0c, 0xc9, 0x96, 0x4a, 0xb4, 0x2f, 0xbc, 0xda, 0x29, 0xe1, 0xbc, 0x30, + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, + 0x90, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, + 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, + 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, + 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, + 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x3a, 0x30, 0x38, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x31, + 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x54, 0x65, 0x73, 0x74, 0x69, 0x6e, + 0x67, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x32, 0x30, 0x31, + 0x30, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x36, 0x31, 0x37, 0x32, 0x30, 0x35, 0x38, 0x30, + 0x32, 0x5a, 0x17, 0x0d, 0x33, 0x35, 0x30, 0x36, 0x31, 0x37, 0x32, 0x31, 0x30, 0x34, 0x31, 0x31, + 0x5a, 0x30, 0x81, 0x90, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, + 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, + 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, + 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, + 0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, + 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x3a, 0x30, 0x38, 0x06, 0x03, 0x55, 0x04, + 0x03, 0x13, 0x31, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x54, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, + 0x32, 0x30, 0x31, 0x30, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, + 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, + 0x02, 0x82, 0x02, 0x01, 0x00, 0x95, 0xe3, 0xa8, 0xc1, 0xb9, 0x9c, 0x26, 0x54, 0xb0, 0x99, 0xef, + 0x26, 0x1f, 0xac, 0x1e, 0xc7, 0x30, 0x80, 0xbb, 0xf5, 0x3f, 0xf2, 0xe4, 0xbb, 0xf8, 0xfe, 0x06, + 0x6a, 0x0a, 0xa6, 0x88, 0xbc, 0xb4, 0x8c, 0x45, 0xe0, 0x70, 0x55, 0x19, 0x88, 0xb4, 0x05, 0xcb, + 0xb5, 0xc1, 0xa1, 0xfa, 0xd4, 0x7c, 0xc2, 0x42, 0x53, 0x07, 0x9c, 0x54, 0x56, 0xa8, 0x97, 0xe0, + 0x94, 0x69, 0xbe, 0x13, 0x24, 0xef, 0xe5, 0x8a, 0x29, 0x9c, 0xa6, 0xd0, 0x2b, 0x2f, 0x8a, 0xa6, + 0xe8, 0x79, 0x44, 0x2e, 0x8b, 0xea, 0xc9, 0xbe, 0xb8, 0x54, 0x86, 0x53, 0xbe, 0x07, 0x24, 0x34, + 0x54, 0x15, 0x22, 0x20, 0x01, 0x7b, 0x8a, 0x46, 0xfb, 0xd2, 0x91, 0x07, 0x95, 0x09, 0xb0, 0x56, + 0x11, 0xcc, 0x76, 0xb2, 0xd0, 0x1f, 0x44, 0x79, 0x52, 0x34, 0x28, 0xec, 0x4f, 0x49, 0xc2, 0xcb, + 0x61, 0xd3, 0x86, 0xdc, 0xe4, 0xa3, 0x7e, 0x55, 0x9e, 0x9f, 0xee, 0x10, 0x6f, 0xcf, 0xe1, 0x3d, + 0xf8, 0xb7, 0x84, 0x79, 0xa2, 0x3b, 0x8d, 0x1c, 0xb0, 0x81, 0x7c, 0xe4, 0x44, 0x07, 0xe4, 0xce, + 0x46, 0xb0, 0x98, 0x83, 0x8d, 0x87, 0x8f, 0xe5, 0xf5, 0xae, 0x40, 0x7a, 0xf1, 0xed, 0x3d, 0x9b, + 0x9a, 0x7c, 0x4a, 0xd1, 0xb9, 0xc3, 0x94, 0x05, 0x7b, 0xdc, 0xda, 0xb8, 0xce, 0xdc, 0x1e, 0x6c, + 0xcf, 0xd9, 0x9e, 0x37, 0xef, 0xc3, 0x5a, 0x36, 0x7b, 0x90, 0x86, 0x45, 0xdc, 0xf6, 0x2e, 0xca, + 0xdd, 0xee, 0xde, 0x27, 0xd9, 0x74, 0x9a, 0x69, 0xf5, 0xd9, 0x5d, 0x09, 0x2d, 0x45, 0x41, 0xcc, + 0xb7, 0xc2, 0x82, 0xd4, 0x2a, 0x8c, 0x16, 0x25, 0x92, 0x97, 0x3d, 0x94, 0x4e, 0x89, 0x33, 0x7e, + 0x5b, 0x03, 0x54, 0xcd, 0xb0, 0x83, 0xa0, 0x8e, 0x41, 0xb7, 0x87, 0x8d, 0xd9, 0x05, 0x63, 0x52, + 0xf6, 0xee, 0xe6, 0x4e, 0x13, 0x9d, 0x54, 0xcd, 0x49, 0xfe, 0xe3, 0x8b, 0x3b, 0x50, 0x9b, 0x48, + 0xbb, 0xb2, 0xe5, 0x92, 0xd4, 0xab, 0xa0, 0xc5, 0x10, 0xaf, 0x3e, 0xb1, 0x45, 0x21, 0x34, 0x90, + 0xdc, 0xad, 0xb9, 0xf7, 0xfe, 0x21, 0xae, 0xee, 0x50, 0x58, 0x7a, 0x3a, 0xe5, 0xaa, 0xd8, 0xe3, + 0x82, 0xd6, 0xcf, 0x6d, 0x4d, 0xc9, 0x15, 0xac, 0x9c, 0x31, 0x17, 0xa5, 0x16, 0xa7, 0x42, 0xf6, + 0xda, 0x12, 0x78, 0xa7, 0x66, 0x90, 0xec, 0xfc, 0xcd, 0x01, 0x63, 0xff, 0xf0, 0x0e, 0xba, 0xe1, + 0xcd, 0xf0, 0xdb, 0x6b, 0x9a, 0x0f, 0xf6, 0x0f, 0x04, 0x01, 0x09, 0xbc, 0x9f, 0xce, 0xb7, 0x6c, + 0x51, 0x70, 0x57, 0x08, 0x1b, 0xff, 0x79, 0x9a, 0x52, 0x5d, 0xba, 0xac, 0x14, 0xe5, 0x3b, 0x67, + 0xcf, 0x2c, 0x52, 0xde, 0x27, 0x9a, 0x34, 0x03, 0x6e, 0x25, 0x48, 0xb0, 0x19, 0x74, 0xfc, 0x4d, + 0x98, 0xc2, 0x4b, 0x8c, 0x92, 0xe1, 0x88, 0xae, 0x48, 0x2a, 0xab, 0xab, 0xcd, 0x14, 0x4d, 0xb6, + 0x61, 0x0e, 0xa1, 0x09, 0x8f, 0x2c, 0xdb, 0x45, 0xaf, 0x7d, 0x3b, 0x81, 0x56, 0x08, 0xc9, 0x3b, + 0x41, 0xb7, 0x64, 0x9f, 0x5d, 0x2e, 0x12, 0x7f, 0xb9, 0x69, 0x29, 0x1f, 0x52, 0x45, 0x4a, 0x23, + 0xc6, 0xaf, 0xb6, 0xb2, 0x38, 0x72, 0x9d, 0x08, 0x33, 0xff, 0xd0, 0xcf, 0x89, 0xb6, 0xea, 0x6e, + 0x85, 0x44, 0x94, 0x3e, 0x91, 0x59, 0xeb, 0xef, 0x9e, 0xbd, 0x9b, 0x9c, 0x1a, 0x47, 0x03, 0x4e, + 0xa2, 0x17, 0x96, 0xfa, 0x62, 0x0b, 0xe8, 0x53, 0xb6, 0x4e, 0xe3, 0xe8, 0x2a, 0x73, 0x59, 0xe2, + 0x13, 0xb8, 0xf8, 0x5a, 0x7e, 0xc6, 0xe2, 0x0a, 0xdd, 0x4a, 0x43, 0xcc, 0xc3, 0x77, 0x3b, 0x7a, + 0x31, 0x04, 0x0a, 0xc1, 0x84, 0x96, 0x3a, 0x63, 0x6e, 0x1a, 0x3e, 0x0a, 0x0c, 0x25, 0xb8, 0x7e, + 0xb5, 0x52, 0x0c, 0xb9, 0xab, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x51, 0x30, 0x4f, 0x30, 0x0b, + 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, + 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, + 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xa3, 0x01, 0x04, 0x7e, 0x30, 0x88, 0x33, 0xeb, 0xb9, + 0x31, 0x9c, 0xca, 0xeb, 0x85, 0x76, 0x67, 0xfc, 0x65, 0xb4, 0xd1, 0x30, 0x10, 0x06, 0x09, 0x2b, + 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, + 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, + 0x00, 0x49, 0x8b, 0xc1, 0xfc, 0x4f, 0xe8, 0xe4, 0x2d, 0x67, 0x92, 0x9a, 0x76, 0x05, 0xba, 0xd1, + 0xbc, 0x98, 0xe4, 0x2b, 0xba, 0x1f, 0x66, 0x5f, 0x66, 0x23, 0xcf, 0x1c, 0x27, 0xeb, 0xb4, 0xaa, + 0xdd, 0xa0, 0x17, 0x20, 0x55, 0x72, 0x33, 0xb1, 0x76, 0xde, 0xc9, 0x6d, 0x0d, 0x3c, 0x2d, 0x0a, + 0x08, 0x24, 0x2d, 0xec, 0x38, 0x96, 0x7a, 0x83, 0xf1, 0x27, 0x50, 0x3c, 0x86, 0x09, 0xdd, 0x0d, + 0x41, 0xce, 0xaa, 0x5e, 0xf3, 0x8f, 0x7a, 0x3e, 0x3e, 0xf1, 0xf0, 0xba, 0x8b, 0x72, 0xdd, 0x36, + 0xa1, 0x69, 0x05, 0x5b, 0x7c, 0xec, 0xe7, 0x70, 0x63, 0x8d, 0x1d, 0x6e, 0xc0, 0xfd, 0x3a, 0x03, + 0xf1, 0x10, 0x3e, 0x90, 0xd7, 0x7b, 0x7a, 0xdc, 0xea, 0x60, 0xec, 0x2f, 0x53, 0xfd, 0x19, 0x1d, + 0x3a, 0xa1, 0x74, 0x08, 0xc2, 0x7b, 0x3c, 0xe0, 0x50, 0xac, 0x21, 0xd7, 0xb6, 0xdd, 0xdd, 0x3c, + 0x44, 0x1b, 0xf7, 0xf3, 0x44, 0x3e, 0x6c, 0x96, 0xe0, 0xc0, 0x9f, 0xe6, 0xef, 0xdd, 0xdd, 0xb1, + 0xa6, 0x68, 0x61, 0x6c, 0x5e, 0x9e, 0xf9, 0xff, 0x9a, 0x06, 0xa4, 0x6a, 0xcd, 0x9e, 0x75, 0x43, + 0x89, 0x9b, 0xcb, 0x85, 0xf6, 0xdc, 0x0c, 0x46, 0x4a, 0x8c, 0x9b, 0xac, 0x11, 0xa6, 0x63, 0x45, + 0xfb, 0xfc, 0xde, 0x20, 0xee, 0xce, 0x67, 0x9f, 0x3d, 0xd0, 0x93, 0xdb, 0x39, 0xfb, 0xea, 0x5e, + 0x4b, 0xfc, 0xd6, 0x20, 0xf1, 0x95, 0x36, 0x08, 0x8c, 0xb2, 0xb3, 0xa1, 0x97, 0x1b, 0x41, 0x19, + 0xb0, 0xac, 0xfe, 0xe2, 0xd5, 0xab, 0x7d, 0xd9, 0x26, 0xd4, 0xdc, 0xbd, 0x1f, 0x38, 0xc0, 0xe3, + 0x86, 0xdf, 0x24, 0xe7, 0xf5, 0x3e, 0x09, 0xca, 0x4d, 0xa1, 0xba, 0x16, 0xc3, 0x4a, 0xb1, 0xfc, + 0x72, 0x98, 0xcf, 0x0e, 0x92, 0xfa, 0x57, 0x45, 0xe9, 0x48, 0x4d, 0xc6, 0xa2, 0x7c, 0x3b, 0x72, + 0x63, 0xac, 0x4e, 0xf4, 0x74, 0xe9, 0x2b, 0x57, 0xac, 0xab, 0x32, 0x88, 0x0b, 0xa9, 0x10, 0x67, + 0x53, 0x7e, 0xd2, 0x62, 0xd2, 0xfa, 0x68, 0xe8, 0x9d, 0x5b, 0xae, 0xcd, 0xe0, 0xe5, 0xe2, 0x06, + 0x96, 0x0c, 0x34, 0x32, 0xf6, 0xbc, 0x25, 0xad, 0x98, 0xf3, 0x32, 0x60, 0xbe, 0x14, 0xd3, 0x78, + 0xd1, 0x10, 0x6f, 0xff, 0x32, 0xe3, 0x9e, 0x3d, 0x88, 0xda, 0xb3, 0x32, 0x0a, 0xcf, 0x20, 0x65, + 0x47, 0x78, 0xaa, 0xa5, 0x4b, 0x87, 0x6a, 0x83, 0xdc, 0x1a, 0x5a, 0x2a, 0xdf, 0x70, 0x61, 0xaf, + 0x35, 0x32, 0xe0, 0x59, 0xa1, 0x9f, 0x0b, 0x14, 0x7a, 0xaa, 0xab, 0x42, 0x0b, 0x6b, 0xff, 0xfb, + 0x34, 0xcb, 0x9d, 0x96, 0xd7, 0x26, 0x2a, 0x13, 0x3b, 0xe3, 0xdf, 0x11, 0xe6, 0x86, 0x7d, 0x0d, + 0x09, 0x11, 0x93, 0x4b, 0xa4, 0xf6, 0xd2, 0x07, 0xc2, 0xcd, 0xc8, 0xbe, 0xf5, 0x67, 0xf7, 0xae, + 0x05, 0xce, 0x16, 0xfe, 0x90, 0xc9, 0x4a, 0x98, 0x1b, 0x24, 0x69, 0x78, 0x90, 0xf9, 0x34, 0x8e, + 0x37, 0xe8, 0x6e, 0x1d, 0xdc, 0xcf, 0x4f, 0xe7, 0xd2, 0x64, 0x40, 0x1d, 0xc4, 0x30, 0xba, 0xd5, + 0x08, 0x88, 0x67, 0x4b, 0x0f, 0xb8, 0xe5, 0x59, 0xe9, 0x18, 0xd8, 0x0c, 0x60, 0x68, 0xae, 0x7f, + 0xea, 0x91, 0x55, 0xbe, 0xeb, 0xf1, 0xa7, 0x8e, 0xd8, 0x5d, 0x50, 0x3e, 0xbf, 0xd5, 0x69, 0x57, + 0x95, 0x8f, 0xa7, 0xff, 0xe4, 0x09, 0x3f, 0x08, 0x80, 0x97, 0x32, 0x42, 0xb8, 0x82, 0x43, 0x82, + 0x6f, 0x8b, 0x0b, 0x93, 0xda, 0x19, 0xbf, 0x63, 0x4e, 0x5f, 0x9f, 0xed, 0x2c, 0x22, 0xb6, 0x20, + 0x5f, 0x70, 0x44, 0xfa, 0x89, 0x59, 0x93, 0xb0, 0x7b, 0x12, 0x0f, 0x5e, 0x62, 0x62, 0x51, 0x11, + 0xbd, 0xba, 0x5a, 0xd0, 0xce, 0xa1, 0xb6, 0xef, 0x80, 0x20, 0xe6, 0x73, 0x4b, 0x11, 0x06, 0x56, + 0xe2, 0x0a + }; + +// +// OID ASN.1 Value for Hash Algorithms +// +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 HashOidValue[] = { + 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x02, 0x05, // OBJ_md5 + 0x2B, 0x0E, 0x03, 0x02, 0x1A, // OBJ_sha1 + 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x04, // OBJ_sha224 + 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, // OBJ_sha256 + 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02, // OBJ_sha384 + 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, // OBJ_sha512 + }; + +UNIT_TEST_STATUS +EFIAPI +TestVerifyAuthenticodeVerify ( + IN UNIT_TEST_CONTEXT Context + ) +{ + BOOLEAN Status; + + // + // Sample Code: Demonstrate how to check the Hash algorithm in PE/COFF Authenticode. + // According to PKCS#7 Definition: + // SignedData ::= SEQUENCE { + // version Version, + // digestAlgorithms DigestAlgorithmIdentifiers, + // contentInfo ContentInfo, + // .... } + // The DigestAlgorithmIdentifiers can be used to determine the hash algorithm in PE/COFF hashing + // This field has the fixed offset (+32) in final Authenticode ASN.1 data. + // + if (CompareMem (AuthenticodeWithSha1 + 32, &HashOidValue[8], 5) == 0) { + // + // Verify Authenticode signature. + // The PeHash value should be calculated following MSFT's Authenticode Specification. + // + Status = AuthenticodeVerify ( + AuthenticodeWithSha1, + sizeof (AuthenticodeWithSha1), + TestRootCert1, + sizeof (TestRootCert1), + PeSha1Hash, + SHA1_DIGEST_SIZE + ); + UT_ASSERT_TRUE (Status); + } + + if (CompareMem (AuthenticodeWithSha256 + 32, &HashOidValue[22], 9) == 0) { + Status = AuthenticodeVerify ( + AuthenticodeWithSha256, + sizeof (AuthenticodeWithSha256), + TestRootCert2, + sizeof (TestRootCert2), + PeSha256Hash, + SHA256_DIGEST_SIZE + ); + UT_ASSERT_TRUE (Status); + } + + return UNIT_TEST_PASSED; +} + +TEST_DESC mAuthenticodeTest[] = { + // + // -----Description--------------------------------------Class----------------------Function-----------------Pre---Post--Context + // + {"TestVerifyAuthenticodeVerify()", "CryptoPkg.BaseCryptLib.Authenticode", TestVerifyAuthenticodeVerify, NULL, NULL, NULL}, +}; + +UINTN mAuthenticodeTestNum = ARRAY_SIZE(mAuthenticodeTest); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCryptLibUnitTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCryptLibUnitTests.c new file mode 100644 index 000000000000..b7fcea3ff7e4 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCryptLibUnitTests.c @@ -0,0 +1,66 @@ +/** @file + This is defines the tests that will run on BaseCryptLib + + Copyright (c) Microsoft Corporation.<BR> + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ +#include "TestBaseCryptLib.h" + +SUITE_DESC mSuiteDesc[] = { + // + // Title--------------------------Package-------------------Sup--Tdn----TestNum------------TestDesc + // + {"EKU verify tests", "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs7EkuTestNum, mPkcs7EkuTest}, + {"HASH verify tests", "CryptoPkg.BaseCryptLib", NULL, NULL, &mHashTestNum, mHashTest}, + {"HMAC verify tests", "CryptoPkg.BaseCryptLib", NULL, NULL, &mHmacTestNum, mHmacTest}, + {"BlockCipher verify tests", "CryptoPkg.BaseCryptLib", NULL, NULL, &mBlockCipherTestNum, mBlockCipherTest}, + {"RSA verify tests", "CryptoPkg.BaseCryptLib", NULL, NULL, &mRsaTestNum, mRsaTest}, + {"RSACert verify tests", "CryptoPkg.BaseCryptLib", NULL, NULL, &mRsaCertTestNum, mRsaCertTest}, + {"PKCS7 verify tests", "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs7TestNum, mPkcs7Test}, + {"PKCS5 verify tests", "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs5TestNum, mPkcs5Test}, + {"Authenticode verify tests", "CryptoPkg.BaseCryptLib", NULL, NULL, &mAuthenticodeTestNum, mAuthenticodeTest}, + {"ImageTimestamp verify tests", "CryptoPkg.BaseCryptLib", NULL, NULL, &mImageTimestampTestNum, mImageTimestampTest}, + {"DH verify tests", "CryptoPkg.BaseCryptLib", NULL, NULL, &mDhTestNum, mDhTest}, + {"PRNG verify tests", "CryptoPkg.BaseCryptLib", NULL, NULL, &mPrngTestNum, mPrngTest}, + {"OAEP encrypt verify tests", "CryptoPkg.BaseCryptLib", NULL, NULL, &mOaepTestNum, mOaepTest}, +}; + +EFI_STATUS +EFIAPI +CreateUnitTest ( + IN CHAR8* UnitTestName, + IN CHAR8* UnitTestVersion, + IN OUT UNIT_TEST_FRAMEWORK_HANDLE* Framework +) { + EFI_STATUS Status; + UINTN SuiteIndex; + UINTN TestIndex; + + if ( Framework == NULL || UnitTestVersion == NULL || UnitTestName == NULL) { + return EFI_INVALID_PARAMETER; + } + Status = EFI_SUCCESS; + // + // Start setting up the test framework for running the tests. + // + Status = InitUnitTestFramework (Framework, UnitTestName, gEfiCallerBaseName, UnitTestVersion); + if (EFI_ERROR (Status)) { + DEBUG((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status = %r\n", Status)); + goto EXIT; + } + + for (SuiteIndex = 0; SuiteIndex < ARRAY_SIZE(mSuiteDesc); SuiteIndex++) { + UNIT_TEST_SUITE_HANDLE Suite = NULL; + Status = CreateUnitTestSuite (&Suite, *Framework, mSuiteDesc[SuiteIndex].Title, mSuiteDesc[SuiteIndex].Package, mSuiteDesc[SuiteIndex].Sup, mSuiteDesc[SuiteIndex].Tdn); + if (EFI_ERROR (Status)) { + Status = EFI_OUT_OF_RESOURCES; + goto EXIT; + } + for (TestIndex = 0; TestIndex < *mSuiteDesc[SuiteIndex].TestNum; TestIndex++) { + AddTestCase (Suite, (mSuiteDesc[SuiteIndex].TestDesc + TestIndex)->Description, (mSuiteDesc[SuiteIndex].TestDesc + TestIndex)->ClassName, (mSuiteDesc[SuiteIndex].TestDesc + TestIndex)->Func, (mSuiteDesc[SuiteIndex].TestDesc + TestIndex)->PreReq, (mSuiteDesc[SuiteIndex].TestDesc + TestIndex)->CleanUp, (mSuiteDesc[SuiteIndex].TestDesc + TestIndex)->Context); + } + } + EXIT: + return Status; +} diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCipherTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCipherTests.c new file mode 100644 index 000000000000..b3493073965f --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCipherTests.c @@ -0,0 +1,293 @@ +/** @file + Application for Block Cipher Primitives Validation. + +Copyright (c) 2010, Intel Corporation. All rights reserved.<BR> +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "TestBaseCryptLib.h" + +// +// TDES test vectors are extracted from OpenSSL 0.9.8l, crypto\des\destest.c +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesEcbData[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesEcbKey[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesEcbCipher[] = { + 0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7, + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesEcb2Cipher[] = { + 0x92, 0x95, 0xB5, 0x9B, 0xB3, 0x84, 0x73, 0x6E, + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesCbcData[] = { + 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20, + 0x4E, 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x20 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesCbcKey[] = { + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, + 0xf1, 0xe0, 0xd3, 0xc2, 0xb5, 0xa4, 0x97, 0x86, + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 TdesCbcIvec[] = { + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesCbc3Cipher[] = { + 0x3F, 0xE3, 0x01, 0xC9, 0x62, 0xAC, 0x01, 0xD0, + 0x22, 0x13, 0x76, 0x3C, 0x1C, 0xBD, 0x4C, 0xDC, + 0x79, 0x96, 0x57, 0xC0, 0x64, 0xEC, 0xF5, 0xD4 + }; + +// +// AES test vectors are from NIST KAT of AES +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128EcbData[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128EcbKey[] = { + 0x10, 0xa5, 0x88, 0x69, 0xd7, 0x4b, 0xe5, 0xa3, 0x74, 0xcf, 0x86, 0x7c, 0xfb, 0x47, 0x38, 0x59 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128EcbCipher[] = { + 0x6d, 0x25, 0x1e, 0x69, 0x44, 0xb0, 0x51, 0xe0, 0x4e, 0xaa, 0x6f, 0xb4, 0xdb, 0xf7, 0x84, 0x65 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes192EcbData[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes192EcbKey[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes192EcbCipher[] = { + 0xdd, 0x8a, 0x49, 0x35, 0x14, 0x23, 0x1c, 0xbf, 0x56, 0xec, 0xce, 0xe4, 0xc4, 0x08, 0x89, 0xfb + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes256EcbData[] = { + 0x01, 0x47, 0x30, 0xf8, 0x0a, 0xc6, 0x25, 0xfe, 0x84, 0xf0, 0x26, 0xc6, 0x0b, 0xfd, 0x54, 0x7d + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes256EcbKey[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes256EcbCipher[] = { + 0x5c, 0x9d, 0x84, 0x4e, 0xd4, 0x6f, 0x98, 0x85, 0x08, 0x5e, 0x5d, 0x6a, 0x4f, 0x94, 0xc7, 0xd7 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128CbcData[] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128CbcKey[] = { + 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0, 0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128CbcIvec[] = { + 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128CbcCipher[] = { + 0xd2, 0x96, 0xcd, 0x94, 0xc2, 0xcc, 0xcf, 0x8a, 0x3a, 0x86, 0x30, 0x28, 0xb5, 0xe1, 0xdc, 0x0a, + 0x75, 0x86, 0x60, 0x2d, 0x25, 0x3c, 0xff, 0xf9, 0x1b, 0x82, 0x66, 0xbe, 0xa6, 0xd6, 0x1a, 0xb1 + }; + +// +// ARC4 Test Vector defined in "Appendix A.1 Test Vectors from [CRYPTLIB]" of +// IETF Draft draft-kaukonen-cipher-arcfour-03 ("A Stream Cipher Encryption Algorithm 'Arcfour'"). +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Arc4Data[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Arc4Key[] = { + 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Arc4Cipher[] = { + 0x74, 0x94, 0xC2, 0xE7, 0x10, 0x4B, 0x08, 0x79 + }; + + +typedef +UINTN +(EFIAPI *EFI_BLOCK_CIPHER_GET_CONTEXT_SIZE) ( + VOID + ); + +typedef +BOOLEAN +(EFIAPI *EFI_BLOCK_CIPHER_INIT) ( + OUT VOID *BlockCipherContext, + IN CONST UINT8 *Key, + IN UINTN KeyLength + ); + +typedef +BOOLEAN +(EFIAPI *EFI_BLOCK_CIPHER_ECB_ENCRYPT_DECRYPT) ( + IN VOID *BlockCipherContext, + IN CONST UINT8 *Input, + IN UINTN InputSize, + OUT UINT8 *Output + ); + +typedef +BOOLEAN +(EFIAPI *EFI_BLOCK_CIPHER_CBC_ENCRYPT_DECRYPT) ( + IN VOID *BlockCipherContext, + IN CONST UINT8 *Input, + IN UINTN InputSize, + IN CONST UINT8 *Ivec, + OUT UINT8 *Output + ); + +typedef +BOOLEAN +(EFIAPI *EFI_BLOCK_CIPHER_RESET) ( + IN OUT VOID *BlockCipherContext + ); + +typedef struct { + EFI_BLOCK_CIPHER_GET_CONTEXT_SIZE GetContextSize; + EFI_BLOCK_CIPHER_INIT Init; + EFI_BLOCK_CIPHER_ECB_ENCRYPT_DECRYPT EcbEncrypt; + EFI_BLOCK_CIPHER_ECB_ENCRYPT_DECRYPT EcbDecrypt; + EFI_BLOCK_CIPHER_CBC_ENCRYPT_DECRYPT CbcEncrypt; + EFI_BLOCK_CIPHER_CBC_ENCRYPT_DECRYPT CbcDecrypt; + EFI_BLOCK_CIPHER_RESET Reset; + CONST UINT8 *Key; + UINTN KeySize; + CONST UINT8 *Ivec; + CONST UINT8 *Data; + UINTN DataSize; + CONST UINT8 *Cipher; + UINTN CipherSize; + VOID *Ctx; +} BLOCK_CIPHER_TEST_CONTEXT; + +// These are commented out as they are deprecated, but are left in should they be used again +//BLOCK_CIPHER_TEST_CONTEXT mTdesEcbTestCtx = {TdesGetContextSize, TdesInit, TdesEcbEncrypt, TdesEcbDecrypt, NULL, NULL, NULL, TdesEcbKey, 64, NULL, TdesEcbData, 8, TdesEcbCipher, 8}; +//BLOCK_CIPHER_TEST_CONTEXT mTdesCbcTestCtx = {TdesGetContextSize, TdesInit, NULL, NULL, TdesCbcEncrypt, TdesCbcDecrypt, NULL, TdesCbcKey, 192, TdesCbcIvec, TdesCbcData, sizeof(TdesCbcData), TdesCbc3Cipher, sizeof(TdesCbc3Cipher)}; +//BLOCK_CIPHER_TEST_CONTEXT mAes128EcbTestCtx = {AesGetContextSize, AesInit, AesEcbEncrypt, AesEcbDecrypt, NULL, NULL, NULL, Aes128EcbKey, 128, NULL, Aes128EcbData, sizeof(Aes128EcbData), Aes128EcbCipher, sizeof(Aes128EcbCipher)}; +//BLOCK_CIPHER_TEST_CONTEXT mAes192EcbTestCtx = {AesGetContextSize, AesInit, AesEcbEncrypt, AesEcbDecrypt, NULL, NULL, NULL, Aes192EcbKey, 192, NULL, Aes192EcbData, sizeof(Aes192EcbData), Aes192EcbCipher, sizeof(Aes192EcbCipher)}; +//BLOCK_CIPHER_TEST_CONTEXT mAes256EcbTestCtx = {AesGetContextSize, AesInit, AesEcbEncrypt, AesEcbDecrypt, NULL, NULL, NULL, Aes256EcbKey, 256, NULL, Aes256EcbData, sizeof(Aes256EcbData), Aes256EcbCipher, sizeof(Aes256EcbCipher)}; +//BLOCK_CIPHER_TEST_CONTEXT mArc4TestCtx = {Arc4GetContextSize, Arc4Init, Arc4Encrypt, (EFI_BLOCK_CIPHER_ECB_ENCRYPT_DECRYPT), Arc4Decrypt, NULL, NULL, Arc4Reset, Arc4Key, sizeof(Arc4Key), NULL, Arc4Data, sizeof(Arc4Data), Arc4Cipher, sizeof(Arc4Cipher)}; +BLOCK_CIPHER_TEST_CONTEXT mAes128CbcTestCtx = {AesGetContextSize, AesInit, NULL, NULL, AesCbcEncrypt, AesCbcDecrypt, NULL, Aes128CbcKey, 128, Aes128CbcIvec, Aes128CbcData, sizeof(Aes128CbcData), Aes128CbcCipher, sizeof(Aes128CbcCipher)}; + + +UNIT_TEST_STATUS +EFIAPI +TestVerifyBLockCiperPreReq ( + UNIT_TEST_CONTEXT Context + ) +{ + BLOCK_CIPHER_TEST_CONTEXT *TestContext; + UINTN CtxSize; + + TestContext = Context; + CtxSize = TestContext->GetContextSize (); + TestContext->Ctx = AllocatePool (CtxSize); + if (TestContext->Ctx == NULL) { + return UNIT_TEST_ERROR_TEST_FAILED; + } + + return UNIT_TEST_PASSED; +} + +VOID +EFIAPI +TestVerifyBLockCiperCleanUp ( + UNIT_TEST_CONTEXT Context + ) +{ + BLOCK_CIPHER_TEST_CONTEXT *TestContext; + + TestContext = Context; + if (TestContext->Ctx != NULL) { + FreePool (TestContext->Ctx); + } +} + +UNIT_TEST_STATUS +EFIAPI +TestVerifyBLockCiper ( + UNIT_TEST_CONTEXT Context + ) +{ + UINT8 Encrypt[256]; + UINT8 Decrypt[256]; + BOOLEAN Status; + BLOCK_CIPHER_TEST_CONTEXT *TestContext; + + TestContext = Context; + + ZeroMem (Encrypt, sizeof (Encrypt)); + ZeroMem (Decrypt, sizeof (Decrypt)); + + Status = TestContext->Init (TestContext->Ctx, TestContext->Key, TestContext->KeySize); + UT_ASSERT_TRUE (Status); + + if (TestContext->Ivec == NULL) { + Status = TestContext->EcbEncrypt (TestContext->Ctx, TestContext->Data, TestContext->DataSize, Encrypt); + UT_ASSERT_TRUE (Status); + + if (TestContext->Reset != NULL) { + Status = TestContext->Reset (TestContext->Ctx); + UT_ASSERT_TRUE (Status); + } + + Status = TestContext->EcbDecrypt (TestContext->Ctx, Encrypt, TestContext->DataSize, Decrypt); + UT_ASSERT_TRUE (Status); + + } else { + Status = TestContext->CbcEncrypt (TestContext->Ctx, TestContext->Data, TestContext->DataSize, TestContext->Ivec, Encrypt); + UT_ASSERT_TRUE (Status); + + if (TestContext->Reset != NULL) { + Status = TestContext->Reset (TestContext->Ctx); + UT_ASSERT_TRUE (Status); + } + + Status = TestContext->CbcDecrypt (TestContext->Ctx, Encrypt, TestContext->DataSize, TestContext->Ivec, Decrypt); + UT_ASSERT_TRUE (Status); + } + + UT_ASSERT_MEM_EQUAL (Encrypt, TestContext->Cipher, TestContext->CipherSize); + UT_ASSERT_MEM_EQUAL (Decrypt, TestContext->Data, TestContext->DataSize); + + return UNIT_TEST_PASSED; +} + +TEST_DESC mBlockCipherTest[] = { + // + // -----Description-------------------------Class-------------------------Function---------------Pre---------------------------Post------------------Context + // + {"TestVerifyAes128Cbc()", "CryptoPkg.BaseCryptLib.BlockCipher", TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanUp, &mAes128CbcTestCtx}, + // These are commented out as these functions have been deprecated, but they have been left in for future reference + //{"TestVerifyTdesEcb()", "CryptoPkg.BaseCryptLib.BlockCipher", TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanUp, &mTdesEcbTestCtx}, + //{"TestVerifyTdesCbc()", "CryptoPkg.BaseCryptLib.BlockCipher", TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanUp, &mTdesCbcTestCtx}, + //{"TestVerifyAes128Ecb()", "CryptoPkg.BaseCryptLib.BlockCipher", TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanUp, &mAes128EcbTestCtx}, + //{"TestVerifyAes192Ecb()", "CryptoPkg.BaseCryptLib.BlockCipher", TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanUp, &mAes192EcbTestCtx}, + //{"TestVerifyAes256Ecb()", "CryptoPkg.BaseCryptLib.BlockCipher", TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanUp, &mAes256EcbTestCtx}, + //{"TestVerifyArc4()", "CryptoPkg.BaseCryptLib.BlockCipher", TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanUp, &mArc4TestCtx}, +}; + +UINTN mBlockCipherTestNum = ARRAY_SIZE(mBlockCipherTest); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c new file mode 100644 index 000000000000..422b990f2c2d --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c @@ -0,0 +1,106 @@ +/** @file + Application for Diffie-Hellman Primitives Validation. + +Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR> +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "TestBaseCryptLib.h" + +VOID *mDh1; +VOID *mDh2; + +UNIT_TEST_STATUS +EFIAPI +TestVerifyDhPreReq ( + UNIT_TEST_CONTEXT Context + ) +{ + mDh1 = DhNew (); + if (mDh1 == NULL) { + return UNIT_TEST_ERROR_TEST_FAILED; + } + + mDh2 = DhNew (); + if (mDh2 == NULL) { + return UNIT_TEST_ERROR_TEST_FAILED; + } + + return UNIT_TEST_PASSED; +} + +VOID +EFIAPI +TestVerifyDhCleanUp ( + UNIT_TEST_CONTEXT Context + ) +{ + if (mDh1 != NULL) { + DhFree (mDh1); + mDh1 = NULL; + } + if (mDh2 != NULL) { + DhFree (mDh2); + mDh2 = NULL; + } +} + +UNIT_TEST_STATUS +EFIAPI +TestVerifyDhGenerateKey ( + UNIT_TEST_CONTEXT Context + ) +{ + UINT8 Prime[64]; + UINT8 PublicKey1[64]; + UINTN PublicKey1Length; + UINT8 PublicKey2[64]; + UINTN PublicKey2Length; + UINT8 Key1[64]; + UINTN Key1Length; + UINT8 Key2[64]; + UINTN Key2Length; + BOOLEAN Status; + + // + // Initialize Key Length + // + PublicKey1Length = sizeof (PublicKey1); + PublicKey2Length = sizeof (PublicKey2); + Key1Length = sizeof (Key1); + Key2Length = sizeof (Key2); + + Status = DhGenerateParameter (mDh1, 2, 64, Prime); + UT_ASSERT_TRUE (Status); + + Status = DhSetParameter (mDh2, 2, 64, Prime); + UT_ASSERT_TRUE (Status); + + Status = DhGenerateKey (mDh1, PublicKey1, &PublicKey1Length); + UT_ASSERT_TRUE (Status); + + Status = DhGenerateKey (mDh2, PublicKey2, &PublicKey2Length); + UT_ASSERT_TRUE (Status); + + Status = DhComputeKey (mDh1, PublicKey2, PublicKey2Length, Key1, &Key1Length); + UT_ASSERT_TRUE (Status); + + Status = DhComputeKey (mDh2, PublicKey1, PublicKey1Length, Key2, &Key2Length); + UT_ASSERT_TRUE (Status); + + UT_ASSERT_EQUAL (Key1Length, Key2Length); + + UT_ASSERT_MEM_EQUAL (Key1, Key2, Key1Length); + + return UNIT_TEST_PASSED; +} + +TEST_DESC mDhTest[] = { + // + // -----Description--------------------------------Class---------------------Function----------------Pre-----------------Post------------Context + // + {"TestVerifyDhGenerateKey()", "CryptoPkg.BaseCryptLib.Dh", TestVerifyDhGenerateKey, TestVerifyDhPreReq, TestVerifyDhCleanUp, NULL}, +}; + +UINTN mDhTestNum = ARRAY_SIZE(mDhTest); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests.c new file mode 100644 index 000000000000..bc47c5736246 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests.c @@ -0,0 +1,197 @@ +/** @file + Application for Hash Primitives Validation. + +Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR> +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "TestBaseCryptLib.h" + +// +// Max Known Digest Size is SHA512 Output (64 bytes) by far +// +#define MAX_DIGEST_SIZE 64 + +// +// Message string for digest validation +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *HashData = "abc"; + +// +// Result for MD5("abc"). (From "A.5 Test suite" of IETF RFC1321) +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Md5Digest[MD5_DIGEST_SIZE] = { + 0x90, 0x01, 0x50, 0x98, 0x3c, 0xd2, 0x4f, 0xb0, 0xd6, 0x96, 0x3f, 0x7d, 0x28, 0xe1, 0x7f, 0x72 + + }; + +// +// Result for SHA-1("abc"). (From "A.1 SHA-1 Example" of NIST FIPS 180-2) +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Sha1Digest[SHA1_DIGEST_SIZE] = { + 0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a, 0xba, 0x3e, 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c, + 0x9c, 0xd0, 0xd8, 0x9d + }; + +// +// Result for SHA-256("abc"). (From "B.1 SHA-256 Example" of NIST FIPS 180-2) +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Sha256Digest[SHA256_DIGEST_SIZE] = { + 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, + 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad + }; + +// +// Result for SHA-384("abc"). (From "D.1 SHA-384 Example" of NIST FIPS 180-2) +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Sha384Digest[SHA384_DIGEST_SIZE] = { + 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b, 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07, + 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63, 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed, + 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23, 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7 + }; + +// +// Result for SHA-512("abc"). (From "C.1 SHA-512 Example" of NIST FIPS 180-2) +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Sha512Digest[SHA512_DIGEST_SIZE] = { + 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31, + 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2, 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a, + 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8, 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd, + 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e, 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f + }; + +typedef +UINTN +(EFIAPI *EFI_HASH_GET_CONTEXT_SIZE) ( + VOID + ); + +typedef +BOOLEAN +(EFIAPI *EFI_HASH_INIT) ( + OUT VOID *HashContext + ); + +typedef +BOOLEAN +(EFIAPI *EFI_HASH_UPDATE) ( + IN OUT VOID *HashContext, + IN CONST VOID *Data, + IN UINTN DataSize + ); + +typedef +BOOLEAN +(EFIAPI *EFI_HASH_FINAL) ( + IN OUT VOID *HashContext, + OUT UINT8 *HashValue + ); + +typedef +BOOLEAN +(EFIAPI *EFI_HASH_ALL) ( + IN CONST VOID *Data, + IN UINTN DataSize, + OUT UINT8 *HashValue + ); + +typedef struct { + UINT32 DigestSize; + EFI_HASH_GET_CONTEXT_SIZE GetContextSize; + EFI_HASH_INIT HashInit; + EFI_HASH_UPDATE HashUpdate; + EFI_HASH_FINAL HashFinal; + EFI_HASH_ALL HashAll; + CONST UINT8 *Digest; + VOID *HashCtx; +} HASH_TEST_CONTEXT; + +HASH_TEST_CONTEXT mMd5TestCtx = {MD5_DIGEST_SIZE, Md5GetContextSize, Md5Init, Md5Update, Md5Final, Md5HashAll, Md5Digest}; +HASH_TEST_CONTEXT mSha1TestCtx = {SHA1_DIGEST_SIZE, Sha1GetContextSize, Sha1Init, Sha1Update, Sha1Final, Sha1HashAll, Sha1Digest}; +HASH_TEST_CONTEXT mSha256TestCtx = {SHA256_DIGEST_SIZE, Sha256GetContextSize, Sha256Init, Sha256Update, Sha256Final, Sha256HashAll, Sha256Digest}; +HASH_TEST_CONTEXT mSha384TestCtx = {SHA384_DIGEST_SIZE, Sha384GetContextSize, Sha384Init, Sha384Update, Sha384Final, Sha384HashAll, Sha384Digest}; +HASH_TEST_CONTEXT mSha512TestCtx = {SHA512_DIGEST_SIZE, Sha512GetContextSize, Sha512Init, Sha512Update, Sha512Final, Sha512HashAll, Sha512Digest}; + +UNIT_TEST_STATUS +EFIAPI +TestVerifyHashPreReq ( + UNIT_TEST_CONTEXT Context + ) +{ + HASH_TEST_CONTEXT *HashTestContext; + UINTN CtxSize; + + HashTestContext = Context; + CtxSize = HashTestContext->GetContextSize (); + HashTestContext->HashCtx = AllocatePool (CtxSize); + if (HashTestContext->HashCtx == NULL) { + return UNIT_TEST_ERROR_TEST_FAILED; + } + + return UNIT_TEST_PASSED; +} + +VOID +EFIAPI +TestVerifyHashCleanUp ( + UNIT_TEST_CONTEXT Context + ) +{ + HASH_TEST_CONTEXT *HashTestContext; + + HashTestContext = Context; + if (HashTestContext->HashCtx != NULL) { + FreePool (HashTestContext->HashCtx); + } +} + +UNIT_TEST_STATUS +EFIAPI +TestVerifyHash ( + IN UNIT_TEST_CONTEXT Context + ) +{ + UINTN DataSize; + UINT8 Digest[MAX_DIGEST_SIZE]; + BOOLEAN Status; + HASH_TEST_CONTEXT *HashTestContext; + + HashTestContext = Context; + + DataSize = AsciiStrLen (HashData); + + ZeroMem (Digest, MAX_DIGEST_SIZE); + + Status = HashTestContext->HashInit (HashTestContext->HashCtx); + UT_ASSERT_TRUE (Status); + + Status = HashTestContext->HashUpdate (HashTestContext->HashCtx, HashData, DataSize); + UT_ASSERT_TRUE (Status); + + Status = HashTestContext->HashFinal (HashTestContext->HashCtx, Digest); + UT_ASSERT_TRUE (Status); + + UT_ASSERT_MEM_EQUAL (Digest, HashTestContext->Digest, HashTestContext->DigestSize); + + ZeroMem (Digest, MAX_DIGEST_SIZE); + Status = HashTestContext->HashAll (HashData, DataSize, Digest); + UT_ASSERT_TRUE (Status); + + UT_ASSERT_MEM_EQUAL (Digest, HashTestContext->Digest, HashTestContext->DigestSize); + + return UNIT_TEST_PASSED; +} + +TEST_DESC mHashTest[] = { + // + // -----Description----------------Class---------------------Function---------------Pre------------------Post------------Context + // + {"TestVerifyMd5()", "CryptoPkg.BaseCryptLib.Hash", TestVerifyHash, TestVerifyHashPreReq, TestVerifyHashCleanUp, &mMd5TestCtx}, + {"TestVerifySha1()", "CryptoPkg.BaseCryptLib.Hash", TestVerifyHash, TestVerifyHashPreReq, TestVerifyHashCleanUp, &mSha1TestCtx}, + {"TestVerifySha256()", "CryptoPkg.BaseCryptLib.Hash", TestVerifyHash, TestVerifyHashPreReq, TestVerifyHashCleanUp, &mSha256TestCtx}, + {"TestVerifySha384()", "CryptoPkg.BaseCryptLib.Hash", TestVerifyHash, TestVerifyHashPreReq, TestVerifyHashCleanUp, &mSha384TestCtx}, + {"TestVerifySha512()", "CryptoPkg.BaseCryptLib.Hash", TestVerifyHash, TestVerifyHashPreReq, TestVerifyHashCleanUp, &mSha512TestCtx}, +}; + +UINTN mHashTestNum = ARRAY_SIZE(mHashTest); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c new file mode 100644 index 000000000000..2e0cdd7c4570 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c @@ -0,0 +1,184 @@ +/** @file + Application for HMAC Primitives Validation. + +Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR> +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "TestBaseCryptLib.h" + +// +// Max Known Digest Size is SHA512 Output (64 bytes) by far +// +#define MAX_DIGEST_SIZE 64 + +// +// Data string for HMAC validation +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *HmacData = "Hi There"; + +// +// Key value for HMAC-MD5 validation. (From "2. Test Cases for HMAC-MD5" of IETF RFC2202) +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacMd5Key[16] = { + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b + }; + +// +// Result for HMAC-MD5("Hi There"). (From "2. Test Cases for HMAC-MD5" of IETF RFC2202) +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacMd5Digest[] = { + 0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c, 0x13, 0xf4, 0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d + }; + +// +// Key value for HMAC-SHA-1 validation. (From "3. Test Cases for HMAC-SHA-1" of IETF RFC2202) +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha1Key[20] = { + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b + }; + +// +// Result for HMAC-SHA-1 ("Hi There"). (From "3. Test Cases for HMAC-SHA-1" of IETF RFC2202) +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha1Digest[] = { + 0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, 0xe2, 0x8b, 0xc0, 0xb6, 0xfb, 0x37, 0x8c, 0x8e, + 0xf1, 0x46, 0xbe, 0x00 + }; + +// +// Key value for HMAC-SHA-256 validation. (From "4. Test Vectors" of IETF RFC4231) +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha256Key[20] = { + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b + }; + +// +// Result for HMAC-SHA-256 ("Hi There"). (From "4. Test Vectors" of IETF RFC4231) +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha256Digest[] = { + 0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf, 0x0b, 0xf1, 0x2b, + 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9, 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7 + }; + +typedef +VOID* +(EFIAPI *EFI_HMAC_NEW) ( + VOID + ); + +typedef +BOOLEAN +(EFIAPI *EFI_HMAC_INIT) ( + IN OUT VOID *HashContext, + IN CONST UINT8 *Key, + IN UINTN KeySize + ); + +typedef +BOOLEAN +(EFIAPI *EFI_HMAC_UPDATE) ( + IN OUT VOID *HashContext, + IN CONST VOID *Data, + IN UINTN DataSize + ); + +typedef +BOOLEAN +(EFIAPI *EFI_HMAC_FINAL) ( + IN OUT VOID *HashContext, + OUT UINT8 *HashValue + ); + +typedef struct { + UINT32 DigestSize; + EFI_HMAC_NEW HmacNew; + EFI_HMAC_INIT HmacInit; + EFI_HMAC_UPDATE HmacUpdate; + EFI_HMAC_FINAL HmacFinal; + CONST UINT8 *Key; + UINTN KeySize; + CONST UINT8 *Digest; + VOID *HmacCtx; +} HMAC_TEST_CONTEXT; + +// These functions have been deprecated but they've been left commented out for future reference +//HMAC_TEST_CONTEXT mHmacMd5TestCtx = {MD5_DIGEST_SIZE, HmacMd5New, HmacMd5SetKey, HmacMd5Update, HmacMd5Final, HmacMd5Key, sizeof(HmacMd5Key), HmacMd5Digest}; +//HMAC_TEST_CONTEXT mHmacSha1TestCtx = {SHA1_DIGEST_SIZE, HmacSha1New, HmacSha1SetKey, HmacSha1Update, HmacSha1Final, HmacSha1Key, sizeof(HmacSha1Key), HmacSha1Digest}; +HMAC_TEST_CONTEXT mHmacSha256TestCtx = {SHA256_DIGEST_SIZE, HmacSha256New, HmacSha256SetKey, HmacSha256Update, HmacSha256Final, HmacSha256Key, sizeof(HmacSha256Key), HmacSha256Digest}; + + +UNIT_TEST_STATUS +EFIAPI +TestVerifyHmacPreReq ( + UNIT_TEST_CONTEXT Context + ) +{ + HMAC_TEST_CONTEXT *HmacTestContext; + + HmacTestContext = Context; + HmacTestContext->HmacCtx = HmacTestContext->HmacNew(); + if (HmacTestContext->HmacCtx == NULL) { + return UNIT_TEST_ERROR_TEST_FAILED; + } + + return UNIT_TEST_PASSED; +} + +VOID +EFIAPI +TestVerifyHmacCleanUp ( + UNIT_TEST_CONTEXT Context + ) +{ + HMAC_TEST_CONTEXT *HmacTestContext; + + HmacTestContext = Context; + if (HmacTestContext->HmacCtx != NULL) { + FreePool (HmacTestContext->HmacCtx); + } +} + +UNIT_TEST_STATUS +EFIAPI +TestVerifyHmac ( + IN UNIT_TEST_CONTEXT Context + ) +{ + UINT8 Digest[MAX_DIGEST_SIZE]; + BOOLEAN Status; + HMAC_TEST_CONTEXT *HmacTestContext; + + HmacTestContext = Context; + + ZeroMem (Digest, MAX_DIGEST_SIZE); + + Status = HmacTestContext->HmacInit (HmacTestContext->HmacCtx, HmacTestContext->Key, HmacTestContext->KeySize); + UT_ASSERT_TRUE (Status); + + Status = HmacTestContext->HmacUpdate (HmacTestContext->HmacCtx, HmacData, 8); + UT_ASSERT_TRUE (Status); + + Status = HmacTestContext->HmacFinal (HmacTestContext->HmacCtx, Digest); + UT_ASSERT_TRUE (Status); + + UT_ASSERT_MEM_EQUAL (Digest, HmacTestContext->Digest, HmacTestContext->DigestSize); + + return UNIT_TEST_PASSED; +} + +TEST_DESC mHmacTest[] = { + // + // -----Description---------------------Class---------------------Function---------------Pre------------------Post------------Context + // + {"TestVerifyHmacSha256()", "CryptoPkg.BaseCryptLib.Hmac", TestVerifyHmac, TestVerifyHmacPreReq, TestVerifyHmacCleanUp, &mHmacSha256TestCtx}, + // These functions have been deprecated but they've been left commented out for future reference + //{"TestVerifyHmacMd5()", "CryptoPkg.BaseCryptLib.Hmac", TestVerifyHmac, TestVerifyHmacPreReq, TestVerifyHmacCleanUp, &mHmacMd5TestCtx}, + //{"TestVerifyHmacSha1()", "CryptoPkg.BaseCryptLib.Hmac", TestVerifyHmac, TestVerifyHmacPreReq, TestVerifyHmacCleanUp, &mHmacSha1TestCtx}, + +}; + +UINTN mHmacTestNum = ARRAY_SIZE(mHmacTest); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncryptTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncryptTests.c new file mode 100644 index 000000000000..404020f96726 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncryptTests.c @@ -0,0 +1,308 @@ +/** @file + This is a unit test for RSA OAEP encrypt. + + Copyright (c) 2019, Intel Corporation. All rights reserved.<BR> + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include "TestBaseCryptLib.h" + +CONST UINT8 RandSeed[] = "This is the random seed for PRNG verification."; + +// +// Self signed X509 certificate +// CN = ca.self +// O = Intel +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 SelfTestCert[] = { + 0x30, 0x82, 0x03, 0x90, 0x30, 0x82, 0x02, 0x78, 0x02, 0x09, 0x00, 0xE4, 0xDF, 0x47, 0x80, 0xEF, + 0x4B, 0x3C, 0x6D, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, + 0x05, 0x00, 0x30, 0x81, 0x89, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, + 0x43, 0x4E, 0x31, 0x11, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0C, 0x08, 0x53, 0x68, 0x61, + 0x6E, 0x67, 0x48, 0x61, 0x69, 0x31, 0x11, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0C, 0x08, + 0x53, 0x68, 0x61, 0x6E, 0x67, 0x48, 0x61, 0x69, 0x31, 0x0E, 0x30, 0x0C, 0x06, 0x03, 0x55, 0x04, + 0x0A, 0x0C, 0x05, 0x49, 0x6E, 0x74, 0x65, 0x6C, 0x31, 0x0C, 0x30, 0x0A, 0x06, 0x03, 0x55, 0x04, + 0x0B, 0x0C, 0x03, 0x46, 0x49, 0x45, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, + 0x07, 0x63, 0x61, 0x2E, 0x73, 0x65, 0x6C, 0x66, 0x31, 0x24, 0x30, 0x22, 0x06, 0x09, 0x2A, 0x86, + 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x01, 0x16, 0x15, 0x7A, 0x68, 0x69, 0x63, 0x68, 0x61, 0x6F, + 0x2E, 0x67, 0x61, 0x6F, 0x40, 0x69, 0x6E, 0x74, 0x65, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x30, 0x1E, + 0x17, 0x0D, 0x31, 0x39, 0x30, 0x33, 0x32, 0x37, 0x30, 0x35, 0x35, 0x37, 0x30, 0x39, 0x5A, 0x17, + 0x0D, 0x32, 0x30, 0x30, 0x33, 0x32, 0x36, 0x30, 0x35, 0x35, 0x37, 0x30, 0x39, 0x5A, 0x30, 0x81, + 0x89, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4E, 0x31, 0x11, + 0x30, 0x0F, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0C, 0x08, 0x53, 0x68, 0x61, 0x6E, 0x67, 0x48, 0x61, + 0x69, 0x31, 0x11, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0C, 0x08, 0x53, 0x68, 0x61, 0x6E, + 0x67, 0x48, 0x61, 0x69, 0x31, 0x0E, 0x30, 0x0C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x05, 0x49, + 0x6E, 0x74, 0x65, 0x6C, 0x31, 0x0C, 0x30, 0x0A, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x0C, 0x03, 0x46, + 0x49, 0x45, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x07, 0x63, 0x61, 0x2E, + 0x73, 0x65, 0x6C, 0x66, 0x31, 0x24, 0x30, 0x22, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, + 0x01, 0x09, 0x01, 0x16, 0x15, 0x7A, 0x68, 0x69, 0x63, 0x68, 0x61, 0x6F, 0x2E, 0x67, 0x61, 0x6F, + 0x40, 0x69, 0x6E, 0x74, 0x65, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, + 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, + 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0xBC, 0xE4, 0x67, 0xDC, 0xC7, + 0xEA, 0x6F, 0x8A, 0xA7, 0xCC, 0xB2, 0x54, 0x47, 0x48, 0x6A, 0xE2, 0x39, 0xFF, 0xC2, 0x48, 0x58, + 0x34, 0x07, 0x03, 0x6D, 0x39, 0xB3, 0x67, 0x46, 0x4C, 0xBC, 0xA0, 0xFA, 0x4E, 0x64, 0x23, 0x56, + 0x47, 0x7B, 0xC9, 0x1A, 0x2A, 0x55, 0x42, 0x54, 0x10, 0x18, 0x30, 0x92, 0x60, 0x30, 0x5B, 0x9E, + 0xC0, 0x65, 0xD2, 0xD4, 0x05, 0x4A, 0xA6, 0x10, 0x66, 0x04, 0xA9, 0x54, 0x4E, 0xEE, 0x49, 0x39, + 0x43, 0x65, 0x1E, 0x2E, 0x28, 0xDE, 0x79, 0x24, 0xA9, 0x7E, 0xD8, 0x5B, 0xBC, 0x2F, 0x46, 0x6A, + 0xB7, 0xB6, 0x0D, 0x17, 0x88, 0x37, 0x52, 0x5C, 0xFE, 0x93, 0xC0, 0xE2, 0xFD, 0x6A, 0x08, 0x1B, + 0xFB, 0xD1, 0x87, 0xBD, 0xBD, 0x58, 0x57, 0x2C, 0x06, 0x5D, 0xD2, 0x7D, 0x52, 0xE2, 0x49, 0x8E, + 0xDC, 0xE5, 0x26, 0xBD, 0x92, 0x60, 0xB0, 0x3F, 0x58, 0x5E, 0x52, 0xD7, 0x91, 0xDA, 0x93, 0x62, + 0x8D, 0x71, 0x80, 0x53, 0xBA, 0x15, 0xC4, 0x1F, 0xF3, 0xBD, 0xE0, 0xC5, 0xA4, 0xB8, 0xD3, 0x64, + 0x12, 0x14, 0x1B, 0x11, 0x6B, 0x7B, 0xC2, 0x92, 0xC7, 0xE2, 0x94, 0x0B, 0xB8, 0x67, 0x38, 0x48, + 0x63, 0x11, 0x74, 0x25, 0x7C, 0x37, 0xC3, 0xB2, 0xAE, 0xD9, 0xA7, 0x17, 0x9C, 0x4B, 0x9D, 0x6C, + 0x27, 0xB0, 0x87, 0x16, 0x6B, 0xF2, 0x96, 0xE5, 0x1D, 0x37, 0x27, 0xDE, 0xF2, 0x98, 0xB7, 0x81, + 0x08, 0xD9, 0x7A, 0xBA, 0x84, 0x14, 0x61, 0x60, 0x48, 0xCE, 0xCE, 0x51, 0x73, 0xF4, 0xDB, 0xF1, + 0x5F, 0x7A, 0x17, 0x71, 0x4F, 0xC1, 0x0B, 0xCE, 0xC7, 0x31, 0xC1, 0x4E, 0xA3, 0xEE, 0x6F, 0x72, + 0x97, 0x90, 0xFB, 0x8B, 0x54, 0x9F, 0x82, 0x5B, 0x48, 0x5A, 0xF1, 0xAD, 0x8B, 0x3A, 0xCD, 0xCA, + 0xB2, 0x8B, 0x7A, 0x53, 0xD4, 0xF7, 0x71, 0x16, 0x75, 0xA7, 0x35, 0x02, 0x03, 0x01, 0x00, 0x01, + 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x03, + 0x82, 0x01, 0x01, 0x00, 0x78, 0x64, 0xCD, 0x6F, 0xC0, 0xF9, 0xE7, 0xAB, 0x19, 0x0B, 0xA4, 0x92, + 0x88, 0xD7, 0xE3, 0xC4, 0x9C, 0xCF, 0xF2, 0x49, 0xFC, 0xCE, 0x8C, 0xEC, 0x33, 0x3F, 0x24, 0x6F, + 0xF7, 0xBC, 0x7C, 0x28, 0xEF, 0xAE, 0xAB, 0x7B, 0xAF, 0x84, 0xE3, 0x4E, 0x38, 0xAB, 0x66, 0x20, + 0x7C, 0xB9, 0xE0, 0x37, 0xFD, 0x84, 0x28, 0x3C, 0xEE, 0x35, 0xC4, 0x75, 0x04, 0x43, 0xCA, 0x4F, + 0x36, 0x60, 0xC4, 0x06, 0x16, 0x54, 0x3C, 0xF9, 0x47, 0x78, 0xBD, 0xE9, 0x7F, 0xF1, 0xE3, 0x0B, + 0xC7, 0x7E, 0x30, 0xA4, 0xCB, 0x3A, 0xC7, 0xCD, 0x50, 0x9A, 0x6C, 0xC1, 0xE3, 0xF8, 0xF8, 0x16, + 0xAA, 0x67, 0x7F, 0x92, 0xEE, 0x1D, 0x47, 0xF2, 0x96, 0xDF, 0xD7, 0x43, 0x64, 0x78, 0xA7, 0xD9, + 0xF6, 0xA1, 0xD9, 0xEB, 0x5B, 0x2E, 0xC6, 0x9E, 0xEA, 0xD5, 0x04, 0x52, 0xA4, 0x73, 0x97, 0xC8, + 0xB3, 0xFD, 0xE1, 0x7E, 0xB1, 0xA4, 0x3F, 0xF4, 0x56, 0x66, 0x8E, 0x6B, 0xBC, 0xD8, 0xF0, 0x7C, + 0xBF, 0x58, 0xA4, 0xE0, 0x45, 0xDC, 0x2B, 0x0B, 0x2C, 0x40, 0x52, 0x4D, 0x4B, 0xA9, 0x8A, 0x77, + 0x87, 0x31, 0xF8, 0x45, 0xD9, 0x60, 0xBB, 0xAD, 0x28, 0x29, 0x14, 0x0D, 0x0D, 0x8F, 0x0F, 0x34, + 0x76, 0x88, 0xF3, 0x5A, 0x65, 0x00, 0x54, 0x22, 0x35, 0xBF, 0x3A, 0x2B, 0xE9, 0xB0, 0x24, 0xE5, + 0xBE, 0xDF, 0x08, 0xA0, 0x02, 0xB2, 0x81, 0x01, 0xE8, 0x14, 0xBE, 0x6E, 0x7E, 0xBD, 0x60, 0x0C, + 0x4A, 0xD8, 0x57, 0xA4, 0x50, 0xD3, 0xD0, 0x59, 0xCE, 0x57, 0x27, 0xE9, 0xA6, 0x16, 0x15, 0x5F, + 0xF2, 0x6C, 0xCC, 0x57, 0x36, 0x20, 0x06, 0xE6, 0xA7, 0x24, 0x22, 0xB0, 0xB1, 0xC4, 0xBC, 0x2C, + 0x5C, 0xCE, 0x92, 0x11, 0xFF, 0x6F, 0x8C, 0x14, 0x7E, 0xC4, 0x10, 0x02, 0xF6, 0x69, 0x86, 0x6D, + 0x5B, 0x64, 0x81, 0x13, + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 PrivateKey[] = { + 0x30, 0x82, 0x04, 0xA4, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xBC, 0xE4, 0x67, 0xDC, + 0xC7, 0xEA, 0x6F, 0x8A, 0xA7, 0xCC, 0xB2, 0x54, 0x47, 0x48, 0x6A, 0xE2, 0x39, 0xFF, 0xC2, 0x48, + 0x58, 0x34, 0x07, 0x03, 0x6D, 0x39, 0xB3, 0x67, 0x46, 0x4C, 0xBC, 0xA0, 0xFA, 0x4E, 0x64, 0x23, + 0x56, 0x47, 0x7B, 0xC9, 0x1A, 0x2A, 0x55, 0x42, 0x54, 0x10, 0x18, 0x30, 0x92, 0x60, 0x30, 0x5B, + 0x9E, 0xC0, 0x65, 0xD2, 0xD4, 0x05, 0x4A, 0xA6, 0x10, 0x66, 0x04, 0xA9, 0x54, 0x4E, 0xEE, 0x49, + 0x39, 0x43, 0x65, 0x1E, 0x2E, 0x28, 0xDE, 0x79, 0x24, 0xA9, 0x7E, 0xD8, 0x5B, 0xBC, 0x2F, 0x46, + 0x6A, 0xB7, 0xB6, 0x0D, 0x17, 0x88, 0x37, 0x52, 0x5C, 0xFE, 0x93, 0xC0, 0xE2, 0xFD, 0x6A, 0x08, + 0x1B, 0xFB, 0xD1, 0x87, 0xBD, 0xBD, 0x58, 0x57, 0x2C, 0x06, 0x5D, 0xD2, 0x7D, 0x52, 0xE2, 0x49, + 0x8E, 0xDC, 0xE5, 0x26, 0xBD, 0x92, 0x60, 0xB0, 0x3F, 0x58, 0x5E, 0x52, 0xD7, 0x91, 0xDA, 0x93, + 0x62, 0x8D, 0x71, 0x80, 0x53, 0xBA, 0x15, 0xC4, 0x1F, 0xF3, 0xBD, 0xE0, 0xC5, 0xA4, 0xB8, 0xD3, + 0x64, 0x12, 0x14, 0x1B, 0x11, 0x6B, 0x7B, 0xC2, 0x92, 0xC7, 0xE2, 0x94, 0x0B, 0xB8, 0x67, 0x38, + 0x48, 0x63, 0x11, 0x74, 0x25, 0x7C, 0x37, 0xC3, 0xB2, 0xAE, 0xD9, 0xA7, 0x17, 0x9C, 0x4B, 0x9D, + 0x6C, 0x27, 0xB0, 0x87, 0x16, 0x6B, 0xF2, 0x96, 0xE5, 0x1D, 0x37, 0x27, 0xDE, 0xF2, 0x98, 0xB7, + 0x81, 0x08, 0xD9, 0x7A, 0xBA, 0x84, 0x14, 0x61, 0x60, 0x48, 0xCE, 0xCE, 0x51, 0x73, 0xF4, 0xDB, + 0xF1, 0x5F, 0x7A, 0x17, 0x71, 0x4F, 0xC1, 0x0B, 0xCE, 0xC7, 0x31, 0xC1, 0x4E, 0xA3, 0xEE, 0x6F, + 0x72, 0x97, 0x90, 0xFB, 0x8B, 0x54, 0x9F, 0x82, 0x5B, 0x48, 0x5A, 0xF1, 0xAD, 0x8B, 0x3A, 0xCD, + 0xCA, 0xB2, 0x8B, 0x7A, 0x53, 0xD4, 0xF7, 0x71, 0x16, 0x75, 0xA7, 0x35, 0x02, 0x03, 0x01, 0x00, + 0x01, 0x02, 0x82, 0x01, 0x00, 0x13, 0xF7, 0xD1, 0x42, 0xF5, 0x9F, 0x42, 0xCB, 0x55, 0x91, 0xBE, + 0x08, 0x4A, 0xC0, 0xCD, 0x0B, 0xBD, 0x35, 0xDC, 0x43, 0xE9, 0x8F, 0x16, 0x6E, 0xB6, 0x4D, 0x33, + 0x39, 0xE7, 0xA4, 0x95, 0x0C, 0x2F, 0x69, 0xBA, 0x0C, 0x42, 0x42, 0xAC, 0x43, 0x46, 0x10, 0xD3, + 0x92, 0x7F, 0x70, 0x74, 0x1E, 0x2E, 0x5B, 0x1C, 0xC1, 0x92, 0xB6, 0xA4, 0x0C, 0xF5, 0x7C, 0xD9, + 0xB7, 0x54, 0x64, 0x74, 0x79, 0xB1, 0xFF, 0xE6, 0x10, 0xB7, 0x8C, 0xF8, 0x53, 0x88, 0x6D, 0xA9, + 0x97, 0x04, 0xD9, 0x26, 0x1F, 0x99, 0x12, 0xFB, 0xAC, 0x65, 0xFB, 0xA5, 0xB3, 0x1C, 0x99, 0xB9, + 0xBF, 0x6B, 0x35, 0x3E, 0x49, 0x55, 0xB5, 0x94, 0x4F, 0xE7, 0x25, 0x67, 0xB1, 0x01, 0xCD, 0xD2, + 0x58, 0xE4, 0xBE, 0x87, 0x8C, 0x88, 0xD3, 0x0A, 0x38, 0xDC, 0x71, 0x5D, 0x88, 0x0A, 0xE2, 0x3E, + 0x76, 0x63, 0x3B, 0xE4, 0x3C, 0x8F, 0x2F, 0x29, 0x1D, 0xD1, 0x66, 0x8D, 0xC0, 0x4A, 0x68, 0x15, + 0x90, 0x4C, 0x95, 0x61, 0xF4, 0xFD, 0xE8, 0xFA, 0x9C, 0x6C, 0x00, 0x22, 0x23, 0xD5, 0x17, 0x6E, + 0xEE, 0xA8, 0xD8, 0x70, 0xC5, 0x74, 0xEA, 0x09, 0x13, 0x7F, 0x0C, 0x37, 0x4D, 0x50, 0xCD, 0xE9, + 0x16, 0xC2, 0xD5, 0xDE, 0x5E, 0xC3, 0xFC, 0x46, 0x08, 0xF1, 0x99, 0xC0, 0xB4, 0x28, 0xFD, 0x2B, + 0x29, 0xEF, 0x76, 0xD7, 0x04, 0x4F, 0x02, 0x54, 0x16, 0x54, 0x55, 0x20, 0xEC, 0xBC, 0xBF, 0x85, + 0x5F, 0x12, 0xCC, 0xFC, 0x0D, 0xF2, 0xEF, 0xFC, 0x4D, 0x3E, 0xA2, 0x5E, 0x97, 0xFE, 0x35, 0x10, + 0x0F, 0x53, 0x1F, 0x80, 0xD5, 0xC0, 0xB4, 0xE9, 0xE9, 0x31, 0x4C, 0x89, 0x14, 0x72, 0x39, 0x65, + 0x89, 0xEF, 0x7A, 0x51, 0x4A, 0xB9, 0xA9, 0xCC, 0x1B, 0x52, 0xB0, 0x02, 0x52, 0x65, 0x2F, 0x0B, + 0x89, 0x41, 0x70, 0x1E, 0x01, 0x02, 0x81, 0x81, 0x00, 0xDB, 0xE8, 0x21, 0x9E, 0xDB, 0x58, 0x42, + 0x0B, 0x02, 0x35, 0x87, 0xDF, 0x35, 0xF4, 0xC1, 0xEE, 0xD5, 0x72, 0x2C, 0xDC, 0x4D, 0xC7, 0xDA, + 0x6D, 0x18, 0x0F, 0x68, 0x6F, 0xE7, 0xB0, 0x6C, 0xA0, 0xB2, 0x9E, 0xB8, 0x5E, 0x4A, 0x86, 0x81, + 0x97, 0xBD, 0x78, 0xFC, 0x06, 0xD5, 0xBE, 0x98, 0x42, 0x38, 0x78, 0x78, 0x16, 0xAE, 0x39, 0x56, + 0xFB, 0x67, 0x6B, 0xED, 0x7F, 0xB3, 0xC3, 0x7D, 0x95, 0x86, 0x05, 0x0C, 0xF1, 0x4C, 0xC2, 0x67, + 0x94, 0x93, 0x1B, 0xB7, 0x91, 0x0A, 0x80, 0xE2, 0x85, 0xA7, 0x75, 0x20, 0x61, 0xCD, 0x40, 0x5B, + 0x39, 0x13, 0x32, 0xF7, 0xB8, 0xD7, 0x0C, 0x39, 0x4C, 0x82, 0x4B, 0xA3, 0x9F, 0x5E, 0xB1, 0xB0, + 0x38, 0x81, 0x8B, 0x1E, 0xBD, 0x2B, 0xC2, 0x9F, 0x3A, 0x68, 0x72, 0xC2, 0x90, 0xCB, 0xA2, 0xE2, + 0xAC, 0x86, 0xFF, 0xC8, 0xD7, 0xB8, 0x97, 0x0E, 0x69, 0x02, 0x81, 0x81, 0x00, 0xDB, 0xE5, 0x21, + 0x1F, 0x4C, 0x83, 0xD9, 0x7A, 0x56, 0x87, 0x82, 0xF1, 0x40, 0x1A, 0xD3, 0x5B, 0xC5, 0xB4, 0x4D, + 0x18, 0x8A, 0xE3, 0x6B, 0xC9, 0x7E, 0x8F, 0x5D, 0x00, 0x33, 0x66, 0xEB, 0xAE, 0x8E, 0x54, 0x49, + 0xD7, 0xEA, 0xF3, 0xF9, 0xED, 0xD7, 0xEE, 0x2C, 0xC8, 0xD6, 0x8F, 0x40, 0x0A, 0x53, 0xCB, 0x5D, + 0x16, 0xB7, 0xEB, 0x4E, 0xFB, 0x11, 0x18, 0x1B, 0x4B, 0x6B, 0x43, 0x04, 0xD6, 0x1D, 0x8F, 0x6D, + 0x4D, 0x48, 0x8B, 0x6C, 0x82, 0x52, 0xB4, 0x8D, 0x58, 0x9B, 0x19, 0x8D, 0xE0, 0x0D, 0xFD, 0x15, + 0x9D, 0x35, 0xDF, 0x5E, 0xED, 0xDB, 0x8F, 0x8C, 0x44, 0x11, 0xC9, 0x9A, 0xD9, 0x3F, 0xD4, 0xA5, + 0xEE, 0x68, 0x3B, 0x38, 0xD1, 0x66, 0xB0, 0x62, 0x7E, 0xA5, 0x04, 0xD1, 0x67, 0xA4, 0x1D, 0x93, + 0xD6, 0x2A, 0xFB, 0xF6, 0xC1, 0xB2, 0xC4, 0x02, 0x8A, 0xB2, 0xA8, 0xD0, 0xED, 0x02, 0x81, 0x81, + 0x00, 0xD1, 0x1D, 0x98, 0x43, 0x09, 0x10, 0x8F, 0x95, 0x0A, 0x5F, 0xBF, 0x3A, 0x1A, 0x84, 0x0A, + 0x9B, 0x44, 0x6C, 0x53, 0x8E, 0x97, 0x84, 0x72, 0x08, 0x85, 0xF5, 0xB8, 0xF9, 0x99, 0x58, 0x22, + 0xA4, 0x59, 0xD7, 0x27, 0x39, 0xBB, 0x22, 0xD7, 0x3F, 0x65, 0x95, 0x14, 0x0C, 0xA7, 0xDB, 0x9B, + 0xCC, 0x75, 0x08, 0xD2, 0x21, 0xB7, 0x41, 0x9D, 0x9E, 0x6A, 0x85, 0xAE, 0x8E, 0x5E, 0x72, 0x8B, + 0x0C, 0xD2, 0x2A, 0x21, 0x59, 0xA1, 0x05, 0xC9, 0x1B, 0xF7, 0x1C, 0x47, 0x5E, 0x6C, 0x9F, 0x8D, + 0x49, 0x4D, 0xA9, 0xCA, 0xC6, 0x56, 0x39, 0x59, 0xC6, 0x17, 0xA4, 0xC2, 0xFF, 0x09, 0xB8, 0x7D, + 0x10, 0x6D, 0x62, 0xE2, 0x50, 0x9D, 0xEA, 0xD8, 0xC9, 0x93, 0x1E, 0xA9, 0x77, 0x78, 0x92, 0x95, + 0x7A, 0x24, 0x72, 0xE4, 0xE4, 0x6E, 0x51, 0x11, 0xBE, 0xC0, 0x8D, 0xA1, 0xFE, 0xC9, 0x71, 0x13, + 0xE9, 0x02, 0x81, 0x80, 0x38, 0xE5, 0x3F, 0x3D, 0xB6, 0xF1, 0x82, 0x8A, 0xD9, 0xEA, 0xB4, 0x21, + 0xB1, 0xE1, 0x7F, 0x00, 0x86, 0xD6, 0x11, 0x00, 0xA1, 0xA7, 0x18, 0x53, 0x89, 0x50, 0x94, 0xD2, + 0xA1, 0x7A, 0x26, 0xCF, 0x02, 0x7A, 0xA2, 0xA4, 0xA0, 0x61, 0x42, 0x30, 0x9D, 0x27, 0x3E, 0x25, + 0x35, 0x06, 0xD9, 0x9E, 0x12, 0x72, 0x53, 0x02, 0xB6, 0xD1, 0xC6, 0x9C, 0xC5, 0x9E, 0x84, 0x29, + 0x6E, 0x76, 0x67, 0xC0, 0xF2, 0xE3, 0x12, 0x77, 0xE5, 0xA6, 0x55, 0x8C, 0x1E, 0xD4, 0x22, 0xA2, + 0x63, 0x77, 0x28, 0x33, 0x69, 0xCB, 0x2B, 0x15, 0x83, 0x43, 0xE9, 0x6F, 0x07, 0xD9, 0x4B, 0x84, + 0xAD, 0x49, 0x89, 0xAC, 0x5E, 0x8C, 0xA9, 0xE6, 0x56, 0xC7, 0xC3, 0xFA, 0xC2, 0x64, 0x2F, 0x07, + 0xEF, 0xB0, 0xA0, 0x71, 0xFD, 0x8F, 0xBD, 0x99, 0xB3, 0x83, 0x80, 0x24, 0x3C, 0x19, 0xE5, 0x42, + 0x77, 0xD9, 0xA0, 0x3D, 0x02, 0x81, 0x81, 0x00, 0xB7, 0x35, 0xE9, 0x66, 0x4A, 0xCD, 0x5F, 0x5C, + 0x44, 0x9A, 0x7F, 0x23, 0xAE, 0xC2, 0x7F, 0xF0, 0x8D, 0xE4, 0xDB, 0xCD, 0x1A, 0x8A, 0x40, 0xD7, + 0x0A, 0xC4, 0x3E, 0xC5, 0x03, 0xFB, 0x47, 0xAB, 0x72, 0xDF, 0xD7, 0x68, 0x27, 0x6E, 0x86, 0x94, + 0x2A, 0x2A, 0xDA, 0x25, 0x9E, 0xF6, 0x5E, 0xE0, 0x6D, 0x7C, 0x7D, 0xFE, 0x72, 0xDD, 0xC7, 0xBC, + 0x74, 0xC7, 0xAD, 0xEA, 0x44, 0xBE, 0x5C, 0x8A, 0x03, 0xCD, 0x35, 0x74, 0x6F, 0x4E, 0x92, 0x31, + 0xBE, 0x57, 0x9A, 0x02, 0x0C, 0xFC, 0xD1, 0xD5, 0xE7, 0x3E, 0x53, 0x0C, 0x47, 0x12, 0x39, 0x45, + 0x6E, 0x35, 0x24, 0xA6, 0xDA, 0x42, 0x63, 0xC6, 0xBF, 0xCA, 0xE8, 0x32, 0xFD, 0x61, 0xC0, 0x80, + 0x39, 0xD2, 0xB7, 0x0D, 0xF3, 0xA2, 0xF3, 0xE4, 0x49, 0x26, 0x89, 0xD0, 0xA0, 0x24, 0xC8, 0x27, + 0x86, 0x10, 0x09, 0x88, 0x6C, 0x35, 0x60, 0xF2, + }; + +UNIT_TEST_STATUS +EFIAPI +TestVerifyOaepEncrypt ( + IN UNIT_TEST_CONTEXT Context + ) +{ + BOOLEAN Status; + UINT8 File[4]; + UINT8 *OutBuffer; + UINTN OutBufferSize; + UINT8 *OutBuffer2; + UINTN OutBuffer2Size; + + // Create a file and add content '123' in it + File[0] = '1'; + File[1] = '2'; + File[2] = '3'; + File[3] = 0; + + OutBuffer = NULL; + OutBufferSize = 0; + OutBuffer2 = NULL; + OutBuffer2Size = 0; + + Status = Pkcs1v2Encrypt ( + SelfTestCert, + (UINTN)sizeof (SelfTestCert), + File, + (UINTN)sizeof (File), + NULL, + 0, + &OutBuffer, + (UINTN *)&OutBufferSize + ); + UT_ASSERT_TRUE (Status); + + Status = Pkcs1v2Encrypt ( + SelfTestCert, + (UINTN)sizeof (SelfTestCert), + File, + (UINTN)4, + NULL, + 0, + &OutBuffer2, + (UINTN *)&OutBuffer2Size + ); + UT_ASSERT_TRUE (Status); + + // TRUE - the two OutBuffers are indentical. That means the Oaep encrypt result is incorrect. + Status = (CompareMem (OutBuffer, OutBuffer2, OutBufferSize >= OutBuffer2Size ? OutBufferSize : OutBuffer2Size) == 0); + UT_ASSERT_FALSE (Status); + + if (OutBuffer) { + FreePool (OutBuffer); + OutBuffer = NULL; + OutBufferSize = 0; + } + + if (OutBuffer2) { + FreePool (OutBuffer2); + OutBuffer2 = NULL; + OutBuffer2Size = 0; + } + + Status = Pkcs1v2Encrypt ( + SelfTestCert, + (UINTN)sizeof (SelfTestCert), + File, + (UINTN)4, + RandSeed, + (UINTN)sizeof (RandSeed), + &OutBuffer, + (UINTN *)&OutBufferSize + ); + UT_ASSERT_TRUE (Status); + + Status = Pkcs1v2Encrypt ( + SelfTestCert, + (UINTN)sizeof (SelfTestCert), + File, + (UINTN)4, + RandSeed, + (UINTN)sizeof (RandSeed), + &OutBuffer2, + (UINTN *)&OutBuffer2Size + ); + UT_ASSERT_TRUE (Status); + + // TRUE - the two OutBuffers are indentical. That means the Oaep encrypt result is incorrect. + Status = (CompareMem (OutBuffer, OutBuffer2, OutBufferSize >= OutBuffer2Size ? OutBufferSize : OutBuffer2Size) == 0); + UT_ASSERT_FALSE (Status); + + if (OutBuffer) { + FreePool (OutBuffer); + OutBuffer = NULL; + OutBufferSize = 0; + } + + if (OutBuffer2) { + FreePool (OutBuffer2); + OutBuffer2 = NULL; + OutBuffer2Size = 0; + } + + Status = Pkcs1v2Encrypt ( + NULL, + (UINTN)sizeof (SelfTestCert), + File, + (UINTN)4, + NULL, + 0, + &OutBuffer, + (UINTN *)&OutBufferSize + ); + UT_ASSERT_FALSE (Status); + + Status = Pkcs1v2Encrypt ( + SelfTestCert, + (UINTN)sizeof (SelfTestCert), + File, + (UINTN)4, + NULL, + 0, + (UINT8 **)NULL, + (UINTN *)&OutBufferSize + ); + UT_ASSERT_FALSE (Status); + + Status = Pkcs1v2Encrypt ( + SelfTestCert, + (UINTN)sizeof (SelfTestCert), + File, + (UINTN)4, + NULL, + 0, + &OutBuffer, + (UINTN *)NULL + ); + UT_ASSERT_FALSE (Status); + + return UNIT_TEST_PASSED; +} + +TEST_DESC mOaepTest[] = { + // + // -----Description--------------------------------------Class----------------------Function-----------------Pre---Post--Context + // + {"TestVerifyOaepEncrypt()", "CryptoPkg.BaseCryptLib.Pkcs1v2Encrypt", TestVerifyOaepEncrypt, NULL, NULL, NULL}, +}; + +UINTN mOaepTestNum = ARRAY_SIZE(mOaepTest); + + diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkdf2Tests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkdf2Tests.c new file mode 100644 index 000000000000..b64248aa5619 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkdf2Tests.c @@ -0,0 +1,71 @@ +/** @file + Application for PKCS#5 PBKDF2 Function Validation. + +Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "TestBaseCryptLib.h" + +// +// PBKDF2 HMAC-SHA1 Test Vector from RFC6070 +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *Password = "password"; // Input Password +GLOBAL_REMOVE_IF_UNREFERENCED UINTN PassLen = 8; // Length of Input Password +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *Salt = "salt"; // Input Salt +GLOBAL_REMOVE_IF_UNREFERENCED UINTN SaltLen = 4; // Length of Input Salt +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINTN Count = 2; // InterationCount +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINTN KeyLen = 20; // Length of derived key +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 DerivedKey[] = { // Expected output key + 0xea, 0x6c, 0x01, 0x4d, 0xc7, 0x2d, 0x6f, 0x8c, 0xcd, 0x1e, 0xd9, 0x2a, 0xce, 0x1d, 0x41, 0xf0, + 0xd8, 0xde, 0x89, 0x57 + }; + +UNIT_TEST_STATUS +EFIAPI +TestVerifyPkcs5Pbkdf2 ( + IN UNIT_TEST_CONTEXT Context + ) +{ + BOOLEAN Status; + UINT8 *OutKey; + + OutKey = AllocatePool (KeyLen); + + // + // Verify PKCS#5 PBKDF2 Key Derivation Function + // + Status = Pkcs5HashPassword ( + PassLen, + Password, + SaltLen, + (CONST UINT8 *)Salt, + Count, + SHA1_DIGEST_SIZE, + KeyLen, + OutKey + ); + UT_ASSERT_TRUE (Status); + + // + // Check the output key with the expected key result + // + UT_ASSERT_MEM_EQUAL (OutKey, DerivedKey, KeyLen); + + // + // Release Resources + // + FreePool (OutKey); + + return EFI_SUCCESS; +} + +TEST_DESC mPkcs5Test[] = { + // + // -----Description------------------------------Class----------------------Function-----------------Pre---Post--Context + // + {"TestVerifyPkcs5Pbkdf2()", "CryptoPkg.BaseCryptLib.Pkcs5", TestVerifyPkcs5Pbkdf2, NULL, NULL, NULL}, +}; + +UINTN mPkcs5TestNum = ARRAY_SIZE(mPkcs5Test); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTests.c new file mode 100644 index 000000000000..b5ae4f6a89e0 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTests.c @@ -0,0 +1,524 @@ +/** @file -- Pkcs7EkuVerify.c + * Copyright (c) Microsoft Corporation. + * SPDX-License-Identifier: BSD-2-Clause-Patent + + This is an test code which verifies specified + Enhanced Key Usages (EKU)'s are present in the leaf signer + of a PKCS7 formatted signature. + + + A typical signing certificate chain looks like this: (Could be RSA or ECC). + + ------------------------------------------ + | | // Root of trust. ECDSA P521 curve + | TestEKUParsingRoot | // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE + | | // CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE + ------------------------------------------ + ^ + | + ------------------------------------------ + | | // Policy CA. Issues subordinate CAs. ECC P384 curve. + | TestEKUParsingPolicyCA | // SHA 256 Key Usage: + | | // CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE + ------------------------------------------ + ^ + | + ------------------------------------------ + | | // Issues end-entity (leaf) signers. ECC P256 curve. + | TestEKUParsingIssuingCA | // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE + | | // Enhanced Key Usage: + ------------------------------------------ // 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing) + ^ + | + -------------------------------------- + / TestEKUParsingLeafSigner && / // Leaf signer, ECC P256 curve. + / TestEKUParsingLeafSignerPid12345 / // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE + / / // Enhanced Key usages: + -------------------------------------- // 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing) + // 1.3.6.1.4.1.311.76.9.21.1.N, N == Product ID. + + + + + +**/ + +#include "TestBaseCryptLib.h" + +#include "Pkcs7EkuTestSignatures.h" + +EFI_STATUS +EFIAPI +VerifyEKUsInPkcs7Signature ( + IN CONST UINT8 *Pkcs7Signature, + IN CONST UINT32 SignatureSize, + IN CONST CHAR8 *RequiredEKUs[], + IN CONST UINT32 RequiredEKUsSize, + IN BOOLEAN RequireAllPresent + ); + +///================================================================================================ +///================================================================================================ +/// +/// TEST CASES +/// +///================================================================================================ +///================================================================================================ + +CONST CHAR8 FIRMWARE_SIGNER_EKU[] = "1.3.6.1.4.1.311.76.9.21.1"; + + +/** + TestVerifyEKUsInSignature() + + Verify that "1.3.6.1.4.1.311.76.9.21.1" (Firmware signature) is in the + leaf signer certificate. + + + @param[in] Framework - Unit-test framework handle. + @param[in] Context - Optional context pointer for this test. + + @retval UNIT_TEST_PASSED - The required EKUs were found in the signature. + @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output. +**/ +static +UNIT_TEST_STATUS +EFIAPI +TestVerifyEKUsInSignature ( + IN UNIT_TEST_CONTEXT Context + ) +{ + EFI_STATUS Status = EFI_SUCCESS; + + CONST CHAR8* RequiredEKUs[] = { FIRMWARE_SIGNER_EKU }; + + Status = VerifyEKUsInPkcs7Signature(ProductionECCSignature, + ARRAY_SIZE(ProductionECCSignature), + (CONST CHAR8**)RequiredEKUs, + ARRAY_SIZE(RequiredEKUs), + TRUE); + UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS); + + return UNIT_TEST_PASSED; +}// TestVerifyEKUsInSignature() + + +/** + TestVerifyEKUsWith3CertsInSignature() + + This PKCS7 signature has 3 certificates in it. (Policy CA, Issuing CA + and leaf signer). It has one firmware signing EKU in it. + "1.3.6.1.4.1.311.76.9.21.1" + + @param[in] Framework - Unit-test framework handle. + @param[in] Context - Optional context pointer for this test. + + @retval UNIT_TEST_PASSED - The required EKUs were found in the signature. + @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output. +**/ +static +UNIT_TEST_STATUS +EFIAPI +TestVerifyEKUsWith3CertsInSignature ( + IN UNIT_TEST_CONTEXT Context + ) +{ + EFI_STATUS Status = EFI_SUCCESS; + + CONST CHAR8* RequiredEKUs[] = { FIRMWARE_SIGNER_EKU }; + + Status = VerifyEKUsInPkcs7Signature(TestSignEKUsWith3CertsInSignature, + ARRAY_SIZE(TestSignEKUsWith3CertsInSignature), + (CONST CHAR8**)RequiredEKUs, + ARRAY_SIZE(RequiredEKUs), + TRUE); + UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS); + + return UNIT_TEST_PASSED; +}// TestVerifyEKUsWith3CertsInSignature() + +/** + TestVerifyEKUsWith2CertsInSignature() + + This PKCS7 signature has 2 certificates in it. (Issuing CA and leaf signer). + It has one firmware signing EKU in it. "1.3.6.1.4.1.311.76.9.21.1" + + @param[in] Framework - Unit-test framework handle. + @param[in] Context - Optional context pointer for this test. + + @retval UNIT_TEST_PASSED - The required EKUs were found in the signature. + @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output. +**/ +static +UNIT_TEST_STATUS +EFIAPI +TestVerifyEKUsWith2CertsInSignature ( + IN UNIT_TEST_CONTEXT Context + ) +{ + EFI_STATUS Status = EFI_SUCCESS; + + CONST CHAR8* RequiredEKUs[] = { FIRMWARE_SIGNER_EKU }; + + Status = VerifyEKUsInPkcs7Signature(TestSignEKUsWith2CertsInSignature, + ARRAY_SIZE(TestSignEKUsWith2CertsInSignature), + (CONST CHAR8**)RequiredEKUs, + ARRAY_SIZE(RequiredEKUs), + TRUE); + UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS); + + return UNIT_TEST_PASSED; +}// TestVerifyEKUsWith2CertsInSignature() + + +/** + TestVerifyEKUsWith1CertInSignature() + + This PKCS7 signature only has the leaf signer in it. + It has one firmware signing EKU in it. "1.3.6.1.4.1.311.76.9.21.1" + + @param[in] Framework - Unit-test framework handle. + @param[in] Context - Optional context pointer for this test. + + @retval UNIT_TEST_PASSED - The required EKUs were found in the signature. + @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output. +**/ +static +UNIT_TEST_STATUS +EFIAPI +TestVerifyEKUsWith1CertInSignature ( + IN UNIT_TEST_CONTEXT Context + ) +{ + EFI_STATUS Status = EFI_SUCCESS; + + CONST CHAR8* RequiredEKUs[] = { FIRMWARE_SIGNER_EKU }; + + Status = VerifyEKUsInPkcs7Signature(TestSignEKUsWith1CertInSignature, + ARRAY_SIZE(TestSignEKUsWith1CertInSignature), + (CONST CHAR8**)RequiredEKUs, + ARRAY_SIZE(RequiredEKUs), + TRUE); + UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS); + + return UNIT_TEST_PASSED; +}// TestVerifyEKUsWith1CertInSignature() + + +/** + TestVerifyEKUsWithMultipleEKUsInCert() + + + This signature has two EKU's in it: + "1.3.6.1.4.1.311.76.9.21.1" + "1.3.6.1.4.1.311.76.9.21.2" + We verify that both EKU's were present in the leaf signer. + + @param[in] Framework - Unit-test framework handle. + @param[in] Context - Optional context pointer for this test. + + @retval UNIT_TEST_PASSED - The required EKUs were found in the signature. + @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output. +**/ +static +UNIT_TEST_STATUS +EFIAPI +TestVerifyEKUsWithMultipleEKUsInCert ( + IN UNIT_TEST_CONTEXT Context + ) +{ + EFI_STATUS Status = EFI_SUCCESS; + + CONST CHAR8* RequiredEKUs[] = { "1.3.6.1.4.1.311.76.9.21.1", + "1.3.6.1.4.1.311.76.9.21.1.2" }; + + Status = VerifyEKUsInPkcs7Signature(TestSignedWithMultipleEKUsInCert, + ARRAY_SIZE(TestSignedWithMultipleEKUsInCert), + (CONST CHAR8**)RequiredEKUs, + ARRAY_SIZE(RequiredEKUs), + TRUE); + UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS); + + return UNIT_TEST_PASSED; +}// TestVerifyEKUsWithMultipleEKUsInCert() + + +/** + TestEkusNotPresentInSignature() + + This test verifies that if we send an EKU that is not in the signature, + that we get back an error. + + @param[in] Framework - Unit-test framework handle. + @param[in] Context - Optional context pointer for this test. + + @retval UNIT_TEST_PASSED - The required EKUs were found in the signature. + @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output. +**/ +static +UNIT_TEST_STATUS +EFIAPI +TestEkusNotPresentInSignature ( + IN UNIT_TEST_CONTEXT Context + ) +{ + EFI_STATUS Status = EFI_SUCCESS; + + // + // This EKU is not in the signature. + // + CONST CHAR8* RequiredEKUs[] = { "1.3.6.1.4.1.311.76.9.21.3" }; + + Status = VerifyEKUsInPkcs7Signature(TestSignedWithMultipleEKUsInCert, + ARRAY_SIZE(TestSignedWithMultipleEKUsInCert), + (CONST CHAR8**)RequiredEKUs, + ARRAY_SIZE(RequiredEKUs), + TRUE); + UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS); + + return UNIT_TEST_PASSED; +}// TestEkusNotPresentInSignature() + +/** + TestEkusNotPresentInSignature() + + This test signature has two EKU's in it: (Product ID is 10001) + "1.3.6.1.4.1.311.76.9.21.1" + "1.3.6.1.4.1.311.76.9.21.1.10001" + + @param[in] Framework - Unit-test framework handle. + @param[in] Context - Optional context pointer for this test. + + @retval UNIT_TEST_PASSED - The required EKUs were found in the signature. + @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output. +**/ + +static +UNIT_TEST_STATUS +EFIAPI +TestProductId10001PresentInSignature( + IN UNIT_TEST_CONTEXT Context +) +{ + EFI_STATUS Status = EFI_SUCCESS; + + // + // These EKU's are present in the leaf signer certificate. + // + CONST CHAR8* RequiredEKUs[] = { "1.3.6.1.4.1.311.76.9.21.1", + "1.3.6.1.4.1.311.76.9.21.1.10001" }; + + Status = VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001, + ARRAY_SIZE(TestSignedWithProductId10001), + (CONST CHAR8**)RequiredEKUs, + ARRAY_SIZE(RequiredEKUs), + TRUE); + UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS); + + return UNIT_TEST_PASSED; +}// TestProductId10001PresentInSignature() + + +/** + TestOnlyOneEkuInListRequired() + + This test will check the BOOLEAN RequireAllPresent parameter in the + call to VerifyEKUsInPkcs7Signature() behaves properly. The signature + has two EKU's in it: + + "1.3.6.1.4.1.311.76.9.21.1" + "1.3.6.1.4.1.311.76.9.21.1.10001" + + but we only pass in one of them, and set RequireAllPresent to FALSE. + + @param[in] Framework - Unit-test framework handle. + @param[in] Context - Optional context pointer for this test. + + @retval UNIT_TEST_PASSED - The required EKUs were found in the signature. + @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output. +**/ + +static +UNIT_TEST_STATUS +EFIAPI +TestOnlyOneEkuInListRequired( + IN UNIT_TEST_CONTEXT Context +) +{ + EFI_STATUS Status = EFI_SUCCESS; + + // + // This will test the flag that specifies it is OK to succeed if + // any one of the EKU's passed in is found. + // + CONST CHAR8* RequiredEKUs[] = { "1.3.6.1.4.1.311.76.9.21.1.10001" }; + + Status = VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001, + ARRAY_SIZE(TestSignedWithProductId10001), + (CONST CHAR8**)RequiredEKUs, + ARRAY_SIZE(RequiredEKUs), + FALSE); + UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS); + + return UNIT_TEST_PASSED; +}// TestOnlyOneEkuInListRequired() + +/** + TestNoEKUsInSignature() + + This test uses a signature that was signed with a certificate that does + not contain any EKUs. + + + @param[in] Framework - Unit-test framework handle. + @param[in] Context - Optional context pointer for this test. + + @retval UNIT_TEST_PASSED - The required EKUs were found in the signature. + @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output. +**/ + +static +UNIT_TEST_STATUS +EFIAPI +TestNoEKUsInSignature( + IN UNIT_TEST_CONTEXT Context +) +{ + EFI_STATUS Status = EFI_SUCCESS; + + // + // This EKU is not in the certificate, so it should fail. + // + CONST CHAR8* RequiredEKUs[] = { "1.3.6.1.4.1.311.76.9.21.1" }; + + Status = VerifyEKUsInPkcs7Signature(TestSignatureWithNoEKUsPresent, + ARRAY_SIZE(TestSignatureWithNoEKUsPresent), + (CONST CHAR8**)RequiredEKUs, + ARRAY_SIZE(RequiredEKUs), + TRUE); + UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS); + + return UNIT_TEST_PASSED; +}// TestNoEKUsInSignature() + + +/** + TestInvalidParameters() + + Passes the API invalid parameters, and ensures that it does not succeed. + + @param[in] Framework - Unit-test framework handle. + @param[in] Context - Optional context pointer for this test. + + @retval UNIT_TEST_PASSED - The required EKUs were found in the signature. + @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output. +**/ +static +UNIT_TEST_STATUS +EFIAPI +TestInvalidParameters( + IN UNIT_TEST_CONTEXT Context +) +{ + EFI_STATUS Status = EFI_SUCCESS; + + CONST CHAR8* RequiredEKUs[] = { "1.3.6.1.4.1.311.76.9.21.1" }; + + // + // Check bad signature. + // + Status = VerifyEKUsInPkcs7Signature(NULL, + 0, + (CONST CHAR8**)RequiredEKUs, + ARRAY_SIZE(RequiredEKUs), + TRUE); + UT_ASSERT_STATUS_EQUAL (Status, EFI_INVALID_PARAMETER); + + // + // Check invalid EKU's + // + Status = VerifyEKUsInPkcs7Signature(TestSignatureWithNoEKUsPresent, + ARRAY_SIZE(TestSignatureWithNoEKUsPresent), + (CONST CHAR8**)NULL, + 0, + TRUE); + UT_ASSERT_STATUS_EQUAL (Status, EFI_INVALID_PARAMETER); + + return UNIT_TEST_PASSED; +}// TestInvalidParameters() + + +/** + TestEKUSubStringFails() + + Pass the API a sub set and super set of an EKU and ensure that they + don't pass. + + @param[in] Framework - Unit-test framework handle. + @param[in] Context - Optional context pointer for this test. + + @retval UNIT_TEST_PASSED - The required EKUs were found in the signature. + @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output. +**/ +static +UNIT_TEST_STATUS +EFIAPI +TestEKUSubsetSupersetFails( + IN UNIT_TEST_CONTEXT Context +) +{ + EFI_STATUS Status = EFI_SUCCESS; + + // + // This signature has an EKU of: + // "1.3.6.1.4.1.311.76.9.21.1.10001" + // so ensure that + // "1.3.6.1.4.1.311.76.9.21" + // does not pass. + // + CONST CHAR8* RequiredEKUs1[] = { "1.3.6.1.4.1.311.76.9.21" }; + + Status = VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001, + ARRAY_SIZE(TestSignedWithProductId10001), + (CONST CHAR8**)RequiredEKUs1, + ARRAY_SIZE(RequiredEKUs1), + TRUE); + UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS); + + // + // This signature has an EKU of: + // "1.3.6.1.4.1.311.76.9.21.1.10001" + // so ensure that a super set + // "1.3.6.1.4.1.311.76.9.21.1.10001.1" + // does not pass. + // + CONST CHAR8* RequiredEKUs2[] = { "1.3.6.1.4.1.311.76.9.21.1.10001.1" }; + + Status = VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001, + ARRAY_SIZE(TestSignedWithProductId10001), + (CONST CHAR8**)RequiredEKUs2, + ARRAY_SIZE(RequiredEKUs2), + TRUE); + UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS); + + return UNIT_TEST_PASSED; +}// TestEKUSubsetSupersetFails() + +TEST_DESC mPkcs7EkuTest[] = { + // + // -----Description--------------------------------Class----------------------------Function------------------------------Pre---Post--Context + // + {"TestVerifyEKUsInSignature()", "CryptoPkg.BaseCryptLib.Eku", TestVerifyEKUsInSignature, NULL, NULL, NULL}, + {"TestVerifyEKUsWith3CertsInSignature()", "CryptoPkg.BaseCryptLib.Eku", TestVerifyEKUsWith3CertsInSignature, NULL, NULL, NULL}, + {"TestVerifyEKUsWith2CertsInSignature()", "CryptoPkg.BaseCryptLib.Eku", TestVerifyEKUsWith2CertsInSignature, NULL, NULL, NULL}, + {"TestVerifyEKUsWith1CertInSignature()", "CryptoPkg.BaseCryptLib.Eku", TestVerifyEKUsWith1CertInSignature, NULL, NULL, NULL}, + {"TestVerifyEKUsWithMultipleEKUsInCert()", "CryptoPkg.BaseCryptLib.Eku", TestVerifyEKUsWithMultipleEKUsInCert, NULL, NULL, NULL}, + {"TestEkusNotPresentInSignature()", "CryptoPkg.BaseCryptLib.Eku", TestEkusNotPresentInSignature, NULL, NULL, NULL}, + {"TestProductId10001PresentInSignature()", "CryptoPkg.BaseCryptLib.Eku", TestProductId10001PresentInSignature, NULL, NULL, NULL}, + {"TestOnlyOneEkuInListRequired()", "CryptoPkg.BaseCryptLib.Eku", TestOnlyOneEkuInListRequired, NULL, NULL, NULL}, + {"TestNoEKUsInSignature()", "CryptoPkg.BaseCryptLib.Eku", TestNoEKUsInSignature, NULL, NULL, NULL}, + {"TestInvalidParameters()", "CryptoPkg.BaseCryptLib.Eku", TestInvalidParameters, NULL, NULL, NULL}, + {"TestEKUSubsetSupersetFails()", "CryptoPkg.BaseCryptLib.Eku", TestEKUSubsetSupersetFails, NULL, NULL, NULL}, +}; + +UINTN mPkcs7EkuTestNum = ARRAY_SIZE(mPkcs7EkuTest); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests.c new file mode 100644 index 000000000000..cc6b2ca46ba1 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests.c @@ -0,0 +1,51 @@ +/** @file + Application for Pseudorandom Number Generator Validation. + +Copyright (c) 2010, Intel Corporation. All rights reserved.<BR> +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "TestBaseCryptLib.h" + +#define RANDOM_NUMBER_SIZE 256 + +CONST UINT8 SeedString[] = "This is the random seed for PRNG verification."; + +UINT8 PreviousRandomBuffer[RANDOM_NUMBER_SIZE] = { 0x0 }; + +UINT8 RandomBuffer[RANDOM_NUMBER_SIZE] = { 0x0 }; + +UNIT_TEST_STATUS +EFIAPI +TestVerifyPrngGeneration ( + UNIT_TEST_CONTEXT Context + ) +{ + UINTN Index; + BOOLEAN Status; + + Status = RandomSeed (SeedString, sizeof (SeedString)); + UT_ASSERT_TRUE (Status); + + for (Index = 0; Index < 10; Index ++) { + Status = RandomBytes (RandomBuffer, RANDOM_NUMBER_SIZE); + UT_ASSERT_TRUE (Status); + + Status = (CompareMem (PreviousRandomBuffer, RandomBuffer, RANDOM_NUMBER_SIZE) == 0); + UT_ASSERT_FALSE (Status); + + CopyMem (PreviousRandomBuffer, RandomBuffer, RANDOM_NUMBER_SIZE); + } + + return UNIT_TEST_PASSED; +} + +TEST_DESC mPrngTest[] = { + // + // -----Description--------------------------------Class--------------------Function----------------Pre---Post--Context + // + {"TestVerifyPrngGeneration()", "CryptoPkg.BaseCryptLib.Prng", TestVerifyPrngGeneration, NULL, NULL, NULL}, +}; + +UINTN mPrngTestNum = ARRAY_SIZE(mPrngTest); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7Tests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7Tests.c new file mode 100644 index 000000000000..85a3d6a5a13b --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7Tests.c @@ -0,0 +1,415 @@ +/** @file + Application for RSA Key Retrieving (from PEM and X509) & Signature Validation. + + Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR> + Copyright (c) Microsoft Corporation. + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "TestBaseCryptLib.h" + + +// +// Password-protected PEM Key data for RSA Private Key Retrieving (encryption key is "client"). +// (Generated by OpenSSL utility). +// $ openssl genrsa -aes256 -out TestKeyPem -passout pass:client 1024 +// password should match PemPass in this file +// $ xxd --include TestKeyPem +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TestKeyPem[] = { + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x52, + 0x53, 0x41, 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x20, 0x4b, + 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x50, 0x72, 0x6f, 0x63, + 0x2d, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x34, 0x2c, 0x45, 0x4e, 0x43, + 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x0a, 0x44, 0x45, 0x4b, 0x2d, 0x49, + 0x6e, 0x66, 0x6f, 0x3a, 0x20, 0x41, 0x45, 0x53, 0x2d, 0x32, 0x35, 0x36, + 0x2d, 0x43, 0x42, 0x43, 0x2c, 0x34, 0x42, 0x44, 0x31, 0x30, 0x45, 0x39, + 0x35, 0x42, 0x38, 0x33, 0x39, 0x42, 0x30, 0x44, 0x33, 0x35, 0x36, 0x31, + 0x38, 0x41, 0x44, 0x36, 0x45, 0x46, 0x44, 0x36, 0x34, 0x32, 0x34, 0x44, + 0x36, 0x0a, 0x0a, 0x42, 0x50, 0x39, 0x49, 0x32, 0x42, 0x30, 0x6c, 0x50, + 0x7a, 0x4c, 0x50, 0x50, 0x38, 0x2f, 0x4b, 0x71, 0x35, 0x34, 0x2f, 0x56, + 0x68, 0x75, 0x4b, 0x35, 0x5a, 0x63, 0x72, 0x32, 0x55, 0x6c, 0x32, 0x75, + 0x43, 0x57, 0x4a, 0x62, 0x59, 0x33, 0x50, 0x77, 0x39, 0x6e, 0x4c, 0x6d, + 0x45, 0x41, 0x6a, 0x47, 0x74, 0x4a, 0x68, 0x57, 0x46, 0x66, 0x50, 0x47, + 0x38, 0x62, 0x6d, 0x41, 0x6f, 0x73, 0x56, 0x0a, 0x47, 0x76, 0x42, 0x30, + 0x6d, 0x2b, 0x7a, 0x5a, 0x43, 0x2b, 0x30, 0x6c, 0x57, 0x6c, 0x72, 0x59, + 0x7a, 0x51, 0x4b, 0x6a, 0x57, 0x79, 0x44, 0x6e, 0x4d, 0x58, 0x72, 0x33, + 0x51, 0x39, 0x69, 0x57, 0x32, 0x4b, 0x33, 0x68, 0x4d, 0x6b, 0x71, 0x51, + 0x4c, 0x31, 0x68, 0x65, 0x71, 0x52, 0x66, 0x66, 0x74, 0x47, 0x57, 0x51, + 0x5a, 0x36, 0x78, 0x4e, 0x6a, 0x72, 0x30, 0x7a, 0x6f, 0x51, 0x59, 0x73, + 0x0a, 0x34, 0x76, 0x69, 0x55, 0x46, 0x72, 0x7a, 0x2b, 0x52, 0x76, 0x4b, + 0x43, 0x2f, 0x33, 0x69, 0x71, 0x57, 0x59, 0x78, 0x55, 0x35, 0x4c, 0x6a, + 0x45, 0x74, 0x63, 0x5a, 0x4f, 0x2b, 0x53, 0x6d, 0x39, 0x42, 0x4c, 0x62, + 0x66, 0x58, 0x49, 0x71, 0x56, 0x72, 0x53, 0x6a, 0x54, 0x79, 0x58, 0x49, + 0x39, 0x70, 0x76, 0x78, 0x6f, 0x67, 0x50, 0x39, 0x38, 0x6b, 0x2b, 0x6c, + 0x41, 0x66, 0x37, 0x47, 0x36, 0x0a, 0x75, 0x39, 0x2b, 0x30, 0x31, 0x4d, + 0x47, 0x5a, 0x69, 0x36, 0x6b, 0x53, 0x73, 0x67, 0x48, 0x57, 0x7a, 0x43, + 0x41, 0x49, 0x51, 0x75, 0x38, 0x72, 0x6a, 0x4d, 0x34, 0x65, 0x74, 0x64, + 0x50, 0x62, 0x4a, 0x49, 0x77, 0x34, 0x65, 0x47, 0x6f, 0x32, 0x45, 0x49, + 0x44, 0x45, 0x54, 0x61, 0x52, 0x70, 0x73, 0x76, 0x47, 0x6a, 0x54, 0x6f, + 0x30, 0x51, 0x56, 0x69, 0x79, 0x79, 0x4a, 0x4f, 0x48, 0x32, 0x0a, 0x61, + 0x32, 0x71, 0x69, 0x2f, 0x47, 0x7a, 0x2f, 0x64, 0x48, 0x61, 0x62, 0x68, + 0x4d, 0x4e, 0x35, 0x4e, 0x53, 0x58, 0x56, 0x4d, 0x31, 0x54, 0x2f, 0x6d, + 0x69, 0x6f, 0x74, 0x68, 0x78, 0x59, 0x72, 0x2f, 0x4a, 0x69, 0x37, 0x6d, + 0x4e, 0x45, 0x75, 0x4a, 0x57, 0x38, 0x74, 0x6d, 0x75, 0x55, 0x4b, 0x58, + 0x33, 0x66, 0x63, 0x39, 0x42, 0x39, 0x32, 0x51, 0x6e, 0x54, 0x68, 0x43, + 0x69, 0x49, 0x2f, 0x0a, 0x79, 0x4f, 0x31, 0x32, 0x4c, 0x46, 0x58, 0x38, + 0x74, 0x4b, 0x4a, 0x37, 0x4b, 0x7a, 0x6f, 0x6b, 0x36, 0x44, 0x74, 0x6d, + 0x35, 0x73, 0x41, 0x74, 0x2b, 0x65, 0x4b, 0x76, 0x6f, 0x61, 0x47, 0x62, + 0x75, 0x4a, 0x78, 0x62, 0x52, 0x63, 0x36, 0x63, 0x4d, 0x58, 0x57, 0x46, + 0x36, 0x4d, 0x72, 0x4d, 0x30, 0x53, 0x78, 0x65, 0x4e, 0x6b, 0x5a, 0x77, + 0x5a, 0x36, 0x6c, 0x62, 0x4d, 0x39, 0x63, 0x55, 0x0a, 0x6c, 0x75, 0x34, + 0x4c, 0x56, 0x64, 0x34, 0x73, 0x56, 0x4c, 0x61, 0x76, 0x68, 0x75, 0x32, + 0x58, 0x48, 0x48, 0x53, 0x56, 0x30, 0x32, 0x32, 0x6d, 0x51, 0x72, 0x73, + 0x32, 0x69, 0x68, 0x74, 0x58, 0x44, 0x2b, 0x6c, 0x4d, 0x63, 0x2f, 0x35, + 0x62, 0x54, 0x41, 0x55, 0x6b, 0x4b, 0x4f, 0x42, 0x73, 0x43, 0x69, 0x4f, + 0x4b, 0x42, 0x56, 0x2b, 0x66, 0x70, 0x49, 0x62, 0x2b, 0x6d, 0x44, 0x33, + 0x58, 0x0a, 0x39, 0x37, 0x66, 0x36, 0x54, 0x66, 0x68, 0x37, 0x4f, 0x4f, + 0x6a, 0x74, 0x44, 0x79, 0x31, 0x6f, 0x52, 0x36, 0x70, 0x68, 0x48, 0x47, + 0x6e, 0x73, 0x43, 0x78, 0x72, 0x53, 0x72, 0x64, 0x48, 0x73, 0x2f, 0x34, + 0x33, 0x72, 0x61, 0x65, 0x42, 0x78, 0x59, 0x45, 0x41, 0x42, 0x4e, 0x59, + 0x68, 0x54, 0x47, 0x57, 0x49, 0x4d, 0x4a, 0x6b, 0x50, 0x63, 0x54, 0x53, + 0x73, 0x76, 0x77, 0x46, 0x37, 0x6d, 0x0a, 0x33, 0x6c, 0x38, 0x6b, 0x44, + 0x50, 0x48, 0x43, 0x4e, 0x68, 0x6e, 0x6e, 0x42, 0x69, 0x7a, 0x36, 0x2f, + 0x43, 0x38, 0x56, 0x31, 0x37, 0x78, 0x57, 0x34, 0x50, 0x2b, 0x79, 0x71, + 0x4a, 0x78, 0x58, 0x63, 0x49, 0x53, 0x72, 0x7a, 0x57, 0x53, 0x55, 0x72, + 0x34, 0x74, 0x71, 0x6b, 0x55, 0x58, 0x43, 0x57, 0x4c, 0x43, 0x66, 0x76, + 0x57, 0x7a, 0x4e, 0x65, 0x5a, 0x34, 0x4f, 0x34, 0x34, 0x54, 0x65, 0x0a, + 0x74, 0x31, 0x59, 0x65, 0x36, 0x77, 0x2b, 0x71, 0x4f, 0x55, 0x38, 0x50, + 0x42, 0x68, 0x72, 0x65, 0x4d, 0x38, 0x75, 0x32, 0x32, 0x42, 0x4f, 0x31, + 0x65, 0x2b, 0x44, 0x7a, 0x63, 0x74, 0x6c, 0x67, 0x43, 0x43, 0x6c, 0x38, + 0x79, 0x69, 0x37, 0x6f, 0x43, 0x56, 0x74, 0x66, 0x75, 0x59, 0x2f, 0x4c, + 0x72, 0x42, 0x61, 0x31, 0x74, 0x69, 0x43, 0x41, 0x37, 0x6c, 0x34, 0x75, + 0x58, 0x6b, 0x73, 0x4c, 0x0a, 0x2b, 0x31, 0x51, 0x79, 0x69, 0x4b, 0x31, + 0x6e, 0x43, 0x4f, 0x76, 0x74, 0x30, 0x46, 0x7a, 0x71, 0x62, 0x71, 0x78, + 0x54, 0x37, 0x53, 0x35, 0x4c, 0x56, 0x33, 0x5a, 0x33, 0x74, 0x34, 0x4a, + 0x46, 0x4f, 0x50, 0x62, 0x67, 0x63, 0x7a, 0x4e, 0x6b, 0x58, 0x55, 0x2b, + 0x4f, 0x74, 0x50, 0x6b, 0x6e, 0x45, 0x45, 0x76, 0x67, 0x57, 0x64, 0x76, + 0x31, 0x4f, 0x30, 0x6d, 0x52, 0x4a, 0x50, 0x31, 0x4e, 0x0a, 0x71, 0x43, + 0x32, 0x33, 0x4a, 0x6a, 0x36, 0x38, 0x4c, 0x30, 0x46, 0x63, 0x46, 0x4c, + 0x56, 0x56, 0x59, 0x76, 0x61, 0x44, 0x53, 0x76, 0x54, 0x45, 0x64, 0x50, + 0x54, 0x34, 0x62, 0x2f, 0x7a, 0x66, 0x64, 0x36, 0x51, 0x52, 0x6b, 0x38, + 0x70, 0x4d, 0x36, 0x77, 0x66, 0x61, 0x32, 0x50, 0x63, 0x75, 0x57, 0x65, + 0x79, 0x38, 0x48, 0x38, 0x76, 0x4e, 0x4b, 0x67, 0x2f, 0x65, 0x76, 0x34, + 0x77, 0x37, 0x0a, 0x6b, 0x6f, 0x6f, 0x4e, 0x59, 0x64, 0x77, 0x59, 0x69, + 0x6c, 0x37, 0x41, 0x50, 0x76, 0x42, 0x50, 0x4d, 0x63, 0x6c, 0x51, 0x76, + 0x63, 0x64, 0x71, 0x7a, 0x52, 0x7a, 0x4a, 0x6e, 0x4a, 0x74, 0x37, 0x70, + 0x35, 0x7a, 0x69, 0x2b, 0x2b, 0x4c, 0x43, 0x59, 0x55, 0x4d, 0x3d, 0x0a, + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x52, 0x53, 0x41, + 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x20, 0x4b, 0x45, 0x59, + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a + }; + +// +// Password for private key retrieving from encrypted PEM ("TestKeyPem"). +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *PemPass = "client"; + +// +// Test CA X509 Certificate for X509 Verification Routine (Generated by OpenSSL utility). +// $ openssl req -x509 -days 10000 -key TestKeyPem -out TestCACert -outform DER -subj "/C=US/ST=WA/L=Seattle/O=Tianocore/OU=EDK2/CN=UEFI" +// use password from PemPass variable in this file +// $ xxd --include TestCACert +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TestCACert[] = { + 0x30, 0x82, 0x02, 0x98, 0x30, 0x82, 0x02, 0x01, 0xa0, 0x03, 0x02, 0x01, + 0x02, 0x02, 0x14, 0x39, 0xde, 0x9e, 0xce, 0x3a, 0x36, 0x11, 0x38, 0x6f, + 0x64, 0xb4, 0x69, 0xa7, 0x93, 0xdd, 0xff, 0xbd, 0x3e, 0x75, 0x6a, 0x30, + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, + 0x05, 0x00, 0x30, 0x5e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, + 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, + 0x04, 0x08, 0x0c, 0x02, 0x57, 0x41, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, + 0x55, 0x04, 0x07, 0x0c, 0x07, 0x53, 0x65, 0x61, 0x74, 0x74, 0x6c, 0x65, + 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x54, + 0x69, 0x61, 0x6e, 0x6f, 0x63, 0x6f, 0x72, 0x65, 0x31, 0x0d, 0x30, 0x0b, + 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x04, 0x45, 0x44, 0x4b, 0x32, 0x31, + 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x04, 0x55, 0x45, + 0x46, 0x49, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x30, 0x30, 0x36, 0x32, 0x39, + 0x32, 0x32, 0x34, 0x37, 0x33, 0x36, 0x5a, 0x17, 0x0d, 0x34, 0x37, 0x31, + 0x31, 0x31, 0x35, 0x32, 0x32, 0x34, 0x37, 0x33, 0x36, 0x5a, 0x30, 0x5e, + 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, + 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x02, + 0x57, 0x41, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, + 0x07, 0x53, 0x65, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x31, 0x12, 0x30, 0x10, + 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x54, 0x69, 0x61, 0x6e, 0x6f, + 0x63, 0x6f, 0x72, 0x65, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, + 0x0b, 0x0c, 0x04, 0x45, 0x44, 0x4b, 0x32, 0x31, 0x0d, 0x30, 0x0b, 0x06, + 0x03, 0x55, 0x04, 0x03, 0x0c, 0x04, 0x55, 0x45, 0x46, 0x49, 0x30, 0x81, + 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, + 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, + 0x81, 0x81, 0x00, 0x9f, 0xef, 0x1b, 0x46, 0x45, 0x55, 0x33, 0x4b, 0xee, + 0x95, 0x14, 0xd3, 0x5a, 0x3e, 0xd9, 0x29, 0xfb, 0xd9, 0x29, 0x4e, 0x8b, + 0xf1, 0xf5, 0x68, 0x7c, 0x58, 0x86, 0x0c, 0xda, 0xd7, 0xe0, 0xd2, 0x9a, + 0xe8, 0x37, 0x16, 0x4d, 0x54, 0x92, 0x18, 0x20, 0x4c, 0x09, 0xa1, 0xcf, + 0xe1, 0xaa, 0x7a, 0x5a, 0x64, 0x7e, 0x5c, 0xeb, 0x4e, 0x15, 0x8e, 0x40, + 0xd1, 0xcb, 0x7d, 0x01, 0x71, 0x15, 0x11, 0xd2, 0xc7, 0xdb, 0x6b, 0x00, + 0xdc, 0x02, 0xcb, 0x5a, 0x6d, 0x2b, 0x2a, 0x75, 0xb6, 0x3f, 0xec, 0xc1, + 0x9d, 0xbf, 0xda, 0xe5, 0x3a, 0x77, 0x4b, 0x21, 0x1c, 0x99, 0x42, 0x84, + 0x5e, 0x27, 0x53, 0x9b, 0xe6, 0xc1, 0xa1, 0x95, 0x58, 0xba, 0xbe, 0x62, + 0x58, 0xd5, 0x09, 0xa8, 0xe6, 0xb6, 0x1b, 0xb1, 0x18, 0x28, 0x13, 0xc7, + 0x89, 0x1c, 0x68, 0xce, 0x15, 0xaf, 0x2e, 0x68, 0xac, 0x1c, 0xf7, 0x02, + 0x03, 0x01, 0x00, 0x01, 0xa3, 0x53, 0x30, 0x51, 0x30, 0x1d, 0x06, 0x03, + 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x50, 0xe5, 0x05, 0xa3, 0x6e, + 0x8f, 0x00, 0xf7, 0x93, 0x30, 0xe5, 0x25, 0x20, 0xdc, 0x8a, 0xc3, 0xad, + 0x14, 0x6d, 0x90, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, + 0x30, 0x16, 0x80, 0x14, 0x50, 0xe5, 0x05, 0xa3, 0x6e, 0x8f, 0x00, 0xf7, + 0x93, 0x30, 0xe5, 0x25, 0x20, 0xdc, 0x8a, 0xc3, 0xad, 0x14, 0x6d, 0x90, + 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, + 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, + 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x81, 0x81, 0x00, + 0x8e, 0xe4, 0x27, 0x42, 0x16, 0x6e, 0xbd, 0x28, 0x47, 0x09, 0x99, 0xc1, + 0x55, 0x02, 0x82, 0x1a, 0xe1, 0xd0, 0xf3, 0xef, 0x4d, 0xaf, 0x30, 0x9a, + 0x29, 0x4b, 0x74, 0x03, 0x6a, 0x95, 0x28, 0xf1, 0xbe, 0x62, 0x68, 0x9f, + 0x82, 0x59, 0x7a, 0x49, 0x91, 0xb6, 0xaf, 0x6b, 0x23, 0x30, 0xb4, 0xf4, + 0xdd, 0xfa, 0x30, 0x3f, 0xb6, 0xed, 0x74, 0x3f, 0x91, 0xe8, 0xd7, 0x84, + 0x1a, 0xf3, 0xc6, 0x3d, 0xd8, 0x59, 0x8d, 0x68, 0x6e, 0xb3, 0x66, 0x9e, + 0xe8, 0xeb, 0x1a, 0x8b, 0x1e, 0x92, 0x71, 0x73, 0x8c, 0x4f, 0x63, 0xce, + 0x71, 0x7b, 0x97, 0x3b, 0x59, 0xd2, 0x9b, 0xe4, 0xd0, 0xef, 0x31, 0x9f, + 0x0d, 0x61, 0x27, 0x97, 0x9d, 0xe8, 0xe0, 0xcd, 0x8d, 0xc1, 0x4d, 0xad, + 0xf7, 0x3a, 0x8d, 0xb8, 0x86, 0x8c, 0x23, 0x1d, 0x4c, 0x02, 0x5c, 0x53, + 0x46, 0x84, 0xb2, 0x97, 0x0c, 0xd3, 0x35, 0x6b +}; + +// +// X509 Cert Data for RSA Public Key Retrieving and X509 Verification (Generated by OpenSSL utility). +// $ openssl req -new -key TestKeyPem -out TestCertCsr -subj "/C=US/ST=WA/L=Seattle/O=Tianocore/OU=EDK2CHILD/CN=UEFI" +// $ openssl x509 -days 10000 -CA TestCACert.pem -CAkey TestKeyPem -req -out TestCert -set_serial 3432 --outform DER -in TestCertCsr +// password should be in the PemPass variable +// $ xxd --include TestCert +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TestCert[] = { + 0x30, 0x82, 0x02, 0x31, 0x30, 0x82, 0x01, 0x9a, 0x02, 0x02, 0x0d, 0x68, + 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, + 0x0b, 0x05, 0x00, 0x30, 0x5e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, + 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, + 0x55, 0x04, 0x08, 0x0c, 0x02, 0x57, 0x41, 0x31, 0x10, 0x30, 0x0e, 0x06, + 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x53, 0x65, 0x61, 0x74, 0x74, 0x6c, + 0x65, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, + 0x54, 0x69, 0x61, 0x6e, 0x6f, 0x63, 0x6f, 0x72, 0x65, 0x31, 0x0d, 0x30, + 0x0b, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x04, 0x45, 0x44, 0x4b, 0x32, + 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x04, 0x55, + 0x45, 0x46, 0x49, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x30, 0x30, 0x36, 0x32, + 0x39, 0x32, 0x33, 0x31, 0x35, 0x33, 0x36, 0x5a, 0x17, 0x0d, 0x34, 0x37, + 0x31, 0x31, 0x31, 0x35, 0x32, 0x33, 0x31, 0x35, 0x33, 0x36, 0x5a, 0x30, + 0x63, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, + 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, + 0x02, 0x57, 0x41, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, + 0x0c, 0x07, 0x53, 0x65, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x31, 0x12, 0x30, + 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x54, 0x69, 0x61, 0x6e, + 0x6f, 0x63, 0x6f, 0x72, 0x65, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, + 0x04, 0x0b, 0x0c, 0x09, 0x45, 0x44, 0x4b, 0x32, 0x43, 0x48, 0x49, 0x4c, + 0x44, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x04, + 0x55, 0x45, 0x46, 0x49, 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, + 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0x9f, 0xef, 0x1b, + 0x46, 0x45, 0x55, 0x33, 0x4b, 0xee, 0x95, 0x14, 0xd3, 0x5a, 0x3e, 0xd9, + 0x29, 0xfb, 0xd9, 0x29, 0x4e, 0x8b, 0xf1, 0xf5, 0x68, 0x7c, 0x58, 0x86, + 0x0c, 0xda, 0xd7, 0xe0, 0xd2, 0x9a, 0xe8, 0x37, 0x16, 0x4d, 0x54, 0x92, + 0x18, 0x20, 0x4c, 0x09, 0xa1, 0xcf, 0xe1, 0xaa, 0x7a, 0x5a, 0x64, 0x7e, + 0x5c, 0xeb, 0x4e, 0x15, 0x8e, 0x40, 0xd1, 0xcb, 0x7d, 0x01, 0x71, 0x15, + 0x11, 0xd2, 0xc7, 0xdb, 0x6b, 0x00, 0xdc, 0x02, 0xcb, 0x5a, 0x6d, 0x2b, + 0x2a, 0x75, 0xb6, 0x3f, 0xec, 0xc1, 0x9d, 0xbf, 0xda, 0xe5, 0x3a, 0x77, + 0x4b, 0x21, 0x1c, 0x99, 0x42, 0x84, 0x5e, 0x27, 0x53, 0x9b, 0xe6, 0xc1, + 0xa1, 0x95, 0x58, 0xba, 0xbe, 0x62, 0x58, 0xd5, 0x09, 0xa8, 0xe6, 0xb6, + 0x1b, 0xb1, 0x18, 0x28, 0x13, 0xc7, 0x89, 0x1c, 0x68, 0xce, 0x15, 0xaf, + 0x2e, 0x68, 0xac, 0x1c, 0xf7, 0x02, 0x03, 0x01, 0x00, 0x01, 0x30, 0x0d, + 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, + 0x00, 0x03, 0x81, 0x81, 0x00, 0x0d, 0xa4, 0x18, 0xa2, 0xb6, 0x09, 0xe1, + 0x77, 0x22, 0x97, 0x46, 0x29, 0x1b, 0xd8, 0x67, 0x0a, 0xc0, 0x91, 0x36, + 0x53, 0xe1, 0x4c, 0x73, 0x1b, 0xc1, 0x90, 0x6d, 0x98, 0x46, 0x7e, 0x65, + 0x71, 0x1c, 0xf0, 0x62, 0x9f, 0x9e, 0x62, 0x0b, 0x8b, 0x73, 0x35, 0x4c, + 0x2d, 0xc3, 0x5d, 0x38, 0x22, 0xfe, 0x43, 0x0f, 0xf2, 0x57, 0x17, 0x75, + 0xa8, 0x76, 0x79, 0xab, 0x4e, 0x33, 0xa5, 0x91, 0xbd, 0x55, 0x5b, 0xc0, + 0x7e, 0xfb, 0x1d, 0xc9, 0xf3, 0x5f, 0x12, 0x6f, 0x7c, 0xdc, 0x24, 0x5a, + 0x84, 0x16, 0x28, 0x5b, 0xf9, 0xcc, 0x8b, 0xfe, 0x11, 0xe6, 0x29, 0xcf, + 0xac, 0x90, 0x66, 0xc0, 0x70, 0x25, 0xf8, 0x71, 0xdb, 0x29, 0xcb, 0x6b, + 0x10, 0xa7, 0xbe, 0x3e, 0x9d, 0x61, 0xd8, 0x04, 0xe0, 0x71, 0x63, 0x83, + 0xa3, 0xca, 0x26, 0x6d, 0x7f, 0xf3, 0xaa, 0x8e, 0xb2, 0x66, 0x98, 0x41, + 0xd6 +}; + +// +// Message Hash for Signing & Verification Validation. +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 MsgHash[] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 + }; + +// +// Payload for PKCS#7 Signing & Verification Validation. +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *Payload = "Payload Data for PKCS#7 Signing"; + + +UNIT_TEST_STATUS +EFIAPI +TestVerifyRsaCertPkcs1SignVerify ( + IN UNIT_TEST_CONTEXT Context + ) +{ + BOOLEAN Status; + VOID *RsaPrivKey; + VOID *RsaPubKey; + UINT8 *Signature; + UINTN SigSize; + UINT8 *Subject; + UINTN SubjectSize; + RETURN_STATUS ReturnStatus; + CHAR8 CommonName[64]; + UINTN CommonNameSize; + CHAR8 OrgName[64]; + UINTN OrgNameSize; + + // + // Retrieve RSA private key from encrypted PEM data. + // + Status = RsaGetPrivateKeyFromPem (TestKeyPem, sizeof (TestKeyPem), PemPass, &RsaPrivKey); + UT_ASSERT_TRUE (Status); + + // + // Retrieve RSA public key from X509 Certificate. + // + RsaPubKey = NULL; + Status = RsaGetPublicKeyFromX509 (TestCert, sizeof (TestCert), &RsaPubKey); + UT_ASSERT_TRUE (Status); + + // + // Generate RSA PKCS#1 Signature. + // + SigSize = 0; + Status = RsaPkcs1Sign (RsaPrivKey, MsgHash, SHA1_DIGEST_SIZE, NULL, &SigSize); + UT_ASSERT_FALSE (Status); + UT_ASSERT_NOT_EQUAL (SigSize, 0); + + Signature = AllocatePool (SigSize); + Status = RsaPkcs1Sign (RsaPrivKey, MsgHash, SHA1_DIGEST_SIZE, Signature, &SigSize); + UT_ASSERT_TRUE (Status); + + // + // Verify RSA PKCS#1-encoded Signature. + // + Status = RsaPkcs1Verify (RsaPubKey, MsgHash, SHA1_DIGEST_SIZE, Signature, SigSize); + UT_ASSERT_TRUE (Status); + + // + // X509 Certificate Subject Retrieving. + // + SubjectSize = 0; + Status = X509GetSubjectName (TestCert, sizeof (TestCert), NULL, &SubjectSize); + Subject = (UINT8 *)AllocatePool (SubjectSize); + Status = X509GetSubjectName (TestCert, sizeof (TestCert), Subject, &SubjectSize); + UT_ASSERT_TRUE (Status); + + // + // Get CommonName from X509 Certificate Subject + // + CommonNameSize = 64; + ZeroMem (CommonName, CommonNameSize); + ReturnStatus = X509GetCommonName (TestCert, sizeof (TestCert), CommonName, &CommonNameSize); + UT_ASSERT_NOT_EFI_ERROR (ReturnStatus); + + UT_ASSERT_EQUAL (CommonNameSize, 5); + UT_ASSERT_MEM_EQUAL (CommonName, "UEFI", 5); + + OrgNameSize = 64; + ZeroMem (OrgName, OrgNameSize); + ReturnStatus = X509GetOrganizationName (TestCert, sizeof (TestCert), OrgName, &OrgNameSize); + UT_ASSERT_NOT_EFI_ERROR (ReturnStatus); + + UT_ASSERT_EQUAL (OrgNameSize, 10); + UT_ASSERT_MEM_EQUAL (OrgName, "Tianocore", 10); + + // + // X509 Certificate Verification. + // + Status = X509VerifyCert (TestCert, sizeof (TestCert), TestCACert, sizeof (TestCACert)); + UT_ASSERT_TRUE (Status); + + // + // Release Resources. + // + RsaFree (RsaPubKey); + RsaFree (RsaPrivKey); + FreePool (Signature); + FreePool (Subject); + + return UNIT_TEST_PASSED; +} + +UNIT_TEST_STATUS +EFIAPI +TestVerifyPkcs7SignVerify ( + IN UNIT_TEST_CONTEXT Context + ) +{ + BOOLEAN Status; + UINT8 *P7SignedData; + UINTN P7SignedDataSize; + UINT8 *SignCert; + + P7SignedData = NULL; + SignCert = NULL; + + // + // Construct Signer Certificate from RAW data. + // + Status = X509ConstructCertificate (TestCert, sizeof (TestCert), (UINT8 **) &SignCert); + UT_ASSERT_TRUE (Status); + UT_ASSERT_NOT_NULL (SignCert); + + // + // Create PKCS#7 signedData on Payload. + // Note: Caller should release P7SignedData manually. + // + Status = Pkcs7Sign ( + TestKeyPem, + sizeof (TestKeyPem), + (CONST UINT8 *) PemPass, + (UINT8 *) Payload, + AsciiStrLen (Payload), + SignCert, + NULL, + &P7SignedData, + &P7SignedDataSize + ); + UT_ASSERT_TRUE (Status); + UT_ASSERT_NOT_EQUAL (P7SignedDataSize, 0); + + Status = Pkcs7Verify ( + P7SignedData, + P7SignedDataSize, + TestCACert, + sizeof (TestCACert), + (UINT8 *) Payload, + AsciiStrLen (Payload) + ); + UT_ASSERT_TRUE (Status); + + if (P7SignedData != NULL) { + FreePool (P7SignedData); + } + if (SignCert != NULL) { + X509Free (SignCert); + } + + return UNIT_TEST_PASSED; +} + +TEST_DESC mRsaCertTest[] = { + // + // -----Description--------------------------------------Class----------------------Function-----------------Pre---Post--Context + // + {"TestVerifyRsaCertPkcs1SignVerify()", "CryptoPkg.BaseCryptLib.RsaCert", TestVerifyRsaCertPkcs1SignVerify, NULL, NULL, NULL}, +}; + +UINTN mRsaCertTestNum = ARRAY_SIZE(mRsaCertTest); + +TEST_DESC mPkcs7Test[] = { + // + // -----Description--------------------------------------Class----------------------Function-----------------Pre---Post--Context + // + {"TestVerifyPkcs7SignVerify()", "CryptoPkg.BaseCryptLib.Pkcs7", TestVerifyPkcs7SignVerify, NULL, NULL, NULL}, +}; + +UINTN mPkcs7TestNum = ARRAY_SIZE(mPkcs7Test); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.c new file mode 100644 index 000000000000..7ce20d2e778f --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.c @@ -0,0 +1,310 @@ +/** @file + Application for RSA Primitives Validation. + +Copyright (c) 2010, Intel Corporation. All rights reserved.<BR> +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "TestBaseCryptLib.h" + +#define RSA_MODULUS_LENGTH 512 + +// +// RSA PKCS#1 Validation Data from OpenSSL "Fips_rsa_selftest.c" +// + +// +// Public Modulus of RSA Key +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 RsaN[] = { + 0xBB, 0xF8, 0x2F, 0x09, 0x06, 0x82, 0xCE, 0x9C, 0x23, 0x38, 0xAC, 0x2B, 0x9D, 0xA8, 0x71, 0xF7, + 0x36, 0x8D, 0x07, 0xEE, 0xD4, 0x10, 0x43, 0xA4, 0x40, 0xD6, 0xB6, 0xF0, 0x74, 0x54, 0xF5, 0x1F, + 0xB8, 0xDF, 0xBA, 0xAF, 0x03, 0x5C, 0x02, 0xAB, 0x61, 0xEA, 0x48, 0xCE, 0xEB, 0x6F, 0xCD, 0x48, + 0x76, 0xED, 0x52, 0x0D, 0x60, 0xE1, 0xEC, 0x46, 0x19, 0x71, 0x9D, 0x8A, 0x5B, 0x8B, 0x80, 0x7F, + 0xAF, 0xB8, 0xE0, 0xA3, 0xDF, 0xC7, 0x37, 0x72, 0x3E, 0xE6, 0xB4, 0xB7, 0xD9, 0x3A, 0x25, 0x84, + 0xEE, 0x6A, 0x64, 0x9D, 0x06, 0x09, 0x53, 0x74, 0x88, 0x34, 0xB2, 0x45, 0x45, 0x98, 0x39, 0x4E, + 0xE0, 0xAA, 0xB1, 0x2D, 0x7B, 0x61, 0xA5, 0x1F, 0x52, 0x7A, 0x9A, 0x41, 0xF6, 0xC1, 0x68, 0x7F, + 0xE2, 0x53, 0x72, 0x98, 0xCA, 0x2A, 0x8F, 0x59, 0x46, 0xF8, 0xE5, 0xFD, 0x09, 0x1D, 0xBD, 0xCB + }; + +// +// Public Exponent of RSA Key +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 RsaE[] = { 0x11 }; + +// +// Private Exponent of RSA Key +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 RsaD[] = { + 0xA5, 0xDA, 0xFC, 0x53, 0x41, 0xFA, 0xF2, 0x89, 0xC4, 0xB9, 0x88, 0xDB, 0x30, 0xC1, 0xCD, 0xF8, + 0x3F, 0x31, 0x25, 0x1E, 0x06, 0x68, 0xB4, 0x27, 0x84, 0x81, 0x38, 0x01, 0x57, 0x96, 0x41, 0xB2, + 0x94, 0x10, 0xB3, 0xC7, 0x99, 0x8D, 0x6B, 0xC4, 0x65, 0x74, 0x5E, 0x5C, 0x39, 0x26, 0x69, 0xD6, + 0x87, 0x0D, 0xA2, 0xC0, 0x82, 0xA9, 0x39, 0xE3, 0x7F, 0xDC, 0xB8, 0x2E, 0xC9, 0x3E, 0xDA, 0xC9, + 0x7F, 0xF3, 0xAD, 0x59, 0x50, 0xAC, 0xCF, 0xBC, 0x11, 0x1C, 0x76, 0xF1, 0xA9, 0x52, 0x94, 0x44, + 0xE5, 0x6A, 0xAF, 0x68, 0xC5, 0x6C, 0x09, 0x2C, 0xD3, 0x8D, 0xC3, 0xBE, 0xF5, 0xD2, 0x0A, 0x93, + 0x99, 0x26, 0xED, 0x4F, 0x74, 0xA1, 0x3E, 0xDD, 0xFB, 0xE1, 0xA1, 0xCE, 0xCC, 0x48, 0x94, 0xAF, + 0x94, 0x28, 0xC2, 0xB7, 0xB8, 0x88, 0x3F, 0xE4, 0x46, 0x3A, 0x4B, 0xC8, 0x5B, 0x1C, 0xB3, 0xC1 + }; + +// +// Known Answer Test (KAT) Data for RSA PKCS#1 Signing +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 RsaSignData[] = "OpenSSL FIPS 140-2 Public Key RSA KAT"; + +// +// Known Signature for the above message, under SHA-1 Digest +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 RsaPkcs1Signature[] = { + 0x71, 0xEE, 0x1A, 0xC0, 0xFE, 0x01, 0x93, 0x54, 0x79, 0x5C, 0xF2, 0x4C, 0x4A, 0xFD, 0x1A, 0x05, + 0x8F, 0x64, 0xB1, 0x6D, 0x61, 0x33, 0x8D, 0x9B, 0xE7, 0xFD, 0x60, 0xA3, 0x83, 0xB5, 0xA3, 0x51, + 0x55, 0x77, 0x90, 0xCF, 0xDC, 0x22, 0x37, 0x8E, 0xD0, 0xE1, 0xAE, 0x09, 0xE3, 0x3D, 0x1E, 0xF8, + 0x80, 0xD1, 0x8B, 0xC2, 0xEC, 0x0A, 0xD7, 0x6B, 0x88, 0x8B, 0x8B, 0xA1, 0x20, 0x22, 0xBE, 0x59, + 0x5B, 0xE0, 0x23, 0x24, 0xA1, 0x49, 0x30, 0xBA, 0xA9, 0x9E, 0xE8, 0xB1, 0x8A, 0x62, 0x16, 0xBF, + 0x4E, 0xCA, 0x2E, 0x4E, 0xBC, 0x29, 0xA8, 0x67, 0x13, 0xB7, 0x9F, 0x1D, 0x04, 0x44, 0xE5, 0x5F, + 0x35, 0x07, 0x11, 0xBC, 0xED, 0x19, 0x37, 0x21, 0xCF, 0x23, 0x48, 0x1F, 0x72, 0x05, 0xDE, 0xE6, + 0xE8, 0x7F, 0x33, 0x8A, 0x76, 0x4B, 0x2F, 0x95, 0xDF, 0xF1, 0x5F, 0x84, 0x80, 0xD9, 0x46, 0xB4 + }; + +// +// Default public key 0x10001 = 65537 +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 DefaultPublicKey[] = { + 0x01, 0x00, 0x01 +}; + +VOID *mRsa; + +UNIT_TEST_STATUS +EFIAPI +TestVerifyRsaPreReq ( + UNIT_TEST_CONTEXT Context + ) +{ + mRsa = RsaNew (); + + if (mRsa == NULL) { + return UNIT_TEST_ERROR_TEST_FAILED; + } + + return UNIT_TEST_PASSED; +} + +VOID +EFIAPI +TestVerifyRsaCleanUp ( + UNIT_TEST_CONTEXT Context + ) +{ + if (mRsa != NULL) { + RsaFree (mRsa); + mRsa = NULL; + } +} + +UNIT_TEST_STATUS +EFIAPI +TestVerifyRsaSetGetKeyComponents ( + IN UNIT_TEST_CONTEXT Context + ) +{ + BOOLEAN Status; + UINTN KeySize; + UINT8 *KeyBuffer; + + // + // Set/Get RSA Key Components + // + + // + // Set/Get RSA Key N + // + Status = RsaSetKey (mRsa, RsaKeyN, RsaN, sizeof (RsaN)); + UT_ASSERT_TRUE (Status); + + KeySize = 0; + Status = RsaGetKey (mRsa, RsaKeyN, NULL, &KeySize); + UT_ASSERT_FALSE (Status); + UT_ASSERT_EQUAL (KeySize, sizeof (RsaN)); + + KeyBuffer = AllocatePool (KeySize); + Status = RsaGetKey (mRsa, RsaKeyN, KeyBuffer, &KeySize); + UT_ASSERT_TRUE (Status); + UT_ASSERT_EQUAL (KeySize, sizeof (RsaN)); + + UT_ASSERT_MEM_EQUAL (KeyBuffer, RsaN, KeySize); + + FreePool (KeyBuffer); + + // + // Set/Get RSA Key E + // + Status = RsaSetKey (mRsa, RsaKeyE, RsaE, sizeof (RsaE)); + UT_ASSERT_TRUE (Status); + + KeySize = 0; + Status = RsaGetKey (mRsa, RsaKeyE, NULL, &KeySize); + UT_ASSERT_FALSE (Status); + UT_ASSERT_EQUAL (KeySize, sizeof (RsaE)); + + KeyBuffer = AllocatePool (KeySize); + Status = RsaGetKey (mRsa, RsaKeyE, KeyBuffer, &KeySize); + UT_ASSERT_TRUE (Status); + UT_ASSERT_EQUAL (KeySize, sizeof (RsaE)); + + UT_ASSERT_MEM_EQUAL (KeyBuffer, RsaE, KeySize); + + FreePool (KeyBuffer); + + // + // Clear/Get RSA Key Components + // + + // + // Clear/Get RSA Key N + // + Status = RsaSetKey (mRsa, RsaKeyN, NULL, 0); + UT_ASSERT_TRUE (Status); + + KeySize = 1; + Status = RsaGetKey (mRsa, RsaKeyN, NULL, &KeySize); + UT_ASSERT_TRUE (Status); + UT_ASSERT_EQUAL (KeySize, 0); + + // + // Clear/Get RSA Key E + // + Status = RsaSetKey (mRsa, RsaKeyE, NULL, 0); + UT_ASSERT_TRUE (Status); + + KeySize = 1; + Status = RsaGetKey (mRsa, RsaKeyE, NULL, &KeySize); + UT_ASSERT_TRUE (Status); + UT_ASSERT_EQUAL (KeySize, 0); + + return UNIT_TEST_PASSED; +} + +UNIT_TEST_STATUS +EFIAPI +TestVerifyRsaGenerateKeyComponents ( + IN UNIT_TEST_CONTEXT Context + ) +{ + BOOLEAN Status; + UINTN KeySize; + UINT8 *KeyBuffer; + + // + // Generate RSA Key Components + // + + Status = RsaGenerateKey (mRsa, RSA_MODULUS_LENGTH, NULL, 0); + UT_ASSERT_TRUE (Status); + + KeySize = RSA_MODULUS_LENGTH / 8; + KeyBuffer = AllocatePool (KeySize); + Status = RsaGetKey (mRsa, RsaKeyE, KeyBuffer, &KeySize); + UT_ASSERT_TRUE (Status); + UT_ASSERT_EQUAL (KeySize, 3); + UT_ASSERT_MEM_EQUAL (KeyBuffer, DefaultPublicKey, 3); + + KeySize = RSA_MODULUS_LENGTH / 8; + Status = RsaGetKey (mRsa, RsaKeyN, KeyBuffer, &KeySize); + UT_ASSERT_TRUE (Status); + UT_ASSERT_EQUAL (KeySize, RSA_MODULUS_LENGTH / 8); + + Status = RsaCheckKey (mRsa); + UT_ASSERT_TRUE (Status); + + // + // Check invalid RSA key components + // + Status = RsaSetKey (mRsa, RsaKeyN, RsaN, sizeof (RsaN)); + UT_ASSERT_TRUE (Status); + + Status = RsaCheckKey (mRsa); + UT_ASSERT_FALSE (Status); + + Status = RsaSetKey (mRsa, RsaKeyN, KeyBuffer, KeySize); + UT_ASSERT_TRUE (Status); + + Status = RsaCheckKey (mRsa); + UT_ASSERT_TRUE (Status); + + Status = RsaSetKey (mRsa, RsaKeyE, RsaE, sizeof (RsaE)); + UT_ASSERT_TRUE (Status); + + Status = RsaCheckKey (mRsa); + UT_ASSERT_FALSE (Status); + + FreePool (KeyBuffer); + + return UNIT_TEST_PASSED; +} + +UNIT_TEST_STATUS +EFIAPI +TestVerifyRsaPkcs1SignVerify ( + IN UNIT_TEST_CONTEXT Context + ) +{ + UINT8 HashValue[SHA1_DIGEST_SIZE]; + UINTN HashSize; + UINT8 *Signature; + UINTN SigSize; + BOOLEAN Status; + + // + // SHA-1 Digest Message for PKCS#1 Signature + // + HashSize = SHA1_DIGEST_SIZE; + ZeroMem (HashValue, HashSize); + + Status = Sha1HashAll (RsaSignData, AsciiStrLen (RsaSignData), HashValue); + UT_ASSERT_TRUE (Status); + + // + // Sign RSA PKCS#1-encoded Signature + // + + Status = RsaSetKey (mRsa, RsaKeyN, RsaN, sizeof (RsaN)); + UT_ASSERT_TRUE (Status); + + Status = RsaSetKey (mRsa, RsaKeyE, RsaE, sizeof (RsaE)); + UT_ASSERT_TRUE (Status); + + Status = RsaSetKey (mRsa, RsaKeyD, RsaD, sizeof (RsaD)); + UT_ASSERT_TRUE (Status); + + SigSize = 0; + Status = RsaPkcs1Sign (mRsa, HashValue, HashSize, NULL, &SigSize); + UT_ASSERT_FALSE (Status); + UT_ASSERT_NOT_EQUAL (SigSize, 0); + + Signature = AllocatePool (SigSize); + Status = RsaPkcs1Sign (mRsa, HashValue, HashSize, Signature, &SigSize); + UT_ASSERT_TRUE (Status); + UT_ASSERT_EQUAL (SigSize, sizeof (RsaPkcs1Signature)); + + UT_ASSERT_MEM_EQUAL (Signature, RsaPkcs1Signature, SigSize); + + // + // Verify RSA PKCS#1-encoded Signature + // + Status = RsaPkcs1Verify (mRsa, HashValue, HashSize, Signature, SigSize); + UT_ASSERT_TRUE (Status); + + return UNIT_TEST_PASSED; +} + +TEST_DESC mRsaTest[] = { + // + // -----Description--------------------------------------Class----------------------Function---------------------------------Pre---------------------Post---------Context + // + {"TestVerifyRsaSetGetKeyComponents()", "CryptoPkg.BaseCryptLib.Rsa", TestVerifyRsaSetGetKeyComponents, TestVerifyRsaPreReq, TestVerifyRsaCleanUp, NULL}, + {"TestVerifyRsaGenerateKeyComponents()", "CryptoPkg.BaseCryptLib.Rsa", TestVerifyRsaGenerateKeyComponents, TestVerifyRsaPreReq, TestVerifyRsaCleanUp, NULL}, + {"TestVerifyRsaPkcs1SignVerify()", "CryptoPkg.BaseCryptLib.Rsa", TestVerifyRsaPkcs1SignVerify, TestVerifyRsaPreReq, TestVerifyRsaCleanUp, NULL}, +}; + +UINTN mRsaTestNum = ARRAY_SIZE(mRsaTest); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c new file mode 100644 index 000000000000..2a891ef8bcb0 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c @@ -0,0 +1,335 @@ +/** @file + Sample Implementation for RFC3161 Time Stamping Verification. + +Copyright (c) 2014, Intel Corporation. All rights reserved.<BR> +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "TestBaseCryptLib.h" + +// +// Sample Authenticode Data with RFC3161 time stamping signature. +// The data retrieved from one signed sample UEFI image, which is generated by MSFT's signtool +// utility in conjunction with RFC3161 timestamping, as the following command: +// signtool sign /ac <xxx.cer> / f <xxx.pfx> /p <pass> /fd <digestAlg> +// /tr http://timestamp.comodoca.com/rfc3161 sample.efi +// +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 AuthenticodeWithTS[] = { + 0x30, 0x82, 0x0c, 0x00, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0, + 0x82, 0x0b, 0xf1, 0x30, 0x82, 0x0b, 0xed, 0x02, 0x01, 0x01, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x09, + 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x78, 0x06, 0x0a, 0x2b, + 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x04, 0xa0, 0x6a, 0x30, 0x68, 0x30, 0x33, 0x06, + 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x0f, 0x30, 0x25, 0x03, 0x01, 0x00, + 0xa0, 0x20, 0xa2, 0x1e, 0x80, 0x1c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x4f, 0x00, 0x62, + 0x00, 0x73, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x74, 0x00, 0x65, 0x00, 0x3e, 0x00, 0x3e, + 0x00, 0x3e, 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, + 0x01, 0x05, 0x00, 0x04, 0x20, 0x1e, 0x9e, 0x74, 0x31, 0xe1, 0x3e, 0x51, 0x46, 0xab, 0xce, 0x10, + 0x0d, 0x7c, 0x38, 0x66, 0x34, 0xd4, 0xdd, 0x04, 0xa5, 0xe7, 0x75, 0x40, 0xdd, 0x99, 0x73, 0xf3, + 0x2a, 0x54, 0x3e, 0xa8, 0x18, 0xa0, 0x82, 0x01, 0xee, 0x30, 0x82, 0x01, 0xea, 0x30, 0x82, 0x01, + 0x57, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x2c, 0x65, 0xcf, 0xcf, 0xdd, 0x61, 0x7b, 0xa4, + 0x41, 0xad, 0x26, 0x1b, 0x63, 0xce, 0x91, 0x0f, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, + 0x1d, 0x05, 0x00, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x08, + 0x54, 0x65, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x37, + 0x32, 0x38, 0x30, 0x37, 0x33, 0x38, 0x35, 0x39, 0x5a, 0x17, 0x0d, 0x33, 0x39, 0x31, 0x32, 0x33, + 0x31, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, + 0x55, 0x04, 0x03, 0x13, 0x07, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x62, 0x30, 0x81, 0x9f, 0x30, + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, + 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0x94, 0xa6, 0x02, 0x15, 0x87, 0xd6, 0xbf, + 0x71, 0xe8, 0xc6, 0x68, 0xf6, 0x9f, 0x66, 0x09, 0x6c, 0xe7, 0x39, 0x52, 0xf4, 0x4e, 0xaf, 0xf5, + 0xe0, 0xba, 0x0f, 0xfd, 0xe6, 0x77, 0xa9, 0x71, 0x5b, 0x5c, 0x92, 0x50, 0x1d, 0xfd, 0x9b, 0x6e, + 0x52, 0x92, 0x9e, 0x3a, 0x75, 0x86, 0x41, 0x2a, 0x41, 0x30, 0x1b, 0x67, 0x66, 0x91, 0xde, 0x71, + 0x84, 0xe0, 0x90, 0xc3, 0x50, 0x36, 0x78, 0xb5, 0xa0, 0x1e, 0x72, 0xde, 0xe7, 0x66, 0x42, 0x4f, + 0x59, 0x5e, 0x3d, 0xf3, 0x85, 0x82, 0x0b, 0xa8, 0x26, 0x2d, 0xd9, 0xe3, 0x14, 0xda, 0x9d, 0x2e, + 0x3f, 0x53, 0x4d, 0x8d, 0x10, 0xbf, 0xa4, 0x7c, 0xe5, 0xaf, 0x3a, 0xa6, 0xaf, 0x49, 0x64, 0xb0, + 0x60, 0x17, 0x87, 0x71, 0x77, 0x59, 0x52, 0xe5, 0x5a, 0xed, 0x96, 0x7d, 0x7e, 0x5d, 0xc1, 0xef, + 0x6b, 0xfb, 0x80, 0xc5, 0x2b, 0x10, 0xfe, 0xe7, 0xd3, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x48, + 0x30, 0x46, 0x30, 0x44, 0x06, 0x03, 0x55, 0x1d, 0x01, 0x04, 0x3d, 0x30, 0x3b, 0x80, 0x10, 0x19, + 0x8d, 0x48, 0xa1, 0xb9, 0xf3, 0x5e, 0x3c, 0x13, 0xb4, 0x08, 0xb6, 0xd9, 0xf3, 0x4f, 0x0a, 0xa1, + 0x15, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x08, 0x54, 0x65, + 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x82, 0x10, 0x27, 0xcb, 0x16, 0x33, 0x8b, 0xed, 0x4d, 0xa8, + 0x47, 0xf0, 0x86, 0x47, 0x10, 0xef, 0x15, 0xd9, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, + 0x1d, 0x05, 0x00, 0x03, 0x81, 0x81, 0x00, 0x51, 0x94, 0xed, 0x7a, 0x5c, 0x0b, 0x34, 0x16, 0x9c, + 0xf4, 0x5f, 0x88, 0x16, 0xa8, 0x4b, 0x13, 0xfc, 0xa4, 0x0a, 0xc7, 0xd9, 0x20, 0xb1, 0x93, 0xc5, + 0x81, 0x4f, 0x35, 0x3a, 0x89, 0x10, 0x04, 0xc4, 0xcc, 0x10, 0x34, 0xc3, 0x15, 0x57, 0x06, 0x97, + 0xee, 0x06, 0x2f, 0xf3, 0x24, 0xa1, 0xe6, 0x3a, 0x89, 0x4d, 0xb4, 0x7b, 0x12, 0x87, 0x90, 0x8c, + 0xfc, 0x5b, 0xb0, 0xf0, 0xdd, 0xaa, 0x3a, 0x24, 0x6d, 0x55, 0x47, 0x8a, 0xf2, 0x61, 0x08, 0x7a, + 0x59, 0x5f, 0x6e, 0x7b, 0xcb, 0x34, 0xbe, 0xb6, 0x5d, 0xcb, 0x60, 0xae, 0xc4, 0xda, 0x62, 0xbb, + 0x7f, 0x17, 0x1e, 0x73, 0xd1, 0x4e, 0x9f, 0x6e, 0xd3, 0xc8, 0x35, 0x58, 0x30, 0xd2, 0x89, 0xe5, + 0x22, 0x5e, 0x86, 0xac, 0x7a, 0x56, 0xd6, 0x70, 0xdb, 0x54, 0x10, 0x6c, 0xd3, 0xd5, 0x38, 0xfb, + 0x69, 0xcb, 0x4f, 0x36, 0x83, 0xc2, 0xe8, 0x31, 0x82, 0x09, 0x69, 0x30, 0x82, 0x09, 0x65, 0x02, + 0x01, 0x01, 0x30, 0x27, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, + 0x08, 0x54, 0x65, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x02, 0x10, 0x2c, 0x65, 0xcf, 0xcf, 0xdd, + 0x61, 0x7b, 0xa4, 0x41, 0xad, 0x26, 0x1b, 0x63, 0xce, 0x91, 0x0f, 0x30, 0x0d, 0x06, 0x09, 0x60, + 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0xa0, 0x5e, 0x30, 0x10, 0x06, 0x0a, + 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x0c, 0x31, 0x02, 0x30, 0x00, 0x30, 0x19, + 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0c, 0x06, 0x0a, 0x2b, + 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x04, 0x30, 0x2f, 0x06, 0x09, 0x2a, 0x86, 0x48, + 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x22, 0x04, 0x20, 0x97, 0x6e, 0x29, 0x47, 0xc4, 0x03, + 0x68, 0x70, 0x1c, 0x99, 0x2c, 0x61, 0xb0, 0xbc, 0xde, 0x77, 0xe1, 0xa1, 0xeb, 0x4c, 0x1c, 0xac, + 0x4c, 0x64, 0xf6, 0x43, 0x96, 0x94, 0x0b, 0xc0, 0xbb, 0x03, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, + 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x81, 0x80, 0x85, 0x93, 0xad, 0x93, + 0x92, 0x9e, 0xa4, 0x94, 0x30, 0x02, 0xe1, 0xc8, 0xcd, 0x37, 0xb2, 0xe1, 0xcb, 0xb2, 0x0f, 0x1c, + 0x67, 0xd1, 0xc9, 0xeb, 0x4d, 0x68, 0x85, 0x97, 0x5a, 0xa6, 0x0c, 0x03, 0xc7, 0x86, 0xae, 0xb3, + 0x35, 0xb4, 0x1d, 0x0e, 0x95, 0x5f, 0xed, 0x37, 0x13, 0x6b, 0x1e, 0x94, 0x80, 0xf1, 0xac, 0x55, + 0x73, 0xd1, 0x31, 0xf9, 0xad, 0x13, 0x7b, 0x26, 0xbf, 0xe7, 0x55, 0x7b, 0xb2, 0xf9, 0x21, 0x42, + 0x23, 0x64, 0xe6, 0x45, 0x03, 0x67, 0xcb, 0x42, 0xd3, 0x71, 0x3f, 0xd5, 0x29, 0x17, 0x4b, 0x49, + 0x45, 0x0e, 0x8b, 0xba, 0x1f, 0x15, 0x5a, 0x7f, 0x7b, 0x5e, 0x9b, 0x22, 0x46, 0xa7, 0x9c, 0x0d, + 0x25, 0x9c, 0x76, 0x25, 0x02, 0xc8, 0x15, 0x00, 0x51, 0xe6, 0x73, 0x39, 0xac, 0x8d, 0x41, 0x7b, + 0xc8, 0x42, 0xc9, 0xdb, 0x1b, 0x16, 0x13, 0xf6, 0x44, 0x32, 0xef, 0x17, 0xa1, 0x82, 0x08, 0x34, + 0x30, 0x82, 0x08, 0x30, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x03, 0x03, 0x01, + 0x31, 0x82, 0x08, 0x20, + 0x30, 0x82, 0x08, 0x1c, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0, + 0x82, 0x08, 0x0d, 0x30, 0x82, 0x08, 0x09, 0x02, 0x01, 0x03, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x05, + 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x30, 0x81, 0xf6, 0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86, + 0xf7, 0x0d, 0x01, 0x09, 0x10, 0x01, 0x04, 0xa0, 0x81, 0xe6, 0x04, 0x81, 0xe3, 0x30, 0x81, 0xe0, + 0x02, 0x01, 0x01, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0xb2, 0x31, 0x02, 0x01, 0x01, 0x30, + 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x04, 0x14, 0xcd, 0x06, + 0xf0, 0xbd, 0x8b, 0xcd, 0x5c, 0x2e, 0x5a, 0x7c, 0x42, 0x56, 0x2c, 0x20, 0x4a, 0x15, 0xcb, 0x1d, + 0x8b, 0x0e, 0x02, 0x15, 0x00, 0xb6, 0xff, 0x47, 0x05, 0xb6, 0x2d, 0x15, 0xac, 0x3f, 0x5d, 0xd9, + 0xcf, 0x9d, 0x54, 0x35, 0x56, 0x7c, 0xc1, 0x6e, 0x8b, 0x18, 0x0f, 0x32, 0x30, 0x31, 0x34, 0x30, + 0x37, 0x32, 0x38, 0x30, 0x38, 0x35, 0x30, 0x30, 0x33, 0x5a, 0xa0, 0x81, 0x83, 0xa4, 0x81, 0x80, + 0x30, 0x7e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, + 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, 0x0e, + 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x53, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a, + 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x11, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, + 0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, + 0x55, 0x04, 0x03, 0x13, 0x1b, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x54, 0x69, 0x6d, 0x65, + 0x20, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, + 0xa0, 0x82, 0x04, 0x97, 0x30, 0x82, 0x04, 0x93, 0x30, 0x82, 0x03, 0x7b, 0xa0, 0x03, 0x02, 0x01, + 0x02, 0x02, 0x10, 0x47, 0x8a, 0x8e, 0xfb, 0x59, 0xe1, 0xd8, 0x3f, 0x0c, 0xe1, 0x42, 0xd2, 0xa2, + 0x87, 0x07, 0xbe, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, + 0x05, 0x00, 0x30, 0x81, 0x95, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, + 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x02, 0x55, 0x54, 0x31, + 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0e, 0x53, 0x61, 0x6c, 0x74, 0x20, 0x4c, + 0x61, 0x6b, 0x65, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, + 0x0a, 0x13, 0x15, 0x54, 0x68, 0x65, 0x20, 0x55, 0x53, 0x45, 0x52, 0x54, 0x52, 0x55, 0x53, 0x54, + 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, + 0x0b, 0x13, 0x18, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x75, 0x73, + 0x65, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x1d, 0x30, 0x1b, 0x06, + 0x03, 0x55, 0x04, 0x03, 0x13, 0x14, 0x55, 0x54, 0x4e, 0x2d, 0x55, 0x53, 0x45, 0x52, 0x46, 0x69, + 0x72, 0x73, 0x74, 0x2d, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, + 0x30, 0x35, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x31, 0x35, 0x30, + 0x35, 0x31, 0x30, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x7e, 0x31, 0x0b, 0x30, 0x09, + 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, + 0x04, 0x08, 0x13, 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63, + 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, + 0x07, 0x53, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, + 0x0a, 0x13, 0x11, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x65, 0x64, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1b, 0x43, + 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x53, 0x74, 0x61, 0x6d, 0x70, + 0x69, 0x6e, 0x67, 0x20, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, + 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, + 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xbc, 0x35, 0xa0, 0x36, 0x70, + 0x22, 0x81, 0x11, 0xc3, 0xb2, 0x83, 0xb9, 0xd3, 0x28, 0xc6, 0x36, 0xcd, 0x25, 0x6b, 0xa9, 0x7b, + 0xb2, 0x1c, 0xf6, 0x9b, 0x51, 0x9c, 0xef, 0x35, 0xf4, 0xed, 0x08, 0x8e, 0x5e, 0x38, 0x08, 0xf8, + 0x77, 0x3c, 0x0a, 0x42, 0xe0, 0xf3, 0x70, 0xdc, 0xa3, 0xd7, 0xca, 0xf5, 0x4c, 0x0b, 0xcf, 0xff, + 0x22, 0x9c, 0x0a, 0x7e, 0x68, 0xd6, 0x09, 0xa2, 0x2a, 0x84, 0x7b, 0xa6, 0x9d, 0xb4, 0xa9, 0xc1, + 0x33, 0xe2, 0xef, 0x1f, 0x17, 0x48, 0xca, 0x3a, 0xcd, 0x46, 0xe6, 0xc5, 0xaa, 0x77, 0xbd, 0xe3, + 0x77, 0x9a, 0xfa, 0x47, 0x53, 0x40, 0x28, 0x59, 0x43, 0x93, 0xf1, 0xa4, 0x81, 0xea, 0xef, 0x80, + 0xb5, 0x4f, 0xa7, 0x08, 0xce, 0xba, 0x6e, 0xbc, 0xca, 0x76, 0x0c, 0x97, 0x64, 0x59, 0x86, 0x24, + 0xbb, 0x3d, 0x82, 0x90, 0xa8, 0x55, 0xb1, 0x92, 0xd3, 0xa0, 0xa7, 0x05, 0xac, 0x9f, 0x53, 0x25, + 0x08, 0x10, 0x47, 0x99, 0xcd, 0x98, 0xde, 0x68, 0xe5, 0xb4, 0x50, 0x78, 0xa3, 0xaf, 0x01, 0xcc, + 0x59, 0x43, 0x58, 0xe4, 0x76, 0x6e, 0x7e, 0xac, 0xc7, 0xe2, 0x9e, 0x1f, 0x4f, 0xb0, 0x47, 0x2d, + 0xc8, 0x0c, 0xa3, 0x49, 0x27, 0x80, 0x75, 0x8c, 0xbb, 0x06, 0x91, 0x65, 0x0f, 0x90, 0x9b, 0xf4, + 0xba, 0xd1, 0x81, 0xc8, 0x5c, 0x6a, 0xec, 0x14, 0xe9, 0x25, 0x09, 0xbf, 0x23, 0x16, 0xf4, 0x95, + 0x46, 0x40, 0x40, 0x21, 0xbb, 0x83, 0x96, 0xfd, 0x86, 0x1f, 0x7a, 0xc8, 0x0d, 0x10, 0x8e, 0xa2, + 0xf8, 0x19, 0x07, 0x58, 0x7f, 0x9f, 0xbd, 0x37, 0x02, 0x60, 0xf2, 0xa4, 0xe9, 0x9d, 0x44, 0x3f, + 0x30, 0x05, 0xe4, 0xa7, 0x70, 0x99, 0x51, 0x9a, 0xe8, 0x17, 0xf1, 0x55, 0xca, 0xb2, 0x61, 0x89, + 0x65, 0x46, 0xa7, 0x6a, 0xf2, 0x58, 0x46, 0x7e, 0xaa, 0xa0, 0x07, 0x02, 0x03, 0x01, 0x00, 0x01, + 0xa3, 0x81, 0xf4, 0x30, 0x81, 0xf1, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, + 0x16, 0x80, 0x14, 0xda, 0xed, 0x64, 0x74, 0x14, 0x9c, 0x14, 0x3c, 0xab, 0xdd, 0x99, 0xa9, 0xbd, + 0x5b, 0x28, 0x4d, 0x8b, 0x3c, 0xc9, 0xd8, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, + 0x04, 0x14, 0x2e, 0x2d, 0xb0, 0x0a, 0x44, 0x4a, 0xd3, 0x87, 0xc0, 0x02, 0x07, 0xce, 0x97, 0x7d, + 0x50, 0x62, 0x20, 0xfd, 0x0f, 0x83, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, + 0x04, 0x04, 0x03, 0x02, 0x06, 0xc0, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, + 0x04, 0x02, 0x30, 0x00, 0x30, 0x16, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x0c, + 0x30, 0x0a, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x08, 0x30, 0x42, 0x06, 0x03, + 0x55, 0x1d, 0x1f, 0x04, 0x3b, 0x30, 0x39, 0x30, 0x37, 0xa0, 0x35, 0xa0, 0x33, 0x86, 0x31, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72, + 0x75, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x55, 0x54, 0x4e, 0x2d, 0x55, 0x53, 0x45, 0x52, + 0x46, 0x69, 0x72, 0x73, 0x74, 0x2d, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x63, 0x72, 0x6c, + 0x30, 0x35, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x29, 0x30, 0x27, + 0x30, 0x25, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x01, 0x86, 0x19, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x63, 0x73, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72, + 0x75, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, + 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xc8, 0xfb, 0x63, 0xf8, 0x0b, + 0x75, 0x75, 0x2c, 0x3a, 0xf1, 0xf2, 0x13, 0xa7, 0x2d, 0xb6, 0xa3, 0x1a, 0x9c, 0xad, 0x01, 0x07, + 0xd3, 0x34, 0x8e, 0x77, 0xe0, 0xc2, 0x6e, 0xae, 0x02, 0x5d, 0x48, 0x4f, 0xa4, 0xd2, 0x21, 0xb6, + 0x36, 0xfd, 0x2a, 0x35, 0x43, 0x7c, 0x6b, 0xdf, 0x80, 0x87, 0x0b, 0x15, 0xf0, 0x76, 0x32, 0x00, + 0xb4, 0xce, 0xb5, 0x67, 0xa4, 0x2f, 0x2f, 0x20, 0x1b, 0x9c, 0x54, 0x9e, 0x83, 0x3f, 0x1f, 0x5f, + 0x14, 0x95, 0x62, 0x82, 0x0f, 0x22, 0x41, 0x22, 0x1f, 0x70, 0xb3, 0xf3, 0xf7, 0x42, 0xde, 0x6c, + 0x51, 0xcd, 0x4b, 0xf8, 0x21, 0xac, 0x9b, 0x3b, 0x8c, 0xb1, 0xe5, 0xe6, 0x28, 0x8f, 0xce, 0x2a, + 0x8a, 0xf9, 0xaa, 0x52, 0x4d, 0x8c, 0x5b, 0x77, 0xba, 0x4d, 0x5a, 0x58, 0xdb, 0xbb, 0x6a, 0x04, + 0xcc, 0x52, 0x1e, 0x9d, 0xe2, 0x28, 0x37, 0x0e, 0xbb, 0xe7, 0x0e, 0x91, 0xc7, 0xf8, 0xdb, 0xf1, + 0x81, 0x98, 0xeb, 0xcd, 0x37, 0xb3, 0x0e, 0xab, 0x65, 0xd3, 0x62, 0xec, 0x3a, 0xa5, 0x76, 0xeb, + 0x13, 0xa8, 0x35, 0x93, 0xc9, 0x2e, 0x0a, 0x01, 0xec, 0xc0, 0xe8, 0xcc, 0x3d, 0x7e, 0xb6, 0xeb, + 0xe2, 0xc1, 0xec, 0xd3, 0x14, 0x92, 0x82, 0x66, 0x87, 0x50, 0xdc, 0xfd, 0x50, 0x97, 0xac, 0xb3, + 0x4a, 0x76, 0x73, 0x06, 0xc4, 0x86, 0x11, 0x3a, 0xb3, 0x5f, 0x43, 0x04, 0x52, 0x6f, 0xea, 0xb3, + 0xd0, 0x74, 0x36, 0x4c, 0xca, 0xf1, 0x1b, 0x79, 0x84, 0x37, 0x70, 0x63, 0xad, 0x74, 0xb9, 0xaa, + 0x0e, 0xf3, 0x98, 0xb0, 0x86, 0x08, 0xeb, 0xdb, 0xe0, 0x1f, 0x8c, 0x10, 0xf2, 0x39, 0x64, 0x9b, + 0xae, 0x4f, 0x0a, 0x2c, 0x92, 0x8a, 0x4f, 0x18, 0xb5, 0x91, 0xe5, 0x8d, 0x1a, 0x93, 0x5f, 0x1f, + 0xae, 0xf1, 0xa6, 0xf0, 0x2e, 0x97, 0xd0, 0xd2, 0xf6, 0x2b, 0x3c, 0x31, 0x82, 0x02, 0x61, 0x30, + 0x82, 0x02, 0x5d, 0x02, 0x01, 0x01, 0x30, 0x81, 0xaa, 0x30, 0x81, 0x95, 0x31, 0x0b, 0x30, 0x09, + 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, + 0x04, 0x08, 0x13, 0x02, 0x55, 0x54, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, + 0x0e, 0x53, 0x61, 0x6c, 0x74, 0x20, 0x4c, 0x61, 0x6b, 0x65, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31, + 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x54, 0x68, 0x65, 0x20, 0x55, 0x53, + 0x45, 0x52, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x31, + 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x18, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x63, + 0x6f, 0x6d, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x14, 0x55, 0x54, 0x4e, + 0x2d, 0x55, 0x53, 0x45, 0x52, 0x46, 0x69, 0x72, 0x73, 0x74, 0x2d, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x02, 0x10, 0x47, 0x8a, 0x8e, 0xfb, 0x59, 0xe1, 0xd8, 0x3f, 0x0c, 0xe1, 0x42, 0xd2, 0xa2, + 0x87, 0x07, 0xbe, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0xa0, 0x81, + 0x8c, 0x30, 0x1a, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0d, + 0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x10, 0x01, 0x04, 0x30, 0x1c, 0x06, + 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x05, 0x31, 0x0f, 0x17, 0x0d, 0x31, 0x34, + 0x30, 0x37, 0x32, 0x38, 0x30, 0x38, 0x35, 0x30, 0x30, 0x33, 0x5a, 0x30, 0x23, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x16, 0x04, 0x14, 0x7a, 0xad, 0x35, 0xdc, + 0x5b, 0xd6, 0x00, 0xd7, 0x44, 0xac, 0x80, 0x8f, 0x4f, 0xb6, 0xb4, 0x03, 0x62, 0x34, 0x53, 0xdc, + 0x30, 0x2b, 0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x10, 0x02, 0x0c, 0x31, + 0x1c, 0x30, 0x1a, 0x30, 0x18, 0x30, 0x16, 0x04, 0x14, 0x3d, 0xbb, 0x6d, 0xb5, 0x08, 0x5c, 0x6d, + 0xd5, 0xa1, 0xca, 0x7f, 0x9c, 0xf8, 0x4e, 0xcb, 0x1a, 0x39, 0x10, 0xca, 0xc8, 0x30, 0x0d, 0x06, + 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x73, 0x64, 0xb9, 0xa3, 0x54, 0x6f, 0x50, 0x97, 0x01, 0xa7, 0xf6, 0x0d, 0xb8, 0xce, 0x4b, 0xaa, + 0x43, 0xa2, 0x8f, 0xa3, 0xea, 0x93, 0xf2, 0xa3, 0xd0, 0x46, 0xde, 0xdd, 0x45, 0xe5, 0x94, 0x5a, + 0x45, 0xc2, 0x13, 0x1b, 0x90, 0x9b, 0xcf, 0x73, 0xcd, 0x28, 0x70, 0xf0, 0xf4, 0x54, 0xb5, 0x2d, + 0x31, 0xf9, 0xf3, 0x2d, 0x38, 0x78, 0xfe, 0x68, 0xea, 0x3c, 0xc0, 0xbe, 0x0b, 0x5a, 0x91, 0x49, + 0x63, 0xeb, 0x26, 0x32, 0x5b, 0x86, 0xcf, 0xe5, 0x8a, 0xa5, 0x9d, 0xe6, 0x4b, 0x57, 0x91, 0x8f, + 0x3c, 0xdc, 0xa6, 0x53, 0xd8, 0xdb, 0x8a, 0xfd, 0x3e, 0x7e, 0x19, 0x6f, 0x27, 0x72, 0x95, 0xc2, + 0x79, 0x73, 0xdf, 0xfb, 0x08, 0x5c, 0x5b, 0xc8, 0xb7, 0x94, 0x75, 0x88, 0x7a, 0x9a, 0x85, 0x9f, + 0x1b, 0xa3, 0x98, 0x30, 0x91, 0xee, 0xc0, 0x52, 0xd2, 0x75, 0x9c, 0xcb, 0x45, 0x0d, 0x94, 0x43, + 0x67, 0x7a, 0x49, 0x1c, 0xb1, 0x89, 0x9d, 0x6e, 0xfa, 0x87, 0xd2, 0x4d, 0x6e, 0x74, 0x90, 0xf5, + 0x80, 0x8c, 0x92, 0xda, 0xd9, 0xa1, 0x48, 0x20, 0x31, 0x02, 0x79, 0xde, 0xe3, 0xbd, 0x09, 0x04, + 0xa8, 0xd4, 0x99, 0xd7, 0x3b, 0xea, 0xf8, 0xdf, 0xb3, 0xb9, 0xd7, 0xa3, 0x36, 0xa1, 0xdb, 0xd3, + 0xec, 0x65, 0x8c, 0xb8, 0x8f, 0xfb, 0xd6, 0xef, 0x9c, 0x32, 0x3e, 0xab, 0x20, 0x74, 0xb9, 0x65, + 0x4c, 0xc6, 0x15, 0x2f, 0x31, 0x2a, 0x34, 0x3e, 0x84, 0x09, 0xb4, 0x75, 0xbc, 0xbe, 0xaf, 0xb3, + 0x9e, 0x85, 0xf1, 0xbb, 0x99, 0x1a, 0x07, 0xbd, 0x20, 0xa6, 0xed, 0xcf, 0xd1, 0xa6, 0x9a, 0x22, + 0xb2, 0x6d, 0x75, 0xf4, 0x23, 0x58, 0x13, 0x78, 0x73, 0x1a, 0xb2, 0x84, 0xde, 0xad, 0xe8, 0x6d, + 0xe6, 0xe7, 0x5c, 0xb6, 0xe6, 0x5b, 0x10, 0x37, 0x1f, 0xe3, 0x6e, 0xbd, 0x83, 0xd7, 0x51, 0xb1, + 0x00, 0x00, 0x00, 0x00, 0x0a + }; + +// +// The Comodo Time Stamping Signer Certificate Used for the verification of TimeStamp signature. +// +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 TSTrustedCert[] = { + 0x30, 0x82, 0x04, 0x93, 0x30, 0x82, 0x03, 0x7b, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x47, + 0x8a, 0x8e, 0xfb, 0x59, 0xe1, 0xd8, 0x3f, 0x0c, 0xe1, 0x42, 0xd2, 0xa2, 0x87, 0x07, 0xbe, 0x30, + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x81, + 0x95, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, + 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x02, 0x55, 0x54, 0x31, 0x17, 0x30, 0x15, 0x06, + 0x03, 0x55, 0x04, 0x07, 0x13, 0x0e, 0x53, 0x61, 0x6c, 0x74, 0x20, 0x4c, 0x61, 0x6b, 0x65, 0x20, + 0x43, 0x69, 0x74, 0x79, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x54, + 0x68, 0x65, 0x20, 0x55, 0x53, 0x45, 0x52, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x18, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72, + 0x75, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, + 0x13, 0x14, 0x55, 0x54, 0x4e, 0x2d, 0x55, 0x53, 0x45, 0x52, 0x46, 0x69, 0x72, 0x73, 0x74, 0x2d, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x35, 0x31, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x31, 0x35, 0x30, 0x35, 0x31, 0x30, 0x32, + 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x7e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, + 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x12, + 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x74, + 0x65, 0x72, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x53, 0x61, 0x6c, + 0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x11, 0x43, + 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, + 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1b, 0x43, 0x4f, 0x4d, 0x4f, 0x44, + 0x4f, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x20, + 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, + 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, + 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xbc, 0x35, 0xa0, 0x36, 0x70, 0x22, 0x81, 0x11, 0xc3, + 0xb2, 0x83, 0xb9, 0xd3, 0x28, 0xc6, 0x36, 0xcd, 0x25, 0x6b, 0xa9, 0x7b, 0xb2, 0x1c, 0xf6, 0x9b, + 0x51, 0x9c, 0xef, 0x35, 0xf4, 0xed, 0x08, 0x8e, 0x5e, 0x38, 0x08, 0xf8, 0x77, 0x3c, 0x0a, 0x42, + 0xe0, 0xf3, 0x70, 0xdc, 0xa3, 0xd7, 0xca, 0xf5, 0x4c, 0x0b, 0xcf, 0xff, 0x22, 0x9c, 0x0a, 0x7e, + 0x68, 0xd6, 0x09, 0xa2, 0x2a, 0x84, 0x7b, 0xa6, 0x9d, 0xb4, 0xa9, 0xc1, 0x33, 0xe2, 0xef, 0x1f, + 0x17, 0x48, 0xca, 0x3a, 0xcd, 0x46, 0xe6, 0xc5, 0xaa, 0x77, 0xbd, 0xe3, 0x77, 0x9a, 0xfa, 0x47, + 0x53, 0x40, 0x28, 0x59, 0x43, 0x93, 0xf1, 0xa4, 0x81, 0xea, 0xef, 0x80, 0xb5, 0x4f, 0xa7, 0x08, + 0xce, 0xba, 0x6e, 0xbc, 0xca, 0x76, 0x0c, 0x97, 0x64, 0x59, 0x86, 0x24, 0xbb, 0x3d, 0x82, 0x90, + 0xa8, 0x55, 0xb1, 0x92, 0xd3, 0xa0, 0xa7, 0x05, 0xac, 0x9f, 0x53, 0x25, 0x08, 0x10, 0x47, 0x99, + 0xcd, 0x98, 0xde, 0x68, 0xe5, 0xb4, 0x50, 0x78, 0xa3, 0xaf, 0x01, 0xcc, 0x59, 0x43, 0x58, 0xe4, + 0x76, 0x6e, 0x7e, 0xac, 0xc7, 0xe2, 0x9e, 0x1f, 0x4f, 0xb0, 0x47, 0x2d, 0xc8, 0x0c, 0xa3, 0x49, + 0x27, 0x80, 0x75, 0x8c, 0xbb, 0x06, 0x91, 0x65, 0x0f, 0x90, 0x9b, 0xf4, 0xba, 0xd1, 0x81, 0xc8, + 0x5c, 0x6a, 0xec, 0x14, 0xe9, 0x25, 0x09, 0xbf, 0x23, 0x16, 0xf4, 0x95, 0x46, 0x40, 0x40, 0x21, + 0xbb, 0x83, 0x96, 0xfd, 0x86, 0x1f, 0x7a, 0xc8, 0x0d, 0x10, 0x8e, 0xa2, 0xf8, 0x19, 0x07, 0x58, + 0x7f, 0x9f, 0xbd, 0x37, 0x02, 0x60, 0xf2, 0xa4, 0xe9, 0x9d, 0x44, 0x3f, 0x30, 0x05, 0xe4, 0xa7, + 0x70, 0x99, 0x51, 0x9a, 0xe8, 0x17, 0xf1, 0x55, 0xca, 0xb2, 0x61, 0x89, 0x65, 0x46, 0xa7, 0x6a, + 0xf2, 0x58, 0x46, 0x7e, 0xaa, 0xa0, 0x07, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0xf4, 0x30, + 0x81, 0xf1, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xda, + 0xed, 0x64, 0x74, 0x14, 0x9c, 0x14, 0x3c, 0xab, 0xdd, 0x99, 0xa9, 0xbd, 0x5b, 0x28, 0x4d, 0x8b, + 0x3c, 0xc9, 0xd8, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x2e, 0x2d, + 0xb0, 0x0a, 0x44, 0x4a, 0xd3, 0x87, 0xc0, 0x02, 0x07, 0xce, 0x97, 0x7d, 0x50, 0x62, 0x20, 0xfd, + 0x0f, 0x83, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, + 0x06, 0xc0, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00, + 0x30, 0x16, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x0c, 0x30, 0x0a, 0x06, 0x08, + 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x08, 0x30, 0x42, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, + 0x3b, 0x30, 0x39, 0x30, 0x37, 0xa0, 0x35, 0xa0, 0x33, 0x86, 0x31, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x55, 0x54, 0x4e, 0x2d, 0x55, 0x53, 0x45, 0x52, 0x46, 0x69, 0x72, 0x73, + 0x74, 0x2d, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x35, 0x06, 0x08, + 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x29, 0x30, 0x27, 0x30, 0x25, 0x06, 0x08, + 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x01, 0x86, 0x19, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x6f, 0x63, 0x73, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, + 0x63, 0x6f, 0x6d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, + 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xc8, 0xfb, 0x63, 0xf8, 0x0b, 0x75, 0x75, 0x2c, 0x3a, + 0xf1, 0xf2, 0x13, 0xa7, 0x2d, 0xb6, 0xa3, 0x1a, 0x9c, 0xad, 0x01, 0x07, 0xd3, 0x34, 0x8e, 0x77, + 0xe0, 0xc2, 0x6e, 0xae, 0x02, 0x5d, 0x48, 0x4f, 0xa4, 0xd2, 0x21, 0xb6, 0x36, 0xfd, 0x2a, 0x35, + 0x43, 0x7c, 0x6b, 0xdf, 0x80, 0x87, 0x0b, 0x15, 0xf0, 0x76, 0x32, 0x00, 0xb4, 0xce, 0xb5, 0x67, + 0xa4, 0x2f, 0x2f, 0x20, 0x1b, 0x9c, 0x54, 0x9e, 0x83, 0x3f, 0x1f, 0x5f, 0x14, 0x95, 0x62, 0x82, + 0x0f, 0x22, 0x41, 0x22, 0x1f, 0x70, 0xb3, 0xf3, 0xf7, 0x42, 0xde, 0x6c, 0x51, 0xcd, 0x4b, 0xf8, + 0x21, 0xac, 0x9b, 0x3b, 0x8c, 0xb1, 0xe5, 0xe6, 0x28, 0x8f, 0xce, 0x2a, 0x8a, 0xf9, 0xaa, 0x52, + 0x4d, 0x8c, 0x5b, 0x77, 0xba, 0x4d, 0x5a, 0x58, 0xdb, 0xbb, 0x6a, 0x04, 0xcc, 0x52, 0x1e, 0x9d, + 0xe2, 0x28, 0x37, 0x0e, 0xbb, 0xe7, 0x0e, 0x91, 0xc7, 0xf8, 0xdb, 0xf1, 0x81, 0x98, 0xeb, 0xcd, + 0x37, 0xb3, 0x0e, 0xab, 0x65, 0xd3, 0x62, 0xec, 0x3a, 0xa5, 0x76, 0xeb, 0x13, 0xa8, 0x35, 0x93, + 0xc9, 0x2e, 0x0a, 0x01, 0xec, 0xc0, 0xe8, 0xcc, 0x3d, 0x7e, 0xb6, 0xeb, 0xe2, 0xc1, 0xec, 0xd3, + 0x14, 0x92, 0x82, 0x66, 0x87, 0x50, 0xdc, 0xfd, 0x50, 0x97, 0xac, 0xb3, 0x4a, 0x76, 0x73, 0x06, + 0xc4, 0x86, 0x11, 0x3a, 0xb3, 0x5f, 0x43, 0x04, 0x52, 0x6f, 0xea, 0xb3, 0xd0, 0x74, 0x36, 0x4c, + 0xca, 0xf1, 0x1b, 0x79, 0x84, 0x37, 0x70, 0x63, 0xad, 0x74, 0xb9, 0xaa, 0x0e, 0xf3, 0x98, 0xb0, + 0x86, 0x08, 0xeb, 0xdb, 0xe0, 0x1f, 0x8c, 0x10, 0xf2, 0x39, 0x64, 0x9b, 0xae, 0x4f, 0x0a, 0x2c, + 0x92, 0x8a, 0x4f, 0x18, 0xb5, 0x91, 0xe5, 0x8d, 0x1a, 0x93, 0x5f, 0x1f, 0xae, 0xf1, 0xa6, 0xf0, + 0x2e, 0x97, 0xd0, 0xd2, 0xf6, 0x2b, 0x3c, 0x0a + }; + +UNIT_TEST_STATUS +EFIAPI +TestVerifyImageTimestampVerify ( + IN UNIT_TEST_CONTEXT Context + ) +{ + BOOLEAN Status; + EFI_TIME SigningTime; + + Status = FALSE; + + // + // Verify RFC3161 Timestamp CounterSignature. + // + Status = ImageTimestampVerify ( + AuthenticodeWithTS, + sizeof (AuthenticodeWithTS), + TSTrustedCert, + sizeof (TSTrustedCert), + &SigningTime + ); + UT_ASSERT_TRUE (Status); + + UT_ASSERT_EQUAL (SigningTime.Year, 2014); + UT_ASSERT_EQUAL (SigningTime.Month, 7); + UT_ASSERT_EQUAL (SigningTime.Day, 28); + UT_ASSERT_EQUAL (SigningTime.Hour, 8); + UT_ASSERT_EQUAL (SigningTime.Minute, 50); + UT_ASSERT_EQUAL (SigningTime.Second, 3); + + return Status; +} + +TEST_DESC mImageTimestampTest[] = { + // + // -----Description--------------------------------------Class----------------------------Function-----------------Pre---Post--Context + // + {"TestVerifyImageTimestampVerify()", "CryptoPkg.BaseCryptLib.ImageTimestamp", TestVerifyImageTimestampVerify, NULL, NULL, NULL}, +}; + +UINTN mImageTimestampTestNum = ARRAY_SIZE(mImageTimestampTest); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMain.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMain.c new file mode 100644 index 000000000000..88a3f96305c3 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMain.c @@ -0,0 +1,81 @@ +/** @file + This is a sample to demostrate the usage of the Unit Test Library that + supports the PEI, DXE, SMM, UEFI SHell, and host execution environments. + + Copyright (c) Microsoft Corporation.<BR> + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ +#include "TestBaseCryptLib.h" + + +/** + Initialize the unit test framework, suite, and unit tests for the + sample unit tests and run the unit tests. + + @retval EFI_SUCCESS All test cases were dispatched. + @retval EFI_OUT_OF_RESOURCES There are not enough resources available to + initialize the unit tests. +**/ +EFI_STATUS +EFIAPI +UefiTestMain ( + VOID + ) +{ + EFI_STATUS Status; + UNIT_TEST_FRAMEWORK_HANDLE Framework; + + DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_NAME, UNIT_TEST_VERSION )); + CreateUnitTest(UNIT_TEST_NAME, UNIT_TEST_VERSION, &Framework); + + // + // Execute the tests. + // + Status = RunAllTestSuites (Framework); + + if (Framework) { + FreeUnitTestFramework (Framework); + } + + return Status; +} + +/** + Standard PEIM entry point for target based unit test execution from PEI. +**/ +EFI_STATUS +EFIAPI +PeiEntryPoint ( + IN EFI_PEI_FILE_HANDLE FileHandle, + IN CONST EFI_PEI_SERVICES **PeiServices + ) +{ + return UefiTestMain (); +} + +/** + Standard UEFI entry point for target based unit test execution from DXE, SMM, + UEFI Shell. +**/ +EFI_STATUS +EFIAPI +DxeEntryPoint ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + return UefiTestMain (); +} + +/** + Standard POSIX C entry point for host based unit test execution. +**/ +int +main ( + int argc, + char *argv[] + ) +{ + return UefiTestMain (); +} diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMainBCOP.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMainBCOP.c new file mode 100644 index 000000000000..69bd1142e396 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMainBCOP.c @@ -0,0 +1,58 @@ +/** @file + This is a sample to demostrate the usage of the Unit Test Library that + supports the PEI, DXE, SMM, UEFI SHell, and host execution environments. + + Copyright (c) Microsoft Corporation.<BR> + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ +#include "TestBaseCryptLib.h" + + +/** + Initialize the unit test framework, suite, and unit tests for the + sample unit tests and run the unit tests. + + @retval EFI_SUCCESS All test cases were dispatched. + @retval EFI_OUT_OF_RESOURCES There are not enough resources available to + initialize the unit tests. +**/ +EFI_STATUS +EFIAPI +UefiTestMain ( + VOID + ) +{ + EFI_STATUS Status; + UNIT_TEST_FRAMEWORK_HANDLE Framework; + + DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_NAME, UNIT_TEST_VERSION )); + CreateUnitTest(UNIT_TEST_NAME, UNIT_TEST_VERSION, &Framework); + + // + // Execute the tests. + // + Status = RunAllTestSuites (Framework); + if (Framework) { + FreeUnitTestFramework (Framework); + } + + return Status; +} + +/** + Standard POSIX C entry point for host based unit test execution. +**/ +int +main ( + int argc, + char *argv[] + ) +{ + EFI_STATUS Status; + // Install the BaseCryptLib protocol + // Run the tests + Status = UefiTestMain (); + // Uninstall it + return Status; +} diff --git a/CryptoPkg/CryptoPkg.ci.yaml b/CryptoPkg/CryptoPkg.ci.yaml index f54ebfb22e70..0228e63d6617 100644 --- a/CryptoPkg/CryptoPkg.ci.yaml +++ b/CryptoPkg/CryptoPkg.ci.yaml @@ -8,6 +8,10 @@ "CompilerPlugin": { "DscPath": "CryptoPkg.dsc" }, + ## options defined .pytool/Plugin/HostUnitTestCompilerPlugin + "HostUnitTestCompilerPlugin": { + "DscPath": "Test/UnitTest/CryptoPkgHostUnitTest.dsc" + }, "CharEncodingCheck": { "IgnoreFiles": [] }, diff --git a/CryptoPkg/CryptoPkg.dsc b/CryptoPkg/CryptoPkg.dsc index 1af78468a19c..28295ec80ec6 100644 --- a/CryptoPkg/CryptoPkg.dsc +++ b/CryptoPkg/CryptoPkg.dsc @@ -223,6 +223,32 @@ # generated for it, but the binary will not be put into any firmware volume. # ################################################################################################### +[Components] + CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf + CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibUefiShell.inf { + <LibraryClasses> + PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPoint.inf + UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf + UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf + + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf + BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf + PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf + PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf + UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf + + UnitTestLib|UnitTestFrameworkPkg/Library/UnitTestLib/UnitTestLib.inf + UnitTestPersistenceLib|UnitTestFrameworkPkg/Library/UnitTestPersistenceLibNull/UnitTestPersistenceLibNull.inf + UnitTestResultReportLib|UnitTestFrameworkPkg/Library/UnitTestResultReportLib/UnitTestResultReportLibDebugLib.inf + <LibraryClasses.common.UEFI_APPLICATION> + UnitTestResultReportLib|UnitTestFrameworkPkg/Library/UnitTestResultReportLib/UnitTestResultReportLibConOut.inf + } + !if $(CRYPTO_SERVICES) == PACKAGE [Components] CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf diff --git a/CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf b/CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf new file mode 100644 index 000000000000..47515f06687e --- /dev/null +++ b/CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf @@ -0,0 +1,90 @@ +## @file +# Cryptographic Library Instance for host based unit tests +# +# Copyright (c) 2009 - 2019, Intel Corporation. All rights reserved.<BR> +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = BaseCryptLib + FILE_GUID = c97d34aa-caf8-42cd-8261-8705f46304b3 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + LIBRARY_CLASS = BaseCryptLib|DXE_DRIVER DXE_CORE UEFI_APPLICATION UEFI_DRIVER + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 ARM AARCH64 +# + +[Sources] + InternalCryptLib.h + Hash/CryptMd5.c + Hash/CryptSha1.c + Hash/CryptSha256.c + Hash/CryptSha512.c + Hash/CryptSm3.c + Hmac/CryptHmacSha256.c + Kdf/CryptHkdf.c + Cipher/CryptAes.c + Pk/CryptRsaBasic.c + Pk/CryptRsaExt.c + Pk/CryptPkcs1Oaep.c + Pk/CryptPkcs5Pbkdf2.c + Pk/CryptPkcs7Sign.c + Pk/CryptPkcs7VerifyCommon.c + Pk/CryptPkcs7VerifyBase.c + Pk/CryptPkcs7VerifyEku.c + Pk/CryptDh.c + Pk/CryptX509.c + Pk/CryptAuthenticode.c + Pk/CryptTs.c + Pem/CryptPem.c + + SysCall/UnitTestHostCrtWrapper.c + +[Sources.Ia32] + Rand/CryptRandTsc.c + +[Sources.X64] + Rand/CryptRandTsc.c + +[Sources.ARM] + Rand/CryptRand.c + +[Sources.AARCH64] + Rand/CryptRand.c + +[Packages] + MdePkg/MdePkg.dec + CryptoPkg/CryptoPkg.dec + +[LibraryClasses] + BaseLib + BaseMemoryLib + MemoryAllocationLib + DebugLib + OpensslLib + +# +# Remove these [BuildOptions] after this library is cleaned up +# +[BuildOptions] + # + # suppress the following warnings so we do not break the build with warnings-as-errors: + # C4090: 'function' : different 'const' qualifiers + # C4018: '>': signed/unsigned mismatch + MSFT:*_*_*_CC_FLAGS = /wd4090 /wd4018 + + # -JCryptoPkg/Include : To disable the use of the system includes provided by RVCT + # --diag_remark=1 : Reduce severity of "#1-D: last line of file ends without a newline" + RVCT:*_*_ARM_CC_FLAGS = -JCryptoPkg/Include --diag_remark=1 + + GCC:*_CLANG35_*_CC_FLAGS = -std=c99 + GCC:*_CLANG38_*_CC_FLAGS = -std=c99 + + XCODE:*_*_*_CC_FLAGS = -std=c99 diff --git a/CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc b/CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc new file mode 100644 index 000000000000..d8605176e697 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc @@ -0,0 +1,35 @@ +## @file +# CryptoPkg DSC file used to build host-based unit tests. +# +# Copyright (c) Microsoft Corporation.<BR> +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + PLATFORM_NAME = CryptoPkgHostTest + PLATFORM_GUID = C7F97D6D-54AC-45A9-8197-CC99B20CC7EC + PLATFORM_VERSION = 0.1 + DSC_SPECIFICATION = 0x00010005 + OUTPUT_DIRECTORY = Build/CryptoPkg/HostTest + SUPPORTED_ARCHITECTURES = IA32|X64 + BUILD_TARGETS = NOOPT + SKUID_IDENTIFIER = DEFAULT + +!include UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc + +[LibraryClasses] + OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf + BaseCryptLib|CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf + +[LibraryClasses.AARCH64, LibraryClasses.ARM] + RngLib|MdePkg/Library/BaseRngLibNull/BaseRngLibNull.inf + +[LibraryClasses.X64, LibraryClasses.IA32] + RngLib|MdePkg/Library/BaseRngLib/BaseRngLib.inf + +[Components] + # + # Build HOST_APPLICATION that tests the SampleUnitTest + # + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibHost.inf diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTestSignatures.h b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTestSignatures.h new file mode 100644 index 000000000000..9f5f813ef8b1 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTestSignatures.h @@ -0,0 +1,789 @@ +/*++ + +Copyright (C) Microsoft Corporation. All Rights Reserved. +SPDX-License-Identifier: BSD-2-Clause-Patent + +Module Name: + AllTestSignatures.h + +Abstract: + This file has test signatures in byte array format for Unit-Testing the + Enhanced Key Usage (EKU) parsing function. + + EFI_STATUS + EFIAPI + VerifyEKUsInPkcs7Signature ( + IN CONST UINT8 *Pkcs7Signature, + IN CONST UINT32 SignatureSize, + IN CONST CHAR8 *RequiredEKUs[], + IN CONST UINT32 RequiredEKUsSize, + IN BOOLEAN RequireAllPresent + ); + + Note: These byte arrays were created by running BinToH.exe on the P7B + signature files. +--*/ + + +// +// This is the ProductionECCSignature.p7b in byte array format. It has one +// EKU in it. (Firmware signing) +// "1.3.6.1.4.1.311.76.9.21.1" +// +CONST UINT8 ProductionECCSignature[] = +{ + 0x30, 0x82, 0x04, 0xC0, 0x02, 0x01, 0x01, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x03, 0x80, 0x30, 0x82, 0x03, 0x7C, 0x30, 0x82, 0x03, + 0x22, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x13, 0x33, 0x00, 0x00, 0x00, 0x03, 0x7E, 0x2E, 0x8F, + 0xBD, 0xA5, 0xC9, 0x2C, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x0A, 0x06, 0x08, 0x2A, + 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x81, 0x8F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, + 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, + 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, + 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, + 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, + 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x39, + 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x30, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, + 0x66, 0x74, 0x20, 0x45, 0x43, 0x43, 0x20, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x79, 0x20, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, + 0x65, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x38, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, + 0x37, 0x31, 0x32, 0x31, 0x38, 0x33, 0x37, 0x30, 0x37, 0x5A, 0x17, 0x0D, 0x31, 0x39, 0x30, 0x37, + 0x31, 0x32, 0x31, 0x38, 0x33, 0x37, 0x30, 0x37, 0x5A, 0x30, 0x3A, 0x31, 0x38, 0x30, 0x36, 0x06, + 0x03, 0x55, 0x04, 0x03, 0x13, 0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, + 0x45, 0x43, 0x43, 0x20, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x6F, 0x72, 0x79, 0x20, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x20, 0x53, + 0x69, 0x67, 0x6E, 0x65, 0x72, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, + 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, + 0x7D, 0xDF, 0xDE, 0xFA, 0xEE, 0xA5, 0x66, 0x33, 0xAA, 0xCC, 0xA4, 0x18, 0x65, 0x9E, 0x3A, 0xC6, + 0x4B, 0xCB, 0xD5, 0x78, 0x94, 0x14, 0xEE, 0xAA, 0xF3, 0x9D, 0xCB, 0x38, 0x6C, 0x5D, 0xFE, 0x3F, + 0x8A, 0xA9, 0x8D, 0x04, 0xD2, 0xFE, 0xAA, 0x38, 0xF3, 0xD6, 0x4A, 0x7E, 0xCF, 0x12, 0x95, 0xCF, + 0xAD, 0x92, 0x33, 0xF7, 0x38, 0x83, 0xC5, 0xFD, 0xCF, 0xD0, 0x96, 0x08, 0xCA, 0x62, 0x7D, 0x22, + 0xA3, 0x82, 0x01, 0xAF, 0x30, 0x82, 0x01, 0xAB, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, + 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, + 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x4C, 0x09, 0x15, 0x01, + 0x30, 0x0C, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x02, 0x30, 0x00, 0x30, 0x1D, + 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xE7, 0xD1, 0xD4, 0x74, 0x71, 0xF4, 0xC9, + 0x35, 0x04, 0xA7, 0x9A, 0x1E, 0x0C, 0xDD, 0xF4, 0x8D, 0x5C, 0x1E, 0xF2, 0x29, 0x30, 0x37, 0x06, + 0x03, 0x55, 0x1D, 0x11, 0x04, 0x30, 0x30, 0x2E, 0xA4, 0x2C, 0x30, 0x2A, 0x31, 0x10, 0x30, 0x0E, + 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x07, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x31, 0x16, + 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x05, 0x13, 0x0D, 0x34, 0x34, 0x30, 0x38, 0x31, 0x31, 0x2B, + 0x34, 0x34, 0x30, 0x38, 0x36, 0x32, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, + 0x16, 0x80, 0x14, 0x6F, 0x3A, 0xCC, 0x1B, 0x2F, 0x17, 0x5C, 0xED, 0xEB, 0xC8, 0xBF, 0x93, 0xA7, + 0xB5, 0x93, 0xD1, 0x4D, 0x40, 0xAA, 0x03, 0x30, 0x75, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x6E, + 0x30, 0x6C, 0x30, 0x6A, 0xA0, 0x68, 0xA0, 0x66, 0x86, 0x64, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, + 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, + 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x6F, 0x70, 0x73, 0x2F, 0x63, 0x72, 0x6C, 0x2F, 0x4D, 0x69, + 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x25, 0x32, 0x30, 0x45, 0x43, 0x43, 0x25, 0x32, 0x30, + 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x25, 0x32, 0x30, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x6F, 0x72, 0x79, 0x25, 0x32, 0x30, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x25, 0x32, + 0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x32, 0x30, 0x31, 0x38, 0x2E, 0x63, 0x72, 0x6C, 0x30, 0x81, + 0x82, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x76, 0x30, 0x74, 0x30, + 0x72, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x66, 0x68, 0x74, 0x74, + 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, + 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x6F, 0x70, 0x73, 0x2F, 0x63, 0x65, 0x72, + 0x74, 0x73, 0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x25, 0x32, 0x30, 0x45, + 0x43, 0x43, 0x25, 0x32, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x25, 0x32, 0x30, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x79, 0x25, 0x32, 0x30, 0x46, 0x69, 0x72, 0x6D, 0x77, + 0x61, 0x72, 0x65, 0x25, 0x32, 0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x32, 0x30, 0x31, 0x38, 0x2E, + 0x63, 0x72, 0x74, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, + 0x48, 0x00, 0x30, 0x45, 0x02, 0x20, 0x3D, 0xCF, 0xEF, 0xB8, 0xF0, 0x87, 0xEE, 0x7E, 0x80, 0x71, + 0x04, 0x77, 0x68, 0xDC, 0x66, 0x2F, 0x09, 0xA7, 0xF0, 0x76, 0x57, 0x7C, 0x12, 0x5A, 0xE4, 0x80, + 0x5A, 0xA0, 0xF2, 0x2C, 0x45, 0x1B, 0x02, 0x21, 0x00, 0xEB, 0x5F, 0x89, 0xD5, 0xEB, 0x03, 0x46, + 0x9E, 0x08, 0x95, 0x2A, 0x39, 0x30, 0x5D, 0x49, 0xB6, 0x24, 0xCE, 0x78, 0x1B, 0xB8, 0x1D, 0x0F, + 0xD1, 0x24, 0xD0, 0xA9, 0x18, 0x0F, 0x45, 0x4F, 0xF6, 0x31, 0x82, 0x01, 0x17, 0x30, 0x82, 0x01, + 0x13, 0x02, 0x01, 0x01, 0x30, 0x81, 0xA7, 0x30, 0x81, 0x8F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, + 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, + 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, + 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, + 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, + 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x39, + 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x30, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, + 0x66, 0x74, 0x20, 0x45, 0x43, 0x43, 0x20, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x79, 0x20, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, + 0x65, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x38, 0x02, 0x13, 0x33, 0x00, 0x00, 0x00, 0x03, + 0x7E, 0x2E, 0x8F, 0xBD, 0xA5, 0xC9, 0x2C, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x0D, + 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, + 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x05, 0x00, 0x04, 0x48, 0x30, 0x46, 0x02, 0x21, + 0x00, 0x85, 0xC7, 0x25, 0x5C, 0xF8, 0x5A, 0x13, 0xB7, 0xB6, 0x3A, 0xF1, 0x04, 0x72, 0xAC, 0xB3, + 0xF8, 0xC3, 0xE0, 0xE3, 0xD7, 0x98, 0x1B, 0xCF, 0x04, 0xA8, 0x0C, 0x7B, 0xBB, 0x7D, 0x40, 0xC2, + 0x99, 0x02, 0x21, 0x00, 0xA3, 0x83, 0x12, 0xE4, 0xB6, 0x3C, 0xC9, 0x3F, 0x05, 0xCF, 0x70, 0x57, + 0x54, 0x74, 0x0E, 0xEC, 0x14, 0xAD, 0x2C, 0x66, 0x9D, 0x72, 0x73, 0x62, 0x41, 0xA6, 0xC7, 0x90, + 0x05, 0x35, 0xF5, 0x80, +}; + +// +// This is the TestSignedWithMultipleCerts.bin.Signature.p7b in byte array +// format. It has two certs in it, and the leaf has an EKU of +// "1.3.6.1.4.1.311.76.9.21.1" +// +CONST UINT8 TestSignedMultipleCerts[] = +{ + 0x30, 0x82, 0x04, 0x90, 0x02, 0x01, 0x01, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x03, 0xC2, 0x30, 0x82, 0x01, 0xC5, 0x30, 0x82, 0x01, + 0x6A, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x16, 0x2F, 0xD8, 0x2B, 0x8A, 0x98, 0x6A, 0x8A, + 0x43, 0xC2, 0x22, 0xA5, 0x47, 0xA1, 0x18, 0xDD, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x04, 0x03, 0x02, 0x30, 0x26, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, + 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, + 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, + 0x31, 0x38, 0x30, 0x37, 0x31, 0x38, 0x32, 0x33, 0x31, 0x36, 0x31, 0x32, 0x5A, 0x17, 0x0D, 0x33, + 0x38, 0x30, 0x37, 0x31, 0x38, 0x32, 0x33, 0x32, 0x36, 0x31, 0x32, 0x5A, 0x30, 0x28, 0x31, 0x26, + 0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1D, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, + 0x65, 0x72, 0x4C, 0x65, 0x61, 0x66, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, + 0x04, 0x2E, 0x4C, 0x85, 0xFD, 0x86, 0x85, 0x4C, 0x55, 0x96, 0x17, 0xE3, 0x0C, 0xC1, 0xCB, 0xD9, + 0x95, 0xCF, 0xC7, 0xEA, 0x57, 0x02, 0x5C, 0x4F, 0x92, 0x7C, 0x35, 0xBF, 0x2B, 0x3D, 0xBA, 0x14, + 0xE5, 0x39, 0x9D, 0x9B, 0x64, 0x4A, 0x25, 0x29, 0xD5, 0x61, 0xDA, 0xFD, 0x51, 0x24, 0xB3, 0xE2, + 0x4E, 0x00, 0x59, 0xDF, 0xB4, 0x96, 0x42, 0x59, 0xA4, 0xBC, 0xA7, 0x64, 0x8F, 0x3A, 0x17, 0x33, + 0x55, 0xA3, 0x78, 0x30, 0x76, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, + 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, + 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x4C, 0x09, 0x15, 0x01, 0x30, 0x0C, 0x06, + 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x02, 0x30, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55, + 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x63, 0x69, 0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, + 0xEA, 0x55, 0x95, 0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9, 0x2D, 0x2F, 0x30, 0x1D, 0x06, 0x03, + 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xD6, 0x4A, 0xF8, 0x77, 0x21, 0x34, 0xEC, 0xC0, 0xAE, + 0x4D, 0x8F, 0x17, 0x86, 0xFF, 0xEA, 0xE3, 0x83, 0x42, 0x32, 0x83, 0x30, 0x0A, 0x06, 0x08, 0x2A, + 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x9A, + 0xAB, 0xE3, 0x6F, 0xD7, 0xB3, 0x0F, 0x83, 0x8A, 0xA1, 0x64, 0x70, 0xC1, 0xAC, 0x54, 0xE2, 0x59, + 0x7C, 0x8B, 0x11, 0x8F, 0x76, 0xB1, 0x9C, 0x5F, 0xDA, 0x7D, 0x04, 0x3C, 0x73, 0xB5, 0xCF, 0x02, + 0x21, 0x00, 0xB3, 0x31, 0xC1, 0x48, 0x3C, 0xEE, 0xA1, 0x6D, 0xA9, 0xF7, 0xF5, 0x9F, 0xD3, 0x6F, + 0x7D, 0x6F, 0xAB, 0x76, 0x12, 0xEE, 0x01, 0x4D, 0xFC, 0xE6, 0x87, 0xEA, 0xAB, 0x09, 0x98, 0xD8, + 0x97, 0x6F, 0x30, 0x82, 0x01, 0xF5, 0x30, 0x82, 0x01, 0x58, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, + 0x10, 0x4D, 0x88, 0xBF, 0x04, 0xDF, 0x10, 0x57, 0xBA, 0x43, 0x53, 0x6C, 0xFD, 0xA5, 0x90, 0xA7, + 0x6F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x28, 0x31, + 0x26, 0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1D, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, + 0x6E, 0x65, 0x72, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x31, 0x31, + 0x36, 0x32, 0x33, 0x32, 0x31, 0x31, 0x33, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x31, 0x31, 0x36, + 0x32, 0x33, 0x33, 0x31, 0x31, 0x33, 0x5A, 0x30, 0x26, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, + 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, + 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, + 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x0E, 0x58, 0xA3, 0xDB, 0xD3, 0x9C, + 0x21, 0xFC, 0x63, 0x6F, 0xBD, 0xB9, 0xA7, 0x8A, 0xB3, 0xBF, 0x40, 0x87, 0x43, 0x06, 0x53, 0x91, + 0x54, 0x31, 0x11, 0x0D, 0x3B, 0x50, 0x32, 0xEA, 0x11, 0xA3, 0x3D, 0x77, 0x08, 0x9E, 0xBC, 0x06, + 0x5C, 0x21, 0x48, 0x9D, 0x9B, 0x7C, 0x45, 0xFD, 0x4B, 0xD7, 0x0C, 0x04, 0xD4, 0xE0, 0x0C, 0xB7, + 0x6C, 0xBF, 0x22, 0xE1, 0x00, 0x99, 0x75, 0x39, 0x27, 0x59, 0xA3, 0x66, 0x30, 0x64, 0x30, 0x0E, + 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x12, + 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, + 0x01, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x6D, + 0x8B, 0x24, 0xBF, 0x20, 0x9D, 0x54, 0xAF, 0x04, 0x5B, 0x84, 0x91, 0x96, 0xAE, 0x99, 0xC1, 0x23, + 0x1C, 0x0E, 0xAC, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x63, 0x69, + 0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95, 0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9, + 0x2D, 0x2F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x81, + 0x8A, 0x00, 0x30, 0x81, 0x86, 0x02, 0x41, 0x2A, 0xD4, 0xFC, 0x35, 0x28, 0x73, 0x9F, 0xB3, 0x8A, + 0xE3, 0x13, 0x7F, 0xCA, 0x36, 0x88, 0x1E, 0xD0, 0x95, 0xDC, 0xE9, 0x8A, 0x9D, 0xC0, 0x27, 0x8C, + 0xD8, 0x57, 0x57, 0x5F, 0xDC, 0x13, 0x53, 0x68, 0xED, 0x2F, 0x4D, 0x6A, 0x77, 0xA2, 0x55, 0x48, + 0xCB, 0x24, 0x55, 0x3A, 0x30, 0x32, 0xE5, 0x5C, 0xDF, 0x96, 0xF1, 0x15, 0xD4, 0xE7, 0xCD, 0x6A, + 0x26, 0xBD, 0x7B, 0x92, 0x50, 0x74, 0xE4, 0x56, 0x02, 0x41, 0x46, 0x33, 0x61, 0x30, 0xFF, 0xA8, + 0x53, 0x31, 0x38, 0xCA, 0x6B, 0x77, 0x88, 0x36, 0x9A, 0x0B, 0x57, 0xC3, 0xD1, 0xB2, 0xA7, 0x40, + 0x53, 0x6A, 0xD1, 0x6C, 0x8A, 0x8B, 0x3C, 0x29, 0xC1, 0x2B, 0x82, 0x61, 0x2F, 0x1A, 0x9F, 0x2C, + 0x9A, 0x81, 0xD0, 0x2B, 0x3E, 0x0D, 0x99, 0xB7, 0xD4, 0x7E, 0xA7, 0xEA, 0x0C, 0x8E, 0x13, 0x0E, + 0x53, 0x65, 0x48, 0x17, 0xE5, 0xFA, 0x91, 0x79, 0x98, 0xC7, 0xA1, 0x31, 0x81, 0xA6, 0x30, 0x81, + 0xA3, 0x02, 0x01, 0x01, 0x30, 0x3A, 0x30, 0x26, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, + 0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, + 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x02, 0x10, + 0x16, 0x2F, 0xD8, 0x2B, 0x8A, 0x98, 0x6A, 0x8A, 0x43, 0xC2, 0x22, 0xA5, 0x47, 0xA1, 0x18, 0xDD, + 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, + 0x0B, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x05, 0x00, 0x04, 0x46, 0x30, 0x44, + 0x02, 0x20, 0x40, 0xD4, 0xD4, 0xAF, 0x89, 0xFA, 0x83, 0x44, 0x7B, 0x59, 0xB4, 0x2B, 0x99, 0xF0, + 0xD4, 0xB0, 0x75, 0x2E, 0x56, 0xAA, 0x0A, 0xDA, 0xCC, 0x82, 0xD5, 0xBC, 0x8D, 0xC4, 0x00, 0xF6, + 0x46, 0xA4, 0x02, 0x20, 0x6F, 0xA7, 0xE1, 0x32, 0xB2, 0xF2, 0x5A, 0x69, 0xC5, 0x45, 0xB6, 0x35, + 0x04, 0x05, 0x9B, 0xAC, 0x44, 0xB4, 0xA0, 0xE1, 0x25, 0x92, 0xE8, 0x3E, 0x8F, 0x85, 0xA3, 0xBE, + 0x34, 0xFE, 0x78, 0x31, +}; + +// +// This is the TestSignedWithMultipleEKUsInCert.bin.Signature.p7b signature in +// byte array format. It has two EKU's in it: +// "1.3.6.1.4.1.311.76.9.21.1" +// "1.3.6.1.4.1.311.76.9.21.2" +// +CONST UINT8 TestSignedWithMultipleEKUsInCert[] = +{ + 0x30, 0x82, 0x06, 0x2C, 0x02, 0x01, 0x01, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x04, 0x9E, 0x30, 0x82, 0x01, 0xF5, 0x30, 0x82, 0x01, + 0x58, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x4D, 0x88, 0xBF, 0x04, 0xDF, 0x10, 0x57, 0xBA, + 0x43, 0x53, 0x6C, 0xFD, 0xA5, 0x90, 0xA7, 0x6F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x04, 0x03, 0x02, 0x30, 0x28, 0x31, 0x26, 0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, + 0x1D, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, + 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E, + 0x17, 0x0D, 0x31, 0x38, 0x30, 0x31, 0x31, 0x36, 0x32, 0x33, 0x32, 0x31, 0x31, 0x33, 0x5A, 0x17, + 0x0D, 0x33, 0x38, 0x30, 0x31, 0x31, 0x36, 0x32, 0x33, 0x33, 0x31, 0x31, 0x33, 0x5A, 0x30, 0x26, + 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, + 0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, + 0x04, 0x0E, 0x58, 0xA3, 0xDB, 0xD3, 0x9C, 0x21, 0xFC, 0x63, 0x6F, 0xBD, 0xB9, 0xA7, 0x8A, 0xB3, + 0xBF, 0x40, 0x87, 0x43, 0x06, 0x53, 0x91, 0x54, 0x31, 0x11, 0x0D, 0x3B, 0x50, 0x32, 0xEA, 0x11, + 0xA3, 0x3D, 0x77, 0x08, 0x9E, 0xBC, 0x06, 0x5C, 0x21, 0x48, 0x9D, 0x9B, 0x7C, 0x45, 0xFD, 0x4B, + 0xD7, 0x0C, 0x04, 0xD4, 0xE0, 0x0C, 0xB7, 0x6C, 0xBF, 0x22, 0xE1, 0x00, 0x99, 0x75, 0x39, 0x27, + 0x59, 0xA3, 0x66, 0x30, 0x64, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, + 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, + 0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, + 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x6D, 0x8B, 0x24, 0xBF, 0x20, 0x9D, 0x54, 0xAF, 0x04, 0x5B, + 0x84, 0x91, 0x96, 0xAE, 0x99, 0xC1, 0x23, 0x1C, 0x0E, 0xAC, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, + 0x0E, 0x04, 0x16, 0x04, 0x14, 0x63, 0x69, 0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95, + 0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9, 0x2D, 0x2F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, + 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x81, 0x8A, 0x00, 0x30, 0x81, 0x86, 0x02, 0x41, 0x2A, 0xD4, + 0xFC, 0x35, 0x28, 0x73, 0x9F, 0xB3, 0x8A, 0xE3, 0x13, 0x7F, 0xCA, 0x36, 0x88, 0x1E, 0xD0, 0x95, + 0xDC, 0xE9, 0x8A, 0x9D, 0xC0, 0x27, 0x8C, 0xD8, 0x57, 0x57, 0x5F, 0xDC, 0x13, 0x53, 0x68, 0xED, + 0x2F, 0x4D, 0x6A, 0x77, 0xA2, 0x55, 0x48, 0xCB, 0x24, 0x55, 0x3A, 0x30, 0x32, 0xE5, 0x5C, 0xDF, + 0x96, 0xF1, 0x15, 0xD4, 0xE7, 0xCD, 0x6A, 0x26, 0xBD, 0x7B, 0x92, 0x50, 0x74, 0xE4, 0x56, 0x02, + 0x41, 0x46, 0x33, 0x61, 0x30, 0xFF, 0xA8, 0x53, 0x31, 0x38, 0xCA, 0x6B, 0x77, 0x88, 0x36, 0x9A, + 0x0B, 0x57, 0xC3, 0xD1, 0xB2, 0xA7, 0x40, 0x53, 0x6A, 0xD1, 0x6C, 0x8A, 0x8B, 0x3C, 0x29, 0xC1, + 0x2B, 0x82, 0x61, 0x2F, 0x1A, 0x9F, 0x2C, 0x9A, 0x81, 0xD0, 0x2B, 0x3E, 0x0D, 0x99, 0xB7, 0xD4, + 0x7E, 0xA7, 0xEA, 0x0C, 0x8E, 0x13, 0x0E, 0x53, 0x65, 0x48, 0x17, 0xE5, 0xFA, 0x91, 0x79, 0x98, + 0xC7, 0xA1, 0x30, 0x82, 0x02, 0xA1, 0x30, 0x82, 0x02, 0x47, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, + 0x10, 0x29, 0xBB, 0x52, 0x25, 0xED, 0x34, 0xB7, 0xBA, 0x40, 0xF8, 0xC3, 0x14, 0xB5, 0xC8, 0x86, + 0x9E, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x26, 0x31, + 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, + 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x37, 0x32, 0x37, 0x32, + 0x30, 0x33, 0x34, 0x31, 0x31, 0x5A, 0x17, 0x0D, 0x32, 0x33, 0x30, 0x37, 0x32, 0x37, 0x32, 0x30, + 0x34, 0x34, 0x31, 0x31, 0x5A, 0x30, 0x3A, 0x31, 0x38, 0x30, 0x36, 0x06, 0x03, 0x55, 0x04, 0x03, + 0x0C, 0x2F, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x46, 0x69, 0x72, + 0x6D, 0x77, 0x61, 0x72, 0x65, 0x4C, 0x65, 0x61, 0x66, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x4D, + 0x75, 0x6C, 0x74, 0x69, 0x70, 0x6C, 0x65, 0x45, 0x4B, 0x55, 0x73, 0x49, 0x6E, 0x43, 0x65, 0x72, + 0x74, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, + 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, + 0x01, 0x00, 0xD0, 0x61, 0xA5, 0xCD, 0x49, 0x4B, 0x5C, 0x88, 0x89, 0x09, 0xCA, 0xE7, 0xEB, 0x58, + 0x91, 0x8F, 0x59, 0xBE, 0xE8, 0x16, 0xC0, 0xEF, 0x75, 0xE5, 0x18, 0x88, 0xE8, 0xCE, 0xFA, 0xD2, + 0xB0, 0x77, 0xC1, 0xD2, 0xF2, 0x9E, 0x65, 0xE8, 0xDB, 0x6B, 0x8C, 0x93, 0xE5, 0x39, 0x1D, 0xF9, + 0x37, 0x2A, 0x52, 0x7F, 0xC3, 0x93, 0xD7, 0x9F, 0x03, 0x83, 0xBC, 0x6E, 0xC6, 0x83, 0x64, 0x15, + 0x1A, 0x5C, 0x74, 0x41, 0x40, 0x21, 0xC9, 0x25, 0xF0, 0x14, 0xA3, 0x29, 0x97, 0x29, 0x8C, 0x5D, + 0xED, 0xE9, 0x8D, 0x66, 0xCC, 0xD1, 0xD1, 0xE0, 0x08, 0x52, 0xA5, 0x93, 0x07, 0xCB, 0xF8, 0x95, + 0x2C, 0x8D, 0x29, 0x84, 0x10, 0x5F, 0x57, 0x52, 0x10, 0x75, 0x35, 0x8A, 0x84, 0xE3, 0xAE, 0x10, + 0x57, 0x29, 0xE9, 0xEB, 0x6E, 0xD2, 0xC7, 0x6D, 0x35, 0x43, 0x67, 0x82, 0xE3, 0x98, 0x29, 0x9C, + 0x59, 0x77, 0xA0, 0x00, 0x27, 0xB2, 0x5D, 0xB9, 0x84, 0x31, 0x89, 0x2F, 0x77, 0xC5, 0xB9, 0x23, + 0xE0, 0x14, 0x94, 0x6F, 0x33, 0xD5, 0x3B, 0x58, 0xFB, 0xD6, 0xB6, 0xE5, 0xD4, 0x09, 0x3D, 0xB2, + 0xE7, 0x87, 0xC6, 0xEA, 0x73, 0x61, 0x6D, 0xDA, 0xFA, 0x95, 0x2B, 0x2B, 0x8A, 0xEC, 0x7E, 0x68, + 0x0F, 0x98, 0x16, 0x08, 0xFF, 0xB2, 0xC1, 0xBF, 0xAB, 0x3D, 0xB0, 0xC2, 0xD5, 0x16, 0xAE, 0x71, + 0x54, 0x48, 0xD1, 0x52, 0x72, 0xFD, 0x42, 0x09, 0x66, 0xAF, 0x50, 0xDE, 0x4C, 0x3C, 0x6A, 0xBC, + 0x1F, 0xC5, 0x0A, 0xA0, 0xC5, 0x9A, 0xF1, 0xB2, 0xB2, 0x3F, 0x14, 0xE1, 0x93, 0x07, 0xF0, 0x00, + 0x04, 0xEF, 0x16, 0x76, 0x18, 0x10, 0x65, 0x63, 0x42, 0x42, 0x12, 0xD0, 0x65, 0xF5, 0xA2, 0xCF, + 0x90, 0xBE, 0x65, 0x57, 0x25, 0x8C, 0xAC, 0x5E, 0x05, 0x31, 0x91, 0x9E, 0x4D, 0x18, 0xBC, 0x15, + 0x30, 0x7B, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x78, 0x30, 0x76, 0x30, 0x0E, 0x06, 0x03, 0x55, + 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x24, 0x06, 0x03, 0x55, + 0x1D, 0x25, 0x04, 0x1D, 0x30, 0x1B, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x4C, + 0x09, 0x15, 0x01, 0x06, 0x0C, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x4C, 0x09, 0x15, 0x01, + 0x02, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x63, 0x69, + 0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95, 0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9, + 0x2D, 0x2F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xC0, 0xDC, 0xCB, + 0x76, 0x52, 0x84, 0x91, 0xF5, 0x37, 0x0D, 0x85, 0xB6, 0x45, 0x23, 0xFA, 0xA0, 0xAD, 0xC1, 0x1D, + 0x92, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x48, 0x00, + 0x30, 0x45, 0x02, 0x21, 0x00, 0xF4, 0xB0, 0x8A, 0x91, 0x96, 0x61, 0xDF, 0xC3, 0x54, 0xA5, 0xB3, + 0x1A, 0x3C, 0x28, 0x06, 0xC0, 0xA1, 0xF5, 0x72, 0xD1, 0x02, 0x5C, 0x69, 0xB6, 0x6C, 0xA8, 0xDC, + 0x6B, 0x78, 0xD9, 0x0C, 0x9A, 0x02, 0x20, 0x37, 0x2C, 0x61, 0x9E, 0x6E, 0x5F, 0xC6, 0xFA, 0x92, + 0x52, 0xB0, 0x4E, 0x52, 0xC7, 0xF1, 0xE9, 0x0F, 0xB6, 0xD5, 0x08, 0x10, 0x41, 0x3A, 0x61, 0xFD, + 0xC5, 0x70, 0x87, 0xBB, 0x49, 0x82, 0xEA, 0x31, 0x82, 0x01, 0x65, 0x30, 0x82, 0x01, 0x61, 0x02, + 0x01, 0x01, 0x30, 0x3A, 0x30, 0x26, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, + 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, + 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x02, 0x10, 0x29, 0xBB, + 0x52, 0x25, 0xED, 0x34, 0xB7, 0xBA, 0x40, 0xF8, 0xC3, 0x14, 0xB5, 0xC8, 0x86, 0x9E, 0x30, 0x0D, + 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0D, 0x06, + 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, + 0xBB, 0x51, 0xDD, 0x8F, 0xB4, 0x99, 0x37, 0x13, 0x94, 0x6F, 0x09, 0x05, 0xBA, 0x5B, 0x8D, 0x86, + 0x9A, 0xB0, 0x51, 0xEB, 0x6B, 0x10, 0xD7, 0xD1, 0x95, 0x4A, 0x4D, 0x23, 0xA3, 0x37, 0x82, 0xDF, + 0x1F, 0x24, 0xE4, 0x62, 0x4F, 0xD4, 0x52, 0x73, 0xF8, 0x39, 0x2B, 0x46, 0xF4, 0x61, 0xCE, 0xF1, + 0x64, 0xD7, 0x60, 0xC9, 0xCC, 0xCA, 0x8D, 0x94, 0xA5, 0x67, 0x68, 0x2B, 0xE4, 0xB0, 0xD7, 0x64, + 0xC8, 0xF3, 0x9C, 0x98, 0x2C, 0x0A, 0x69, 0x56, 0xD6, 0x59, 0xDF, 0x4D, 0x38, 0xE7, 0xD4, 0x63, + 0x2B, 0x74, 0xA1, 0xA3, 0xF9, 0xE1, 0x1A, 0x12, 0x2B, 0x04, 0x46, 0x11, 0xA8, 0x26, 0x00, 0x15, + 0x4F, 0x14, 0x7F, 0xB1, 0xB4, 0x25, 0x0C, 0x87, 0xB0, 0x56, 0x8C, 0xBE, 0x0D, 0xFA, 0x66, 0x6F, + 0x8A, 0xCB, 0x0A, 0x88, 0x3B, 0xF6, 0x52, 0xCD, 0xBB, 0xA2, 0xA9, 0xAD, 0xAD, 0x09, 0x0D, 0xDA, + 0x79, 0x8A, 0xAE, 0xE5, 0x9D, 0xCE, 0x5C, 0x60, 0x99, 0x67, 0x26, 0xC4, 0xAF, 0xD4, 0x01, 0xB1, + 0x6D, 0xD1, 0x8C, 0x4D, 0x1D, 0xBD, 0xAB, 0x42, 0x2C, 0xF2, 0xD8, 0x07, 0x3F, 0xDC, 0x5E, 0x68, + 0x4C, 0xD9, 0xDB, 0xC0, 0x93, 0xBB, 0x8E, 0xA0, 0xA2, 0x09, 0x5F, 0x03, 0x58, 0x48, 0x54, 0xF6, + 0xF0, 0xDA, 0x7A, 0x7F, 0xC4, 0xD2, 0x9F, 0x64, 0xF5, 0x85, 0x86, 0x48, 0xDF, 0x7F, 0x86, 0x14, + 0x7C, 0x62, 0x77, 0x1D, 0x22, 0xE5, 0x34, 0x42, 0xE4, 0x49, 0x38, 0xB4, 0xE4, 0x22, 0xFB, 0x5F, + 0xB5, 0xEA, 0xBA, 0x90, 0x51, 0xC0, 0xC6, 0x94, 0x09, 0xE4, 0xB7, 0x15, 0x3F, 0x07, 0x23, 0xE8, + 0x46, 0x93, 0xA5, 0x7B, 0x7A, 0x91, 0xDA, 0x8E, 0x7C, 0xAF, 0xBD, 0x41, 0xB9, 0xDE, 0x85, 0x04, + 0xBC, 0x08, 0x6C, 0x08, 0x56, 0x16, 0xDB, 0xB5, 0xEE, 0x65, 0x76, 0xE9, 0x78, 0xD3, 0xDD, 0xD8, + +}; + +// +// This is the TestSignedWithProductId10001.bin.p7b in byte array format. +// It has two EKU's in it: (Product ID is 10001) +// "1.3.6.1.4.1.311.76.9.21.1" +// "1.3.6.1.4.1.311.76.9.21.1.10001" +// +CONST UINT8 TestSignedWithProductId10001[] = +{ + 0x30, 0x82, 0x06, 0x1E, 0x02, 0x01, 0x01, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x04, 0x90, 0x30, 0x82, 0x01, 0xF5, 0x30, 0x82, 0x01, + 0x58, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x4D, 0x88, 0xBF, 0x04, 0xDF, 0x10, 0x57, 0xBA, + 0x43, 0x53, 0x6C, 0xFD, 0xA5, 0x90, 0xA7, 0x6F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x04, 0x03, 0x02, 0x30, 0x28, 0x31, 0x26, 0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, + 0x1D, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, + 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E, + 0x17, 0x0D, 0x31, 0x38, 0x30, 0x31, 0x31, 0x36, 0x32, 0x33, 0x32, 0x31, 0x31, 0x33, 0x5A, 0x17, + 0x0D, 0x33, 0x38, 0x30, 0x31, 0x31, 0x36, 0x32, 0x33, 0x33, 0x31, 0x31, 0x33, 0x5A, 0x30, 0x26, + 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, + 0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, + 0x04, 0x0E, 0x58, 0xA3, 0xDB, 0xD3, 0x9C, 0x21, 0xFC, 0x63, 0x6F, 0xBD, 0xB9, 0xA7, 0x8A, 0xB3, + 0xBF, 0x40, 0x87, 0x43, 0x06, 0x53, 0x91, 0x54, 0x31, 0x11, 0x0D, 0x3B, 0x50, 0x32, 0xEA, 0x11, + 0xA3, 0x3D, 0x77, 0x08, 0x9E, 0xBC, 0x06, 0x5C, 0x21, 0x48, 0x9D, 0x9B, 0x7C, 0x45, 0xFD, 0x4B, + 0xD7, 0x0C, 0x04, 0xD4, 0xE0, 0x0C, 0xB7, 0x6C, 0xBF, 0x22, 0xE1, 0x00, 0x99, 0x75, 0x39, 0x27, + 0x59, 0xA3, 0x66, 0x30, 0x64, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, + 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, + 0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, + 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x6D, 0x8B, 0x24, 0xBF, 0x20, 0x9D, 0x54, 0xAF, 0x04, 0x5B, + 0x84, 0x91, 0x96, 0xAE, 0x99, 0xC1, 0x23, 0x1C, 0x0E, 0xAC, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, + 0x0E, 0x04, 0x16, 0x04, 0x14, 0x63, 0x69, 0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95, + 0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9, 0x2D, 0x2F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, + 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x81, 0x8A, 0x00, 0x30, 0x81, 0x86, 0x02, 0x41, 0x2A, 0xD4, + 0xFC, 0x35, 0x28, 0x73, 0x9F, 0xB3, 0x8A, 0xE3, 0x13, 0x7F, 0xCA, 0x36, 0x88, 0x1E, 0xD0, 0x95, + 0xDC, 0xE9, 0x8A, 0x9D, 0xC0, 0x27, 0x8C, 0xD8, 0x57, 0x57, 0x5F, 0xDC, 0x13, 0x53, 0x68, 0xED, + 0x2F, 0x4D, 0x6A, 0x77, 0xA2, 0x55, 0x48, 0xCB, 0x24, 0x55, 0x3A, 0x30, 0x32, 0xE5, 0x5C, 0xDF, + 0x96, 0xF1, 0x15, 0xD4, 0xE7, 0xCD, 0x6A, 0x26, 0xBD, 0x7B, 0x92, 0x50, 0x74, 0xE4, 0x56, 0x02, + 0x41, 0x46, 0x33, 0x61, 0x30, 0xFF, 0xA8, 0x53, 0x31, 0x38, 0xCA, 0x6B, 0x77, 0x88, 0x36, 0x9A, + 0x0B, 0x57, 0xC3, 0xD1, 0xB2, 0xA7, 0x40, 0x53, 0x6A, 0xD1, 0x6C, 0x8A, 0x8B, 0x3C, 0x29, 0xC1, + 0x2B, 0x82, 0x61, 0x2F, 0x1A, 0x9F, 0x2C, 0x9A, 0x81, 0xD0, 0x2B, 0x3E, 0x0D, 0x99, 0xB7, 0xD4, + 0x7E, 0xA7, 0xEA, 0x0C, 0x8E, 0x13, 0x0E, 0x53, 0x65, 0x48, 0x17, 0xE5, 0xFA, 0x91, 0x79, 0x98, + 0xC7, 0xA1, 0x30, 0x82, 0x02, 0x93, 0x30, 0x82, 0x02, 0x39, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, + 0x10, 0x1F, 0x65, 0xF1, 0x29, 0x3B, 0x89, 0x6A, 0xBF, 0x43, 0xAF, 0xC7, 0x30, 0x36, 0xD1, 0x0D, + 0x2B, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x26, 0x31, + 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, + 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, 0x30, 0x32, 0x31, + 0x36, 0x34, 0x32, 0x32, 0x33, 0x5A, 0x17, 0x0D, 0x32, 0x33, 0x30, 0x38, 0x30, 0x32, 0x31, 0x36, + 0x35, 0x32, 0x32, 0x33, 0x5A, 0x30, 0x2B, 0x31, 0x29, 0x30, 0x27, 0x06, 0x03, 0x55, 0x04, 0x03, + 0x0C, 0x20, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, + 0x67, 0x6E, 0x65, 0x72, 0x50, 0x72, 0x6F, 0x64, 0x75, 0x63, 0x74, 0x49, 0x44, 0x31, 0x30, 0x30, + 0x30, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, + 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, + 0x01, 0x01, 0x00, 0x8C, 0x26, 0x35, 0xBC, 0x18, 0x06, 0x44, 0x65, 0xF6, 0x55, 0x29, 0x78, 0x26, + 0xCA, 0x57, 0xD0, 0x4C, 0x31, 0x84, 0x5B, 0x64, 0xDE, 0x8E, 0x34, 0x84, 0x45, 0x12, 0xE8, 0x5A, + 0x86, 0x4B, 0x5A, 0x61, 0x4C, 0xD8, 0xE2, 0x7D, 0x3B, 0xBD, 0x25, 0x58, 0x30, 0x1D, 0x5E, 0x65, + 0x50, 0xC3, 0x07, 0xF2, 0x50, 0xE1, 0x48, 0x2A, 0xD9, 0x70, 0x5F, 0xF3, 0x2B, 0xF1, 0x1F, 0x21, + 0x06, 0x62, 0x81, 0xE9, 0x8E, 0xDA, 0xDC, 0x69, 0xA3, 0x6E, 0x2F, 0xD2, 0x3A, 0x79, 0x01, 0xAF, + 0xA1, 0x2A, 0x28, 0xDD, 0x32, 0x4E, 0xCE, 0x40, 0xB8, 0x41, 0xA4, 0x7D, 0x3D, 0x70, 0x3F, 0xC4, + 0xDA, 0x61, 0x18, 0xBF, 0xFC, 0xAB, 0x16, 0xE3, 0x65, 0x3F, 0x6D, 0x76, 0x37, 0xAD, 0x1F, 0x11, + 0x05, 0x0F, 0xC2, 0x56, 0xD1, 0x45, 0xBD, 0x25, 0xCC, 0x19, 0xC4, 0x2A, 0x03, 0xED, 0x3B, 0x05, + 0xA7, 0x87, 0x30, 0xE6, 0x84, 0x11, 0x88, 0xD0, 0x91, 0x4E, 0x52, 0xB5, 0x97, 0xDF, 0x57, 0xEF, + 0x5E, 0x72, 0x68, 0x49, 0x85, 0xC8, 0x7F, 0xA7, 0x5F, 0x7B, 0xE7, 0xCE, 0xA1, 0x53, 0xBA, 0xF8, + 0xA9, 0xDF, 0x8C, 0x8C, 0x72, 0xD2, 0xA9, 0x7A, 0xF5, 0x07, 0x4A, 0x75, 0x1A, 0x0F, 0x50, 0x9E, + 0xEA, 0x4C, 0xFC, 0xC7, 0x74, 0xE2, 0x4D, 0xD1, 0x01, 0xC4, 0xB6, 0xCA, 0xA5, 0xCC, 0x23, 0xFA, + 0xDE, 0xF2, 0x9C, 0x8B, 0xA6, 0x32, 0x8D, 0xED, 0x97, 0xCC, 0x50, 0xB0, 0xB6, 0x1C, 0x89, 0x64, + 0xFC, 0xD7, 0xD0, 0x19, 0x01, 0x50, 0xD9, 0xBC, 0x78, 0xB1, 0x76, 0x6D, 0x01, 0xF8, 0xEC, 0x68, + 0x97, 0x20, 0x32, 0xD0, 0x57, 0x76, 0x93, 0x73, 0xC9, 0x2B, 0x68, 0x9D, 0x5E, 0xE1, 0x70, 0xDD, + 0x6F, 0x3A, 0x09, 0x20, 0x63, 0xE9, 0xD9, 0x30, 0x05, 0x14, 0x4A, 0x76, 0xA7, 0x3E, 0x61, 0xCD, + 0x2F, 0x6D, 0xE3, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x79, 0x30, 0x77, 0x30, 0x0E, 0x06, 0x03, + 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x25, 0x06, 0x03, + 0x55, 0x1D, 0x25, 0x04, 0x1E, 0x30, 0x1C, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, + 0x4C, 0x09, 0x15, 0x01, 0x06, 0x0D, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x4C, 0x09, 0x15, + 0x01, 0xCE, 0x11, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, + 0x63, 0x69, 0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95, 0x54, 0x07, 0xC4, 0xC5, 0x2A, + 0xD2, 0xA9, 0x2D, 0x2F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x09, + 0x10, 0xEE, 0x7B, 0xB0, 0x56, 0xB0, 0xCE, 0x42, 0x83, 0x84, 0x90, 0x70, 0xAF, 0x8D, 0x58, 0x1B, + 0x77, 0x43, 0x0E, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, + 0x48, 0x00, 0x30, 0x45, 0x02, 0x21, 0x00, 0xEE, 0x2A, 0x00, 0x7E, 0xC6, 0x4E, 0x6F, 0x22, 0xCC, + 0x16, 0xEA, 0xAC, 0x90, 0x3D, 0xD7, 0x6E, 0xAA, 0xBF, 0x7E, 0xC7, 0x45, 0x3F, 0x36, 0x22, 0x81, + 0xC6, 0x38, 0xD3, 0x1E, 0xDF, 0x5F, 0x2C, 0x02, 0x20, 0x21, 0xEC, 0xCF, 0x78, 0x1D, 0xDB, 0x4F, + 0x50, 0xE8, 0xD6, 0x07, 0xB0, 0x6A, 0xE9, 0x1E, 0xBF, 0x9C, 0xE8, 0xB9, 0xF7, 0xC6, 0xEA, 0x04, + 0x7B, 0x5E, 0xD8, 0x67, 0xAB, 0xD2, 0xDE, 0x77, 0xB9, 0x31, 0x82, 0x01, 0x65, 0x30, 0x82, 0x01, + 0x61, 0x02, 0x01, 0x01, 0x30, 0x3A, 0x30, 0x26, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, + 0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, + 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x02, 0x10, + 0x1F, 0x65, 0xF1, 0x29, 0x3B, 0x89, 0x6A, 0xBF, 0x43, 0xAF, 0xC7, 0x30, 0x36, 0xD1, 0x0D, 0x2B, + 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, + 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x1F, 0x7F, 0x30, 0xDC, 0xD4, 0x12, 0x9D, 0x0B, 0x71, 0x30, 0x69, 0x91, 0xCC, 0x8A, + 0xFB, 0xF6, 0x54, 0x14, 0x4C, 0x0B, 0x78, 0xCE, 0xD3, 0xC6, 0xCE, 0x3E, 0xAC, 0xCC, 0x0F, 0xCE, + 0x3A, 0xFC, 0x63, 0x96, 0xD2, 0x7B, 0xDB, 0xF7, 0xE7, 0x6D, 0x64, 0x52, 0x5C, 0x5D, 0x19, 0xBF, + 0xE3, 0x04, 0x71, 0x8A, 0xD1, 0x2A, 0xB6, 0x5A, 0x8C, 0xFC, 0xE2, 0x51, 0x27, 0x64, 0x9B, 0xA8, + 0x84, 0x69, 0x60, 0x4E, 0x56, 0x83, 0x91, 0x4F, 0xEB, 0x5A, 0xB7, 0x73, 0xE1, 0xAC, 0x24, 0xD2, + 0x60, 0xD8, 0x58, 0x21, 0x51, 0x7B, 0x87, 0x93, 0x5B, 0x5F, 0x91, 0x4B, 0x8C, 0xFE, 0xA5, 0x16, + 0x2E, 0x33, 0x4D, 0xBB, 0x0C, 0x95, 0x5C, 0xC3, 0x9C, 0x3D, 0xBB, 0x58, 0x17, 0x39, 0x1E, 0x10, + 0x47, 0xCD, 0xEE, 0xD3, 0xE7, 0x73, 0x44, 0x7D, 0x35, 0xD9, 0x9F, 0xC3, 0xAC, 0x11, 0x2E, 0x29, + 0x54, 0x80, 0x8F, 0x19, 0xDC, 0xC3, 0x11, 0x3D, 0x75, 0xF0, 0x3B, 0x34, 0x63, 0xB1, 0x59, 0x1D, + 0x4B, 0x66, 0xBE, 0xB8, 0xAC, 0x36, 0x71, 0x63, 0xD4, 0x41, 0xCF, 0x24, 0x2A, 0x3F, 0xC5, 0x25, + 0xD2, 0x45, 0x9B, 0xD3, 0x77, 0xD8, 0xD8, 0x1A, 0xC6, 0xAE, 0xE3, 0xF5, 0xC5, 0xEB, 0xF3, 0x92, + 0x27, 0x3C, 0x3F, 0x48, 0x96, 0xF2, 0xB4, 0x66, 0x0A, 0xFB, 0xBF, 0x76, 0xDC, 0x1E, 0xC5, 0xC6, + 0x4D, 0xA1, 0x5C, 0x13, 0x22, 0xF8, 0x89, 0xE2, 0x15, 0x43, 0x84, 0xEF, 0xC8, 0x30, 0xE5, 0xF0, + 0xBA, 0x51, 0x96, 0x3E, 0xF9, 0xCB, 0x41, 0xE6, 0x36, 0xD4, 0xE3, 0xDA, 0x71, 0xC8, 0x5E, 0x43, + 0x7A, 0xBE, 0x8E, 0xC0, 0xA5, 0xEF, 0x66, 0xFD, 0x63, 0xD3, 0xF1, 0xBF, 0x66, 0x4F, 0x35, 0x24, + 0x66, 0xC9, 0xCD, 0x1E, 0x3D, 0x71, 0x19, 0x84, 0x1A, 0x9D, 0xA5, 0x56, 0xF4, 0xF9, 0xE0, 0x88, + 0x7C, 0x52, +}; + +// +// This is TestSignEKUsWith1CertInSignature.bin.p7b in byte array format. +// It has one EKU in it: +// "1.3.6.1.4.1.311.76.9.21.1" +// +CONST UINT8 TestSignEKUsWith1CertInSignature[] = +{ + 0x30, 0x82, 0x02, 0x7D, 0x02, 0x01, 0x01, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x01, 0xB2, 0x30, 0x82, 0x01, 0xAE, 0x30, 0x82, 0x01, + 0x53, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x3E, 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96, + 0x41, 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x04, 0x03, 0x02, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, + 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49, + 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, + 0x31, 0x35, 0x31, 0x37, 0x33, 0x35, 0x35, 0x30, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31, + 0x35, 0x31, 0x37, 0x34, 0x35, 0x35, 0x30, 0x5A, 0x30, 0x23, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03, + 0x55, 0x04, 0x03, 0x0C, 0x18, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, + 0x69, 0x6E, 0x67, 0x4C, 0x65, 0x61, 0x66, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x30, 0x59, 0x30, + 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xF6, 0xEA, 0x5E, 0x14, 0x20, 0x6D, 0x11, 0xC0, + 0xFD, 0xF9, 0xB9, 0xB5, 0x8F, 0xBB, 0x3E, 0x8B, 0xE8, 0x21, 0x21, 0x3A, 0xC2, 0xBA, 0x37, 0x24, + 0x61, 0x14, 0x7E, 0xA8, 0x86, 0x0A, 0x5C, 0xD3, 0x5F, 0xA8, 0xDC, 0x3A, 0x06, 0x30, 0x53, 0xFC, + 0x85, 0xBC, 0x60, 0x5C, 0x28, 0x07, 0xCA, 0x12, 0x40, 0xE8, 0x97, 0x6A, 0x63, 0x30, 0xF7, 0x37, + 0x25, 0x76, 0x4D, 0xA9, 0x1A, 0x8C, 0x36, 0xAA, 0xA3, 0x6A, 0x30, 0x68, 0x30, 0x0E, 0x06, 0x03, + 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03, + 0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, + 0x4C, 0x09, 0x15, 0x01, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, + 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, 0x9C, + 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, + 0xE8, 0x47, 0x05, 0xA2, 0x59, 0xE9, 0x89, 0x81, 0xF4, 0xC8, 0x0D, 0x4C, 0x0A, 0xD3, 0xD4, 0xDE, + 0x9F, 0xA6, 0xC7, 0x79, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, + 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x8C, 0x39, 0xC6, 0x6C, 0xD6, 0x8F, 0x20, 0xA5, + 0x85, 0x97, 0x27, 0xF9, 0xB5, 0x26, 0xA2, 0xAB, 0xEC, 0x2E, 0x1B, 0x6F, 0x6F, 0x79, 0x9F, 0x8D, + 0xCE, 0x9D, 0x12, 0x23, 0x5F, 0x04, 0xFA, 0xBE, 0x02, 0x21, 0x00, 0xC5, 0xD8, 0x49, 0xD1, 0x40, + 0xE3, 0x2C, 0xDF, 0xC3, 0xD4, 0x11, 0xF9, 0x5E, 0x10, 0x8A, 0x3C, 0x4E, 0xA0, 0xD6, 0x6B, 0x8C, + 0x0E, 0x7B, 0xF1, 0x2B, 0x20, 0x9C, 0x68, 0x53, 0x43, 0x4B, 0x35, 0x31, 0x81, 0xA3, 0x30, 0x81, + 0xA0, 0x02, 0x01, 0x01, 0x30, 0x36, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04, + 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, + 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x02, 0x10, 0x3E, 0xEE, 0x4B, 0xFB, + 0x00, 0x35, 0xC8, 0x96, 0x41, 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30, 0x0D, 0x06, 0x09, + 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x07, 0x2A, + 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x05, 0x00, 0x04, 0x47, 0x30, 0x45, 0x02, 0x21, 0x00, 0xB8, + 0xCC, 0x0F, 0xD2, 0x50, 0x47, 0x3A, 0x11, 0x8D, 0xAE, 0x6C, 0xE9, 0x03, 0x64, 0xA7, 0x44, 0xE6, + 0x0F, 0xF8, 0x6F, 0x7E, 0xE7, 0x61, 0x25, 0x8C, 0x67, 0xE8, 0xC2, 0xD6, 0x33, 0x91, 0x62, 0x02, + 0x20, 0x78, 0xF8, 0x94, 0x0F, 0x46, 0xD2, 0xE2, 0x2B, 0x33, 0xAF, 0xBD, 0x38, 0xA4, 0x43, 0xA6, + 0x6F, 0x8A, 0xBE, 0x26, 0xDC, 0xD0, 0x82, 0x01, 0x3D, 0x00, 0xF3, 0xC2, 0x07, 0x8A, 0xE8, 0xFD, + 0x18, +}; + +// +// This is TestSignEKUsWith2CertsInSignature.bin.p7b in byte array format. +// It has one EKU in it: +// "1.3.6.1.4.1.311.76.9.21.1" +// +CONST UINT8 TestSignEKUsWith2CertsInSignature[] = +{ + 0x30, 0x82, 0x04, 0x61, 0x02, 0x01, 0x01, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x03, 0x96, 0x30, 0x82, 0x01, 0xAE, 0x30, 0x82, 0x01, + 0x53, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x3E, 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96, + 0x41, 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x04, 0x03, 0x02, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, + 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49, + 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, + 0x31, 0x35, 0x31, 0x37, 0x33, 0x35, 0x35, 0x30, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31, + 0x35, 0x31, 0x37, 0x34, 0x35, 0x35, 0x30, 0x5A, 0x30, 0x23, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03, + 0x55, 0x04, 0x03, 0x0C, 0x18, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, + 0x69, 0x6E, 0x67, 0x4C, 0x65, 0x61, 0x66, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x30, 0x59, 0x30, + 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xF6, 0xEA, 0x5E, 0x14, 0x20, 0x6D, 0x11, 0xC0, + 0xFD, 0xF9, 0xB9, 0xB5, 0x8F, 0xBB, 0x3E, 0x8B, 0xE8, 0x21, 0x21, 0x3A, 0xC2, 0xBA, 0x37, 0x24, + 0x61, 0x14, 0x7E, 0xA8, 0x86, 0x0A, 0x5C, 0xD3, 0x5F, 0xA8, 0xDC, 0x3A, 0x06, 0x30, 0x53, 0xFC, + 0x85, 0xBC, 0x60, 0x5C, 0x28, 0x07, 0xCA, 0x12, 0x40, 0xE8, 0x97, 0x6A, 0x63, 0x30, 0xF7, 0x37, + 0x25, 0x76, 0x4D, 0xA9, 0x1A, 0x8C, 0x36, 0xAA, 0xA3, 0x6A, 0x30, 0x68, 0x30, 0x0E, 0x06, 0x03, + 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03, + 0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, + 0x4C, 0x09, 0x15, 0x01, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, + 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, 0x9C, + 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, + 0xE8, 0x47, 0x05, 0xA2, 0x59, 0xE9, 0x89, 0x81, 0xF4, 0xC8, 0x0D, 0x4C, 0x0A, 0xD3, 0xD4, 0xDE, + 0x9F, 0xA6, 0xC7, 0x79, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, + 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x8C, 0x39, 0xC6, 0x6C, 0xD6, 0x8F, 0x20, 0xA5, + 0x85, 0x97, 0x27, 0xF9, 0xB5, 0x26, 0xA2, 0xAB, 0xEC, 0x2E, 0x1B, 0x6F, 0x6F, 0x79, 0x9F, 0x8D, + 0xCE, 0x9D, 0x12, 0x23, 0x5F, 0x04, 0xFA, 0xBE, 0x02, 0x21, 0x00, 0xC5, 0xD8, 0x49, 0xD1, 0x40, + 0xE3, 0x2C, 0xDF, 0xC3, 0xD4, 0x11, 0xF9, 0x5E, 0x10, 0x8A, 0x3C, 0x4E, 0xA0, 0xD6, 0x6B, 0x8C, + 0x0E, 0x7B, 0xF1, 0x2B, 0x20, 0x9C, 0x68, 0x53, 0x43, 0x4B, 0x35, 0x30, 0x82, 0x01, 0xE0, 0x30, + 0x82, 0x01, 0x65, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x79, 0x28, 0x1A, 0xE8, 0x7F, 0x21, + 0x4F, 0xBB, 0x47, 0x2F, 0x74, 0x75, 0xE6, 0x98, 0x60, 0xD6, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, + 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x21, 0x31, 0x1F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x04, + 0x03, 0x0C, 0x16, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, + 0x67, 0x50, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, + 0x38, 0x31, 0x35, 0x31, 0x37, 0x33, 0x32, 0x35, 0x34, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, + 0x31, 0x35, 0x31, 0x37, 0x34, 0x32, 0x35, 0x34, 0x5A, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, + 0x03, 0x55, 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, + 0x73, 0x69, 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30, 0x59, 0x30, + 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x66, 0x41, 0xE6, 0x86, 0x7D, 0x5B, 0x96, 0x6C, + 0x99, 0x2A, 0x82, 0x53, 0x58, 0xA3, 0x6F, 0x59, 0xFC, 0x1C, 0x9F, 0xEB, 0xBE, 0x9D, 0x53, 0xBA, + 0x50, 0x0F, 0x66, 0xBC, 0xE5, 0x90, 0x7E, 0xAA, 0xA2, 0x6C, 0xC2, 0xC9, 0xAA, 0x99, 0x0B, 0x04, + 0xA0, 0x6A, 0xB4, 0xC1, 0xF7, 0x55, 0x60, 0x58, 0xE3, 0xDE, 0x22, 0x57, 0xB1, 0x8A, 0x5C, 0xBC, + 0xDF, 0x22, 0x8A, 0x2B, 0x04, 0x7D, 0x7A, 0x6C, 0xA3, 0x7E, 0x30, 0x7C, 0x30, 0x0E, 0x06, 0x03, + 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x16, 0x06, 0x03, + 0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, + 0x4C, 0x09, 0x15, 0x01, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08, + 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, + 0x18, 0x30, 0x16, 0x80, 0x14, 0x0B, 0x8A, 0xC7, 0xA8, 0x53, 0x07, 0x40, 0x74, 0x75, 0x0F, 0x85, + 0xCE, 0x5D, 0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, + 0x04, 0x16, 0x04, 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40, + 0x3C, 0x3E, 0x9C, 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x04, 0x03, 0x02, 0x03, 0x69, 0x00, 0x30, 0x66, 0x02, 0x31, 0x00, 0xEE, 0x78, 0xDB, 0x74, + 0x56, 0xA3, 0xC2, 0x44, 0x25, 0x0F, 0xA1, 0x89, 0xC0, 0x76, 0xD1, 0xE4, 0xFE, 0xAA, 0xA4, 0xC3, + 0x7D, 0x40, 0xE3, 0x28, 0x1B, 0x0D, 0xAB, 0x32, 0x6B, 0x9A, 0x60, 0x37, 0x2F, 0xB6, 0xF4, 0xCB, + 0xEA, 0xC8, 0x65, 0xB6, 0xDC, 0x24, 0x90, 0x10, 0xFB, 0xD2, 0x42, 0x05, 0x02, 0x31, 0x00, 0x9E, + 0x91, 0xF9, 0x96, 0x8A, 0x41, 0x2C, 0x5E, 0x6B, 0xBC, 0x36, 0x05, 0x3B, 0x50, 0x11, 0x91, 0x9A, + 0xFA, 0x6B, 0x7F, 0x01, 0xF4, 0x6A, 0x7E, 0xCD, 0x98, 0x7E, 0x7D, 0xFD, 0xA8, 0xE3, 0xB2, 0x4F, + 0x71, 0x91, 0xF5, 0xE0, 0x82, 0xA5, 0xE7, 0x5A, 0xE8, 0x19, 0x09, 0xF6, 0x22, 0xBE, 0xC4, 0x31, + 0x81, 0xA3, 0x30, 0x81, 0xA0, 0x02, 0x01, 0x01, 0x30, 0x36, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, + 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, + 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x02, 0x10, + 0x3E, 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96, 0x41, 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB, + 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, + 0x0B, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x05, 0x00, 0x04, 0x47, 0x30, 0x45, + 0x02, 0x20, 0x4A, 0xFD, 0xAE, 0xDD, 0x5D, 0xC5, 0x86, 0x48, 0xDC, 0xC1, 0xC3, 0xA7, 0xE6, 0x4E, + 0x7F, 0x8B, 0x7B, 0xAB, 0x2C, 0x60, 0xDD, 0x79, 0x4C, 0xF2, 0x45, 0xED, 0x7A, 0xA5, 0x24, 0xE6, + 0x0E, 0x60, 0x02, 0x21, 0x00, 0xAD, 0xCA, 0x3C, 0x29, 0x2F, 0xF9, 0xB1, 0x8E, 0x58, 0x29, 0x3F, + 0x97, 0x20, 0x03, 0x6A, 0x14, 0xDA, 0x83, 0x4A, 0x8F, 0x3E, 0x95, 0x37, 0xC3, 0xF0, 0x12, 0x2A, + 0x7B, 0x24, 0x59, 0x69, 0x27, +}; + +// +// This is TestSignEKUsWith3CertsInSignature.bin.p7b +// It has one EKU in it: +// "1.3.6.1.4.1.311.76.9.21.1" +// +const UINT8 TestSignEKUsWith3CertsInSignature[] = +{ + 0x30, 0x82, 0x06, 0x65, 0x02, 0x01, 0x01, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x05, 0x9B, 0x30, 0x82, 0x01, 0xAE, 0x30, 0x82, 0x01, + 0x53, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x3E, 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96, + 0x41, 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x04, 0x03, 0x02, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, + 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49, + 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, + 0x31, 0x35, 0x31, 0x37, 0x33, 0x35, 0x35, 0x30, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31, + 0x35, 0x31, 0x37, 0x34, 0x35, 0x35, 0x30, 0x5A, 0x30, 0x23, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03, + 0x55, 0x04, 0x03, 0x0C, 0x18, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, + 0x69, 0x6E, 0x67, 0x4C, 0x65, 0x61, 0x66, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x30, 0x59, 0x30, + 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xF6, 0xEA, 0x5E, 0x14, 0x20, 0x6D, 0x11, 0xC0, + 0xFD, 0xF9, 0xB9, 0xB5, 0x8F, 0xBB, 0x3E, 0x8B, 0xE8, 0x21, 0x21, 0x3A, 0xC2, 0xBA, 0x37, 0x24, + 0x61, 0x14, 0x7E, 0xA8, 0x86, 0x0A, 0x5C, 0xD3, 0x5F, 0xA8, 0xDC, 0x3A, 0x06, 0x30, 0x53, 0xFC, + 0x85, 0xBC, 0x60, 0x5C, 0x28, 0x07, 0xCA, 0x12, 0x40, 0xE8, 0x97, 0x6A, 0x63, 0x30, 0xF7, 0x37, + 0x25, 0x76, 0x4D, 0xA9, 0x1A, 0x8C, 0x36, 0xAA, 0xA3, 0x6A, 0x30, 0x68, 0x30, 0x0E, 0x06, 0x03, + 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03, + 0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, + 0x4C, 0x09, 0x15, 0x01, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, + 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, 0x9C, + 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, + 0xE8, 0x47, 0x05, 0xA2, 0x59, 0xE9, 0x89, 0x81, 0xF4, 0xC8, 0x0D, 0x4C, 0x0A, 0xD3, 0xD4, 0xDE, + 0x9F, 0xA6, 0xC7, 0x79, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, + 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x8C, 0x39, 0xC6, 0x6C, 0xD6, 0x8F, 0x20, 0xA5, + 0x85, 0x97, 0x27, 0xF9, 0xB5, 0x26, 0xA2, 0xAB, 0xEC, 0x2E, 0x1B, 0x6F, 0x6F, 0x79, 0x9F, 0x8D, + 0xCE, 0x9D, 0x12, 0x23, 0x5F, 0x04, 0xFA, 0xBE, 0x02, 0x21, 0x00, 0xC5, 0xD8, 0x49, 0xD1, 0x40, + 0xE3, 0x2C, 0xDF, 0xC3, 0xD4, 0x11, 0xF9, 0x5E, 0x10, 0x8A, 0x3C, 0x4E, 0xA0, 0xD6, 0x6B, 0x8C, + 0x0E, 0x7B, 0xF1, 0x2B, 0x20, 0x9C, 0x68, 0x53, 0x43, 0x4B, 0x35, 0x30, 0x82, 0x01, 0xE0, 0x30, + 0x82, 0x01, 0x65, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x79, 0x28, 0x1A, 0xE8, 0x7F, 0x21, + 0x4F, 0xBB, 0x47, 0x2F, 0x74, 0x75, 0xE6, 0x98, 0x60, 0xD6, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, + 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x21, 0x31, 0x1F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x04, + 0x03, 0x0C, 0x16, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, + 0x67, 0x50, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, + 0x38, 0x31, 0x35, 0x31, 0x37, 0x33, 0x32, 0x35, 0x34, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, + 0x31, 0x35, 0x31, 0x37, 0x34, 0x32, 0x35, 0x34, 0x5A, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, + 0x03, 0x55, 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, + 0x73, 0x69, 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30, 0x59, 0x30, + 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x66, 0x41, 0xE6, 0x86, 0x7D, 0x5B, 0x96, 0x6C, + 0x99, 0x2A, 0x82, 0x53, 0x58, 0xA3, 0x6F, 0x59, 0xFC, 0x1C, 0x9F, 0xEB, 0xBE, 0x9D, 0x53, 0xBA, + 0x50, 0x0F, 0x66, 0xBC, 0xE5, 0x90, 0x7E, 0xAA, 0xA2, 0x6C, 0xC2, 0xC9, 0xAA, 0x99, 0x0B, 0x04, + 0xA0, 0x6A, 0xB4, 0xC1, 0xF7, 0x55, 0x60, 0x58, 0xE3, 0xDE, 0x22, 0x57, 0xB1, 0x8A, 0x5C, 0xBC, + 0xDF, 0x22, 0x8A, 0x2B, 0x04, 0x7D, 0x7A, 0x6C, 0xA3, 0x7E, 0x30, 0x7C, 0x30, 0x0E, 0x06, 0x03, + 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x16, 0x06, 0x03, + 0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, + 0x4C, 0x09, 0x15, 0x01, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08, + 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, + 0x18, 0x30, 0x16, 0x80, 0x14, 0x0B, 0x8A, 0xC7, 0xA8, 0x53, 0x07, 0x40, 0x74, 0x75, 0x0F, 0x85, + 0xCE, 0x5D, 0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, + 0x04, 0x16, 0x04, 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40, + 0x3C, 0x3E, 0x9C, 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x04, 0x03, 0x02, 0x03, 0x69, 0x00, 0x30, 0x66, 0x02, 0x31, 0x00, 0xEE, 0x78, 0xDB, 0x74, + 0x56, 0xA3, 0xC2, 0x44, 0x25, 0x0F, 0xA1, 0x89, 0xC0, 0x76, 0xD1, 0xE4, 0xFE, 0xAA, 0xA4, 0xC3, + 0x7D, 0x40, 0xE3, 0x28, 0x1B, 0x0D, 0xAB, 0x32, 0x6B, 0x9A, 0x60, 0x37, 0x2F, 0xB6, 0xF4, 0xCB, + 0xEA, 0xC8, 0x65, 0xB6, 0xDC, 0x24, 0x90, 0x10, 0xFB, 0xD2, 0x42, 0x05, 0x02, 0x31, 0x00, 0x9E, + 0x91, 0xF9, 0x96, 0x8A, 0x41, 0x2C, 0x5E, 0x6B, 0xBC, 0x36, 0x05, 0x3B, 0x50, 0x11, 0x91, 0x9A, + 0xFA, 0x6B, 0x7F, 0x01, 0xF4, 0x6A, 0x7E, 0xCD, 0x98, 0x7E, 0x7D, 0xFD, 0xA8, 0xE3, 0xB2, 0x4F, + 0x71, 0x91, 0xF5, 0xE0, 0x82, 0xA5, 0xE7, 0x5A, 0xE8, 0x19, 0x09, 0xF6, 0x22, 0xBE, 0xC4, 0x30, + 0x82, 0x02, 0x01, 0x30, 0x82, 0x01, 0x62, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x41, 0x02, + 0xBA, 0xF9, 0x87, 0x65, 0x6C, 0xB8, 0x4C, 0xD9, 0xA1, 0x04, 0x1C, 0x46, 0x4F, 0xE4, 0x30, 0x0A, + 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x1D, 0x31, 0x1B, 0x30, 0x19, + 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x12, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, + 0x72, 0x73, 0x69, 0x6E, 0x67, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, + 0x38, 0x31, 0x35, 0x31, 0x37, 0x32, 0x39, 0x32, 0x39, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, + 0x31, 0x35, 0x31, 0x37, 0x33, 0x39, 0x32, 0x39, 0x5A, 0x30, 0x21, 0x31, 0x1F, 0x30, 0x1D, 0x06, + 0x03, 0x55, 0x04, 0x03, 0x0C, 0x16, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, + 0x73, 0x69, 0x6E, 0x67, 0x50, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43, 0x41, 0x30, 0x76, 0x30, 0x10, + 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22, + 0x03, 0x62, 0x00, 0x04, 0xF9, 0xDC, 0xB9, 0x3F, 0xA8, 0xB5, 0x2B, 0x2E, 0xA7, 0xFC, 0x88, 0xC6, + 0xEF, 0x9C, 0x36, 0x61, 0x3E, 0xFF, 0x8A, 0x5A, 0x52, 0xFF, 0x5A, 0xD0, 0x2C, 0x08, 0xD6, 0x73, + 0x12, 0xF9, 0x62, 0x1E, 0x73, 0x76, 0x83, 0x49, 0xC8, 0xDE, 0xEB, 0x29, 0xA4, 0x78, 0x2A, 0xC1, + 0x30, 0x11, 0x0B, 0x2F, 0x38, 0x00, 0xB7, 0x6B, 0x6B, 0x8E, 0x8C, 0x4B, 0x33, 0x09, 0xF1, 0xEA, + 0xA4, 0x9E, 0x10, 0x4F, 0xC3, 0xBC, 0x30, 0x16, 0x1A, 0x8B, 0xD7, 0x9C, 0x14, 0x11, 0x4E, 0x56, + 0x64, 0x7E, 0x51, 0xE7, 0xDA, 0x26, 0x40, 0xB0, 0xD0, 0xF8, 0xF2, 0xB2, 0x5D, 0x8C, 0x8B, 0x49, + 0x0C, 0x4E, 0x58, 0xB0, 0xA3, 0x63, 0x30, 0x61, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, + 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, + 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, + 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x04, 0xA6, 0xCD, 0x4D, 0xAE, 0x9C, 0x17, 0xDB, 0xC8, 0x13, + 0x57, 0x2D, 0x72, 0x48, 0xAC, 0xBB, 0x6B, 0x1F, 0xFF, 0x61, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, + 0x0E, 0x04, 0x16, 0x04, 0x14, 0x0B, 0x8A, 0xC7, 0xA8, 0x53, 0x07, 0x40, 0x74, 0x75, 0x0F, 0x85, + 0xCE, 0x5D, 0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, + 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x81, 0x8C, 0x00, 0x30, 0x81, 0x88, 0x02, 0x42, 0x01, 0xB4, + 0x75, 0x0B, 0x2F, 0x2A, 0xAA, 0x77, 0x03, 0x08, 0xD9, 0x95, 0x13, 0x2C, 0xE8, 0x47, 0x69, 0x97, + 0xD1, 0x6B, 0xE0, 0x23, 0x94, 0xD5, 0x34, 0x8F, 0x80, 0x20, 0xE3, 0x72, 0x07, 0x7C, 0x6A, 0x52, + 0xE6, 0xF2, 0xC7, 0x85, 0xBD, 0xB6, 0x65, 0x8F, 0x61, 0x73, 0xF9, 0xE7, 0x3A, 0x31, 0x46, 0xC6, + 0xF2, 0xCE, 0xA7, 0x9E, 0xD0, 0xE2, 0xEF, 0x07, 0x59, 0xD0, 0xF1, 0xC4, 0xF6, 0x58, 0x9A, 0x16, + 0x02, 0x42, 0x00, 0x86, 0xE0, 0x25, 0xC1, 0x48, 0xD0, 0x33, 0x30, 0x55, 0xA8, 0x60, 0x44, 0xCA, + 0x47, 0x04, 0x93, 0x46, 0x81, 0xE9, 0x13, 0xE9, 0x67, 0x26, 0x23, 0x2A, 0xBD, 0xEF, 0xC4, 0xCC, + 0x12, 0x99, 0xB3, 0x9E, 0x3D, 0x78, 0xC8, 0x42, 0x06, 0x40, 0x48, 0xCA, 0x3D, 0xCC, 0xD7, 0xA2, + 0x35, 0x37, 0x76, 0x12, 0xDB, 0x9C, 0x90, 0xA4, 0xE4, 0x16, 0xAC, 0x5E, 0xD8, 0x04, 0xF1, 0x59, + 0x66, 0x85, 0xE2, 0x68, 0x31, 0x81, 0xA2, 0x30, 0x81, 0x9F, 0x02, 0x01, 0x01, 0x30, 0x36, 0x30, + 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, + 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, + 0x67, 0x43, 0x41, 0x02, 0x10, 0x3E, 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96, 0x41, 0xF4, 0xF6, + 0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, + 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x05, + 0x00, 0x04, 0x46, 0x30, 0x44, 0x02, 0x20, 0x52, 0x90, 0x02, 0x9E, 0xE8, 0xBF, 0xE8, 0x7E, 0x05, + 0x3B, 0xA3, 0x93, 0xDD, 0x6C, 0x35, 0x31, 0xA3, 0x29, 0x4F, 0x9A, 0x78, 0xEF, 0xD1, 0xAD, 0x07, + 0x37, 0x2D, 0x9A, 0x81, 0xFD, 0x7D, 0xFC, 0x02, 0x20, 0x4C, 0x8A, 0xA4, 0xBD, 0x63, 0x7B, 0x8A, + 0x2C, 0x9E, 0xFC, 0x2A, 0x0F, 0x91, 0xF4, 0x97, 0xB5, 0x3B, 0xC9, 0xD1, 0xCA, 0xEB, 0x02, 0x6A, + 0xB6, 0xFF, 0xE1, 0x15, 0xF5, 0xA2, 0x11, 0xF4, 0xD9, +}; + +// +// This signature was signed with a leaf that has no EKU's present in the certificate. +// +CONST UINT8 TestSignatureWithNoEKUsPresent[] = +{ + 0x30, 0x82, 0x07, 0xDB, 0x02, 0x01, 0x01, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x06, 0x51, 0x30, 0x82, 0x01, 0xE0, 0x30, 0x82, 0x01, + 0x65, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x79, 0x28, 0x1A, 0xE8, 0x7F, 0x21, 0x4F, 0xBB, + 0x47, 0x2F, 0x74, 0x75, 0xE6, 0x98, 0x60, 0xD6, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x04, 0x03, 0x02, 0x30, 0x21, 0x31, 0x1F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, + 0x16, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x50, + 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, 0x31, + 0x35, 0x31, 0x37, 0x33, 0x32, 0x35, 0x34, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31, 0x35, + 0x31, 0x37, 0x34, 0x32, 0x35, 0x34, 0x5A, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, + 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30, 0x59, 0x30, 0x13, 0x06, + 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, + 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x66, 0x41, 0xE6, 0x86, 0x7D, 0x5B, 0x96, 0x6C, 0x99, 0x2A, + 0x82, 0x53, 0x58, 0xA3, 0x6F, 0x59, 0xFC, 0x1C, 0x9F, 0xEB, 0xBE, 0x9D, 0x53, 0xBA, 0x50, 0x0F, + 0x66, 0xBC, 0xE5, 0x90, 0x7E, 0xAA, 0xA2, 0x6C, 0xC2, 0xC9, 0xAA, 0x99, 0x0B, 0x04, 0xA0, 0x6A, + 0xB4, 0xC1, 0xF7, 0x55, 0x60, 0x58, 0xE3, 0xDE, 0x22, 0x57, 0xB1, 0x8A, 0x5C, 0xBC, 0xDF, 0x22, + 0x8A, 0x2B, 0x04, 0x7D, 0x7A, 0x6C, 0xA3, 0x7E, 0x30, 0x7C, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, + 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x16, 0x06, 0x03, 0x55, 0x1D, + 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x4C, 0x09, + 0x15, 0x01, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08, 0x30, 0x06, + 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, + 0x16, 0x80, 0x14, 0x0B, 0x8A, 0xC7, 0xA8, 0x53, 0x07, 0x40, 0x74, 0x75, 0x0F, 0x85, 0xCE, 0x5D, + 0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, + 0x04, 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, + 0x9C, 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, + 0x03, 0x02, 0x03, 0x69, 0x00, 0x30, 0x66, 0x02, 0x31, 0x00, 0xEE, 0x78, 0xDB, 0x74, 0x56, 0xA3, + 0xC2, 0x44, 0x25, 0x0F, 0xA1, 0x89, 0xC0, 0x76, 0xD1, 0xE4, 0xFE, 0xAA, 0xA4, 0xC3, 0x7D, 0x40, + 0xE3, 0x28, 0x1B, 0x0D, 0xAB, 0x32, 0x6B, 0x9A, 0x60, 0x37, 0x2F, 0xB6, 0xF4, 0xCB, 0xEA, 0xC8, + 0x65, 0xB6, 0xDC, 0x24, 0x90, 0x10, 0xFB, 0xD2, 0x42, 0x05, 0x02, 0x31, 0x00, 0x9E, 0x91, 0xF9, + 0x96, 0x8A, 0x41, 0x2C, 0x5E, 0x6B, 0xBC, 0x36, 0x05, 0x3B, 0x50, 0x11, 0x91, 0x9A, 0xFA, 0x6B, + 0x7F, 0x01, 0xF4, 0x6A, 0x7E, 0xCD, 0x98, 0x7E, 0x7D, 0xFD, 0xA8, 0xE3, 0xB2, 0x4F, 0x71, 0x91, + 0xF5, 0xE0, 0x82, 0xA5, 0xE7, 0x5A, 0xE8, 0x19, 0x09, 0xF6, 0x22, 0xBE, 0xC4, 0x30, 0x82, 0x02, + 0x01, 0x30, 0x82, 0x01, 0x62, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x41, 0x02, 0xBA, 0xF9, + 0x87, 0x65, 0x6C, 0xB8, 0x4C, 0xD9, 0xA1, 0x04, 0x1C, 0x46, 0x4F, 0xE4, 0x30, 0x0A, 0x06, 0x08, + 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x1D, 0x31, 0x1B, 0x30, 0x19, 0x06, 0x03, + 0x55, 0x04, 0x03, 0x0C, 0x12, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, + 0x69, 0x6E, 0x67, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, 0x31, + 0x35, 0x31, 0x37, 0x32, 0x39, 0x32, 0x39, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31, 0x35, + 0x31, 0x37, 0x33, 0x39, 0x32, 0x39, 0x5A, 0x30, 0x21, 0x31, 0x1F, 0x30, 0x1D, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x0C, 0x16, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, + 0x6E, 0x67, 0x50, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43, 0x41, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, + 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, + 0x00, 0x04, 0xF9, 0xDC, 0xB9, 0x3F, 0xA8, 0xB5, 0x2B, 0x2E, 0xA7, 0xFC, 0x88, 0xC6, 0xEF, 0x9C, + 0x36, 0x61, 0x3E, 0xFF, 0x8A, 0x5A, 0x52, 0xFF, 0x5A, 0xD0, 0x2C, 0x08, 0xD6, 0x73, 0x12, 0xF9, + 0x62, 0x1E, 0x73, 0x76, 0x83, 0x49, 0xC8, 0xDE, 0xEB, 0x29, 0xA4, 0x78, 0x2A, 0xC1, 0x30, 0x11, + 0x0B, 0x2F, 0x38, 0x00, 0xB7, 0x6B, 0x6B, 0x8E, 0x8C, 0x4B, 0x33, 0x09, 0xF1, 0xEA, 0xA4, 0x9E, + 0x10, 0x4F, 0xC3, 0xBC, 0x30, 0x16, 0x1A, 0x8B, 0xD7, 0x9C, 0x14, 0x11, 0x4E, 0x56, 0x64, 0x7E, + 0x51, 0xE7, 0xDA, 0x26, 0x40, 0xB0, 0xD0, 0xF8, 0xF2, 0xB2, 0x5D, 0x8C, 0x8B, 0x49, 0x0C, 0x4E, + 0x58, 0xB0, 0xA3, 0x63, 0x30, 0x61, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, + 0x04, 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, + 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, + 0x30, 0x16, 0x80, 0x14, 0x04, 0xA6, 0xCD, 0x4D, 0xAE, 0x9C, 0x17, 0xDB, 0xC8, 0x13, 0x57, 0x2D, + 0x72, 0x48, 0xAC, 0xBB, 0x6B, 0x1F, 0xFF, 0x61, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, + 0x16, 0x04, 0x14, 0x0B, 0x8A, 0xC7, 0xA8, 0x53, 0x07, 0x40, 0x74, 0x75, 0x0F, 0x85, 0xCE, 0x5D, + 0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, + 0x04, 0x03, 0x02, 0x03, 0x81, 0x8C, 0x00, 0x30, 0x81, 0x88, 0x02, 0x42, 0x01, 0xB4, 0x75, 0x0B, + 0x2F, 0x2A, 0xAA, 0x77, 0x03, 0x08, 0xD9, 0x95, 0x13, 0x2C, 0xE8, 0x47, 0x69, 0x97, 0xD1, 0x6B, + 0xE0, 0x23, 0x94, 0xD5, 0x34, 0x8F, 0x80, 0x20, 0xE3, 0x72, 0x07, 0x7C, 0x6A, 0x52, 0xE6, 0xF2, + 0xC7, 0x85, 0xBD, 0xB6, 0x65, 0x8F, 0x61, 0x73, 0xF9, 0xE7, 0x3A, 0x31, 0x46, 0xC6, 0xF2, 0xCE, + 0xA7, 0x9E, 0xD0, 0xE2, 0xEF, 0x07, 0x59, 0xD0, 0xF1, 0xC4, 0xF6, 0x58, 0x9A, 0x16, 0x02, 0x42, + 0x00, 0x86, 0xE0, 0x25, 0xC1, 0x48, 0xD0, 0x33, 0x30, 0x55, 0xA8, 0x60, 0x44, 0xCA, 0x47, 0x04, + 0x93, 0x46, 0x81, 0xE9, 0x13, 0xE9, 0x67, 0x26, 0x23, 0x2A, 0xBD, 0xEF, 0xC4, 0xCC, 0x12, 0x99, + 0xB3, 0x9E, 0x3D, 0x78, 0xC8, 0x42, 0x06, 0x40, 0x48, 0xCA, 0x3D, 0xCC, 0xD7, 0xA2, 0x35, 0x37, + 0x76, 0x12, 0xDB, 0x9C, 0x90, 0xA4, 0xE4, 0x16, 0xAC, 0x5E, 0xD8, 0x04, 0xF1, 0x59, 0x66, 0x85, + 0xE2, 0x68, 0x30, 0x82, 0x02, 0x64, 0x30, 0x82, 0x02, 0x0A, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, + 0x10, 0x2B, 0x7B, 0xDA, 0xCD, 0x87, 0xA0, 0xFD, 0x81, 0x49, 0x5E, 0x0E, 0xDD, 0x4F, 0x81, 0x48, + 0x2D, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x22, 0x31, + 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, + 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, + 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, 0x32, 0x33, 0x31, 0x39, 0x33, 0x30, 0x30, + 0x32, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x32, 0x33, 0x31, 0x39, 0x34, 0x30, 0x30, 0x32, + 0x5A, 0x30, 0x27, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1C, 0x54, 0x65, + 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x4E, 0x6F, 0x45, 0x4B, + 0x55, 0x73, 0x49, 0x6E, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, + 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, + 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0xA5, 0x9B, 0x95, 0xF0, 0x63, + 0x88, 0xC3, 0x74, 0x26, 0x08, 0x68, 0x25, 0xAA, 0x16, 0xBB, 0x2A, 0x15, 0xC1, 0xA2, 0xAF, 0x72, + 0x06, 0x51, 0x37, 0xE1, 0x4F, 0x6D, 0x6A, 0xFC, 0x17, 0xCE, 0x82, 0x7B, 0x79, 0xFF, 0x2A, 0x84, + 0x0F, 0xCB, 0xA9, 0x65, 0x70, 0xC9, 0xF9, 0xE7, 0x61, 0x90, 0x28, 0x03, 0x6E, 0x41, 0x25, 0xFF, + 0xC2, 0x3A, 0x60, 0x1A, 0x42, 0x37, 0x80, 0x9F, 0x6B, 0x99, 0x11, 0x5A, 0x1F, 0xAE, 0x7B, 0x3F, + 0xF3, 0x2B, 0x45, 0xDD, 0xDA, 0xC4, 0x32, 0xD7, 0xD8, 0xB5, 0x3D, 0x46, 0x0C, 0x8A, 0x11, 0xEE, + 0x94, 0x8C, 0xB5, 0x69, 0xD3, 0x91, 0x4F, 0x4E, 0xE5, 0xBB, 0x93, 0xDD, 0x1E, 0xA7, 0x20, 0x03, + 0xFD, 0xD6, 0x8F, 0x76, 0x91, 0x9A, 0x2B, 0x41, 0x91, 0xD8, 0x35, 0x7A, 0x0D, 0x80, 0xB9, 0xD4, + 0xD2, 0x56, 0xF1, 0xF9, 0xC5, 0xE6, 0xF2, 0xAE, 0x10, 0x7E, 0xD7, 0x6C, 0x40, 0x86, 0x37, 0x99, + 0x85, 0xF4, 0xCA, 0x1D, 0x6D, 0x90, 0x63, 0xF7, 0x63, 0xC6, 0x00, 0xA1, 0xA9, 0x79, 0x7D, 0x88, + 0x05, 0xA2, 0x92, 0x64, 0xA7, 0x8E, 0xA8, 0x9E, 0xC3, 0x1F, 0x63, 0xEE, 0x6C, 0xE3, 0x9B, 0xA6, + 0xD7, 0x9D, 0x9C, 0x9F, 0x0D, 0x7A, 0xF7, 0x00, 0x92, 0x16, 0xE8, 0x64, 0x36, 0x07, 0x66, 0x8E, + 0x6E, 0x51, 0x09, 0x3F, 0x2A, 0xD6, 0x6D, 0x4E, 0xCC, 0x49, 0xE1, 0xC3, 0x59, 0x63, 0xDC, 0x51, + 0xAA, 0xD1, 0xE7, 0x42, 0x2F, 0x72, 0x25, 0x46, 0x83, 0x7D, 0x23, 0xCE, 0xF7, 0x96, 0x2F, 0x04, + 0xE8, 0xAE, 0xF6, 0x19, 0x6D, 0x2D, 0xB2, 0x64, 0xDB, 0x69, 0x33, 0x96, 0x58, 0xA0, 0x6C, 0x77, + 0xF0, 0xD0, 0x5E, 0x36, 0xB1, 0x28, 0x89, 0x83, 0xB6, 0xA5, 0x13, 0x0E, 0x6B, 0x6E, 0x73, 0x2C, + 0x6F, 0xDA, 0xF9, 0x6C, 0x11, 0x4F, 0xCC, 0xF7, 0x89, 0x77, 0x83, 0x02, 0x03, 0x01, 0x00, 0x01, + 0xA3, 0x52, 0x30, 0x50, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, + 0x03, 0x02, 0x01, 0x86, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, + 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, 0x9C, + 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, + 0xB6, 0xAF, 0x0D, 0xC1, 0xBE, 0xD1, 0xE4, 0x21, 0x37, 0xFF, 0xAC, 0x7D, 0x2D, 0xD4, 0x51, 0x8A, + 0x61, 0x95, 0x50, 0x7F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, + 0x03, 0x48, 0x00, 0x30, 0x45, 0x02, 0x20, 0x74, 0x7D, 0xF5, 0xAF, 0xC3, 0xA7, 0x06, 0x99, 0x1F, + 0x2C, 0xAF, 0x69, 0xAA, 0x40, 0x97, 0xE9, 0xF8, 0x4C, 0xD2, 0x71, 0x17, 0x25, 0x85, 0xB7, 0xA6, + 0x97, 0x61, 0x89, 0x82, 0xED, 0xF0, 0xF6, 0x02, 0x21, 0x00, 0xA6, 0xF4, 0x59, 0x85, 0x53, 0x31, + 0xEF, 0x6F, 0x37, 0xB6, 0x8E, 0xA2, 0xDE, 0xC3, 0xFD, 0xD6, 0xFB, 0x50, 0x63, 0x4E, 0xB4, 0xBB, + 0xC1, 0xB1, 0x07, 0x82, 0x80, 0x14, 0x28, 0x6A, 0x94, 0x94, 0x31, 0x82, 0x01, 0x61, 0x30, 0x82, + 0x01, 0x5D, 0x02, 0x01, 0x01, 0x30, 0x36, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, + 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x02, 0x10, 0x2B, 0x7B, 0xDA, + 0xCD, 0x87, 0xA0, 0xFD, 0x81, 0x49, 0x5E, 0x0E, 0xDD, 0x4F, 0x81, 0x48, 0x2D, 0x30, 0x0D, 0x06, + 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0D, 0x06, 0x09, + 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0x39, + 0xEC, 0xA8, 0x00, 0x4F, 0x7E, 0x2C, 0x3C, 0x48, 0xDF, 0x6F, 0x6A, 0x37, 0x69, 0xA4, 0xB1, 0xEB, + 0x7D, 0xD2, 0x3B, 0xC5, 0xEE, 0x57, 0x1F, 0x8F, 0xCA, 0x60, 0x80, 0x88, 0x24, 0x29, 0xB5, 0x00, + 0x28, 0xFF, 0x8F, 0x0A, 0x1E, 0xB0, 0x9E, 0x90, 0x09, 0xF1, 0x46, 0xC1, 0x53, 0xE8, 0x27, 0x29, + 0xFA, 0xFE, 0xA3, 0x84, 0x79, 0xB2, 0x27, 0x46, 0x9B, 0xD8, 0x33, 0xBD, 0x8F, 0x41, 0x06, 0xEE, + 0xD6, 0xE7, 0x49, 0xAF, 0x48, 0xD0, 0xD4, 0xF1, 0x06, 0xCC, 0xD3, 0x26, 0x47, 0xAE, 0x03, 0x7A, + 0xA5, 0xAF, 0xDE, 0x7F, 0x57, 0x32, 0x51, 0x49, 0x8C, 0x18, 0xD2, 0x4D, 0x50, 0x27, 0xAC, 0x7C, + 0x33, 0xB8, 0xB8, 0x1C, 0xF8, 0x0C, 0x49, 0xEB, 0xF5, 0xD7, 0xA0, 0x35, 0x77, 0x61, 0xC0, 0x60, + 0xAF, 0x23, 0x8C, 0xCC, 0xB0, 0x58, 0xB3, 0x08, 0x89, 0x2B, 0xC0, 0x61, 0x0C, 0xA6, 0x40, 0x7A, + 0x37, 0x6D, 0x6D, 0x44, 0xFF, 0xF1, 0xCE, 0xDE, 0x7A, 0x0C, 0xC4, 0x51, 0x61, 0xE6, 0x72, 0x6B, + 0xA9, 0x6A, 0x7B, 0xCF, 0xAA, 0x9A, 0x28, 0x74, 0x87, 0x30, 0xBA, 0xED, 0x40, 0xF0, 0x75, 0x2B, + 0xD7, 0xE6, 0x9F, 0xDD, 0x6B, 0xB7, 0xEA, 0x08, 0x0D, 0x9F, 0xA3, 0x25, 0x27, 0xB7, 0xBF, 0x41, + 0xC2, 0x64, 0xB5, 0x6F, 0x8F, 0xB1, 0x5F, 0xE5, 0xDF, 0xCA, 0x16, 0x04, 0x61, 0xFF, 0x74, 0x25, + 0xEE, 0xF6, 0x69, 0xF1, 0x7F, 0xE5, 0x97, 0x72, 0x58, 0xD8, 0x9F, 0xA5, 0x19, 0x32, 0x46, 0x95, + 0x67, 0x63, 0x23, 0x54, 0x46, 0x05, 0x15, 0xC3, 0x3E, 0x04, 0x7E, 0x88, 0xD0, 0xB5, 0x52, 0xF0, + 0x38, 0x3C, 0x8B, 0xD4, 0x3D, 0x9A, 0x55, 0x1B, 0x14, 0xE5, 0x37, 0x8D, 0xB7, 0x6C, 0x39, 0x91, + 0x23, 0x31, 0x63, 0x89, 0x7C, 0x75, 0x02, 0x79, 0xCC, 0x95, 0x58, 0x99, 0x3A, 0xDB, 0xF5, +}; diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLib.h b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLib.h new file mode 100644 index 000000000000..9d1cb150a113 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLib.h @@ -0,0 +1,121 @@ +/** @file + Application for Cryptographic Primitives Validation. + +Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR> +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef __CRYPTEST_H__ +#define __CRYPTEST_H__ + +#include <PiPei.h> +#include <Uefi.h> +#include <Library/UefiLib.h> +#include <Library/DebugLib.h> +#include <Library/UnitTestLib.h> +#include <Library/PrintLib.h> +#include <Library/BaseCryptLib.h> +#include <Library/BaseLib.h> +#include <Library/BaseMemoryLib.h> +#include <Library/MemoryAllocationLib.h> +//#include <UnitTestTypes.h> +#include <Library/UnitTestLib.h> +//#include <Library/UnitTestAssertLib.h> + +#define UNIT_TEST_NAME "BaseCryptLib Unit Test" +#define UNIT_TEST_VERSION "1.0" + +typedef struct { + CHAR8 *Description; + CHAR8 *ClassName; + UNIT_TEST_FUNCTION Func; + UNIT_TEST_PREREQUISITE PreReq; + UNIT_TEST_CLEANUP CleanUp; + UNIT_TEST_CONTEXT Context; +} TEST_DESC; + +typedef struct { + CHAR8 *Title; + CHAR8 *Package; + UNIT_TEST_SUITE_SETUP Sup; + UNIT_TEST_SUITE_TEARDOWN Tdn; + UINTN *TestNum; + TEST_DESC *TestDesc; +} SUITE_DESC; + +extern UINTN mPkcs7EkuTestNum; +extern TEST_DESC mPkcs7EkuTest[]; + +extern UINTN mHashTestNum; +extern TEST_DESC mHashTest[]; + +extern UINTN mHmacTestNum; +extern TEST_DESC mHmacTest[]; + +extern UINTN mBlockCipherTestNum; +extern TEST_DESC mBlockCipherTest[]; + +extern UINTN mRsaTestNum; +extern TEST_DESC mRsaTest[]; + +extern UINTN mRsaCertTestNum; +extern TEST_DESC mRsaCertTest[]; + +extern UINTN mPkcs7TestNum; +extern TEST_DESC mPkcs7Test[]; + +extern UINTN mPkcs5TestNum; +extern TEST_DESC mPkcs5Test[]; + +extern UINTN mAuthenticodeTestNum; +extern TEST_DESC mAuthenticodeTest[]; + +extern UINTN mImageTimestampTestNum; +extern TEST_DESC mImageTimestampTest[]; + +extern UINTN mDhTestNum; +extern TEST_DESC mDhTest[]; + +extern UINTN mPrngTestNum; +extern TEST_DESC mPrngTest[]; + +extern UINTN mOaepTestNum; +extern TEST_DESC mOaepTest[]; + +/** Creates a framework you can use */ +EFI_STATUS +EFIAPI +CreateUnitTest ( + IN CHAR8* UnitTestName, + IN CHAR8* UnitTestVersion, + IN OUT UNIT_TEST_FRAMEWORK_HANDLE* Framework +); + +/** + Validate UEFI-OpenSSL DH Interfaces. + + @retval EFI_SUCCESS Validation succeeded. + @retval EFI_ABORTED Validation failed. + +**/ +EFI_STATUS +ValidateCryptDh ( + VOID + ); + +/** + Validate UEFI-OpenSSL pseudorandom number generator interfaces. + + @retval EFI_SUCCESS Validation succeeded. + @retval EFI_ABORTED Validation failed. + +**/ +EFI_STATUS +ValidateCryptPrng ( + VOID + ); + + + +#endif diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibHost.inf b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibHost.inf new file mode 100644 index 000000000000..300b98e40b33 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibHost.inf @@ -0,0 +1,46 @@ +## @file +# Host-based UnitTest for BaseCryptLib +# +# Copyright (c) Microsoft Corporation.<BR> +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = BaseCryptLibUnitTestHost + FILE_GUID = 0cb84598-824b-4833-b705-bdefdcbba1d5 + MODULE_TYPE = HOST_APPLICATION + VERSION_STRING = 1.0 + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 +# + +[Sources] + UnitTestMain.c + BaseCryptLibUnitTests.c + TestBaseCryptLib.h + HashTests.c + HmacTests.c + BlockCipherTests.c + RsaTests.c + RsaPkcs7Tests.c + Pkcs5Pbkdf2Tests.c + AuthenticodeTests.c + TSTests.c + DhTests.c + RandTests.c + Pkcs7EkuTests.c + OaepEncryptTests.c + +[Packages] + MdePkg/MdePkg.dec + CryptoPkg/CryptoPkg.dec + +[LibraryClasses] + BaseLib + DebugLib + BaseCryptLib + UnitTestLib diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibUefiShell.inf b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibUefiShell.inf new file mode 100644 index 000000000000..6cd4a31be2c8 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibUefiShell.inf @@ -0,0 +1,49 @@ +## @file +# BaseCryptLib UnitTest built for execution in UEFI Shell. +# +# Copyright (c) Microsoft Corporation.<BR> +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION = 0x00010006 + BASE_NAME = BaseCryptLibTestUefiShell + FILE_GUID = ed54ee8c-ef7a-41f2-83d5-0e0d4cd88c21 + MODULE_TYPE = UEFI_APPLICATION + VERSION_STRING = 1.0 + ENTRY_POINT = DxeEntryPoint + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 +# + +[Sources] + UnitTestMain.c + BaseCryptLibUnitTests.c + TestBaseCryptLib.h + HashTests.c + HmacTests.c + BlockCipherTests.c + RsaTests.c + RsaPkcs7Tests.c + Pkcs5Pbkdf2Tests.c + AuthenticodeTests.c + TSTests.c + DhTests.c + RandTests.c + Pkcs7EkuTests.c + OaepEncryptTests.c + +[Packages] + MdePkg/MdePkg.dec + CryptoPkg/CryptoPkg.dec + +[LibraryClasses] + UefiApplicationEntryPoint + BaseLib + DebugLib + UnitTestLib + PrintLib + BaseCryptLib diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/ChainCreationInstructions.txt b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/ChainCreationInstructions.txt new file mode 100644 index 000000000000..0ca6830516ea --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/ChainCreationInstructions.txt @@ -0,0 +1,92 @@ +-------------------------------------------------------------------------------- +File: ChainCreationInstructions.txt + +Description: This folder contains INI files that are required to generate + the following test cert chains. Certs will be copied onto the + file system AND MY store when they are generated by certreq.exe. + +Note that typically certreq.exe operates on INF files, but in this folder +we use INI files so that our build system does not complain about INF's being +in the tree, but not in the CryptoPkg.dsc file. + +To create your own certificates and signatures for testing, this file demonstrates +how the test certificate chains and signatures were created. + +To create test signatures, run SignFirmwareWithEKUs.cmd (with SignTool.exe in +your path). You can then use your favorite BinaryToHex converter to convert +the binary into a byte array that you can include in AllTestSignatures.h + +Copyright (C) Microsoft Corporation. All Rights Reserved. +-------------------------------------------------------------------------------- +Cert Chain: + + ------------------------------------------ + | | // Root of trust. ECDSA P521 curve + | TestEKUParsingRoot | // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE + | | // CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE + ------------------------------------------ + ^ + | + ------------------------------------------ + | | // Issues subordinate CAs. ECC P384 curve. + | TestEKUParsingPolicyCA | // SHA 256 Key Usage: + | | // CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE + ------------------------------------------ + ^ + | + ------------------------------------------ + | | // Issues end-entity (leaf) signers. ECC P256 curve. + | TestEKUParsingIssuingCA | // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE + | | // Enhanced Key Usage: + ------------------------------------------ // 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing) + ^ + | + -------------------------------------- + / / // Leaf signer, ECC P256 curve. + / TestEKUParsingLeafSigner / // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE + / / // Enhanced Key usages: + -------------------------------------- // 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing) + // 1.3.6.1.4.1.311.76.9.21.1.N, N == Product ID. + + + + +--------------------------------------------------------------------------------- + + +--- files required --- + +TestEKUParsingRoot.ini - This certificate is the root CA under which all CAs live. +TestEKUParsingPolicyCA.ini - This policy CA will issue subordinate CA's with EKU constraints. +TestEKUParsingIssuingCA.ini - CA to issue end-entity leafs. +TestEKUParsingLeafSigner.ini - End-Entity leaf signer. +TestEKUParsingLeafSignerPid12345.ini - End-Entity, with EKU: 1.3.6.1.4.1.311.76.9.21.1.12345. +TestEKUParsingNoEKUsInSigner.ini - Leaf with no EKU's specified. +TestEKUParsingLeafSignerPid1.ini - Test with naming files ini, to get around build complaints. +--- Commands to execute --- + +certreq.exe -new TestEKUParsingRoot.ini TestEKUParsingRoot.cer +certreq.exe -new -q -cert "TestEKUParsingRoot" TestEKUParsingPolicyCA.ini TestEKUParsingPolicyCA.cer +certreq.exe -new -q -cert "TestEKUParsingPolicyCA" TestEKUParsingIssuingCA.ini TestEKUParsingIssuingCA.cer +certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSigner.ini TestEKUParsingLeafSigner.cer +certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSignerPid12345.ini TestEKUParsingLeafSignerPid12345.cer +certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingNoEKUsInSigner.ini TestEKUParsingNoEKUsInSigner.cer +certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSignerPid1.ini TestEKUParsingLeafSignerPid1.cer + +--------------------------------------------------------------------------------- + +Then start mmc->Add certificates, Local Computer/open Personal/Certs and export the keys into the pfx files below. +Note: You should see a little key on the top left of each cert icon, which means you have the private key + for this cert. If you don't see it something is wrong. For each cert, right-click and do all tasks, + export. Yes, Export the private key. PCKS#12 format, include all certs in path if possible. + + If we automated the call to certreq above, there is a PowerShell "PKI" cmdlet which has + an Export-PfxCertificate command. + +Passwords: TestEKUParsingRoot.pfx == TestEKUParsingRoot + TestEKUParsingPolicyCA.pfx == TestEKUParsingPolicyCA + TestEKUParsingIssuingCA.pfx == TestEKUParsingIssuingCA + TestEKUParsingLeafSigner.pfx == TestEKUParsingLeafSigner + TestEKUParsingLeafSignerPid12345.pfx == TestEKUParsingLeafSignerPid12345 + TestEKUParsingNoEKUsInSigner.pfx == TestEKUParsingNoEKUsInSigner + diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/CreateTestCerts.cmd b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/CreateTestCerts.cmd new file mode 100644 index 000000000000..6d68afdab77d --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/CreateTestCerts.cmd @@ -0,0 +1,11 @@ +@ECHO OFF +REM +REM Use this file to create test certificates. +REM +call certreq.exe -new TestEKUParsingRoot.ini TestEKUParsingRoot.cer +call certreq.exe -new -q -cert "TestEKUParsingRoot" TestEKUParsingPolicyCA.ini TestEKUParsingPolicyCA.cer +call certreq.exe -new -q -cert "TestEKUParsingPolicyCA" TestEKUParsingIssuingCA.ini TestEKUParsingIssuingCA.cer +call certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSigner.ini TestEKUParsingLeafSigner.cer +call certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSignerPid12345.ini TestEKUParsingLeafSignerPid12345.cer +call certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingNoEKUsInSigner.ini TestEKUParsingNoEKUsInSigner.cer +call certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSignerPid1.ini TestEKUParsingLeafSignerPid1.cer diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/SignFirmwareWithEKUs.cmd b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/SignFirmwareWithEKUs.cmd new file mode 100644 index 000000000000..ce03e33a7169 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/SignFirmwareWithEKUs.cmd @@ -0,0 +1,76 @@ +@ECHO OFF +REM This script will use various certificates to sign blobs for testing purposes. +REM +REM +REM Our EKU test certificate chain: +REM ------------------------------------------ +REM | | // Root of trust. ECDSA P521 curve +REM | TestEKUParsingRoot | // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE +REM | | // CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE +REM ------------------------------------------ +REM ^ +REM | +REM ------------------------------------------ +REM | | // Issues subordinate CAs. ECC P384 curve. +REM | TestEKUParsingPolicyCA | // SHA 256 Key Usage: +REM | | // CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE +REM ------------------------------------------ +REM ^ +REM | +REM ------------------------------------------ +REM | | // Issues end-entity (leaf) signers. ECC P256 curve. +REM | TestEKUParsingIssuingCA | // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE +REM | | // Enhanced Key Usage: +REM ------------------------------------------ // 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing) +REM ^ +REM | +REM -------------------------------------- +REM / TestEKUParsingLeafSigner && / // Leaf signer, ECC P256 curve. +REM / TestEKUParsingLeafSignerPid12345 / // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE +REM / / // Enhanced Key usages: +REM -------------------------------------- // 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing) +REM // 1.3.6.1.4.1.311.76.9.21.1.N, N == Product ID. +REM +REM +REM +REM Dev Note: SignTool.exe must be in your path when running this script. + +del *.p7b +ECHO ------------------------------------------------------------------- +ECHO Press any key 4 times to append time to the test blobs to sign. +time >> TestSignWithOneEKUInLeafSigner.bin +time >> TestSignWithTwoEKUsInLeafSignerPid1.bin +time >> TestSignWithTwoEKUsInLeafSignerPid12345.bin +time >> TestSignWithNoEKUsInLeafSigner.bin + + +REM +REM Create a signature with TestEKUParsingLeafSigner.cer which has one EKU in it, +REM and add the Policy CA in the signature. +REM +call signtool.exe sign /fd sha256 /f TestEKUParsingLeafSigner.cer /p7 . /u 1.3.6.1.4.1.311.76.9.21.1 /ac TestEKUParsingPolicyCA.cer /p7co 1.2.840.113549.1.7.1 /p7ce DetachedSignedData /v /debug TestSignWithOneEKUInLeafSigner.bin + +REM +REM Create a signature with two EKU's in the leaf signer. (1.3.6.1.4.1.311.76.9.21.1, and 1.3.6.1.4.1.311.76.9.21.1.1) +REM +call signtool.exe sign /fd sha256 /f TestEKUParsingLeafSignerPid1.cer /p7 . /u 1.3.6.1.4.1.311.76.9.21.1.1 /p7co 1.2.840.113549.1.7.1 /p7ce DetachedSignedData /v /debug TestSignWithTwoEKUsInLeafSignerPid1.bin + +REM +REM Create a signature with two EKUs in the leaf (1.3.6.1.4.1.311.76.9.21.1, and 1.3.6.1.4.1.311.76.9.21.1.12345) +REM +call signtool.exe sign /fd sha256 /f TestEKUParsingLeafSignerPid12345.cer /p7 . /u 1.3.6.1.4.1.311.76.9.21.1.12345 /p7co 1.2.840.113549.1.7.1 /p7ce DetachedSignedData /v /debug TestSignWithTwoEKUsInLeafSignerPid12345.bin + + +REM +REM Create a signature with a leaf that does not have any EKUs in the signture. +REM +call signtool.exe sign /fd sha256 /f TestEKUParsingNoEKUsInSigner.cer /p7 . /p7co 1.2.840.113549.1.7.1 /p7ce DetachedSignedData /v /debug TestSignWithNoEKUsInLeafSigner.bin + +REM +REM Rename *.p7 to *.p7b +REM +rename *.p7 *.p7b +ECHO --------------------------------------------------------------------------- +ECHO Now you can use your favorite "Binary To Hex" converter to convert the +ECHO signatures (P7B files) to byte arrays and add them to AllTestSignatures.h +ECHO --------------------------------------------------------------------------- diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingIssuingCA.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingIssuingCA.ini new file mode 100644 index 000000000000..8576783473e9 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingIssuingCA.ini @@ -0,0 +1,45 @@ +[Version] +Signature="$Windows NT$ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; 2.5.29.19 == Basic Constraints for CA +[Strings] +szOID_BASIC_CONSTRAINTS2 = "2.5.29.19" + +[EnhancedKeyUsageExtension] +OID = 1.3.6.1.4.1.311.76.9.21.1 + +[NewRequest] +Subject = "CN=TestEKUParsingIssuingCA" +Exportable = true +KeyLength = 256 +HashAlgorithm = sha256 +KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE" +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG" +MachineKeySet = True +RequestType = cert +ValidityPeriodUnits = 20 +ValidityPeriod = Years +ProviderName = "Microsoft Software Key Storage Provider" +KeyAlgorithm = "ECDSA_P256" + + +[Extensions] +%szOID_BASIC_CONSTRAINTS2% = "{text}" + _continue_ = "ca=True" + +Critical=%szOID_BASIC_CONSTRAINTS2% + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; This extension is so the this CA is only allowed to +; issue end-entity certs. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[BasicConstraintsExtension] +PathLength=0 + +; +; Surface Firmware Signing EKU +; +[Extensions] + 2.5.29.37 = "{text}" + _continue_ = "1.3.6.1.4.1.311.76.9.21.1" + diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSigner.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSigner.ini new file mode 100644 index 000000000000..f501537343ca --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSigner.ini @@ -0,0 +1,25 @@ +[Version] +Signature="$Windows NT$ + +[EnhancedKeyUsageExtension] +OID = 1.3.6.1.4.1.311.76.9.21.1 + +[NewRequest] +Subject = "CN=TestEKUParsingLeafSigner" +Exportable = true +KeyLength = 256 +HashAlgorithm = sha256 +KeyUsage = "CERT_DIGITAL_SIGNATURE_KEY_USAGE" +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG" +MachineKeySet = True +RequestType = cert +ValidityPeriodUnits = 20 +ValidityPeriod = Years +ProviderName = "Microsoft Software Key Storage Provider" +KeyAlgorithm = "ECDSA_P256" + +; +; Surface test firwmare signing EKU +; +[Extensions] + _continue_ = "1.3.6.1.4.1.311.76.9.21.1" diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid1.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid1.ini new file mode 100644 index 000000000000..35aa78c493b0 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid1.ini @@ -0,0 +1,24 @@ +[Version] +Signature="$Windows NT$ + +[EnhancedKeyUsageExtension] +OID = 1.3.6.1.4.1.311.76.9.21.1 +OID = 1.3.6.1.4.1.311.76.9.21.1.1 + +[NewRequest] +Subject = "CN=TestEKUParsingLeafSignerPid1" +Exportable = true +KeyLength = 2048 +HashAlgorithm = sha256 +KeySpec = AT_SIGNATURE +KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_DIGITAL_SIGNATURE_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE" +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG" +MachineKeySet = True +RequestType = cert +ValidityPeriodUnits = 5 +ValidityPeriod = Years + +[Extensions] + 2.5.29.37 = "{text}" + _continue_ = "1.3.6.1.4.1.311.76.9.21.1," + _continue_ = "1.3.6.1.4.1.311.76.9.21.1.1" diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid12345.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid12345.ini new file mode 100644 index 000000000000..67c5741f4d26 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid12345.ini @@ -0,0 +1,27 @@ +[Version] +Signature="$Windows NT$ + +[EnhancedKeyUsageExtension] +OID = 1.3.6.1.4.1.311.76.9.21.1 +OID = 1.3.6.1.4.1.311.76.9.21.1.12345 + +[NewRequest] +Subject = "CN=TestEKUParsingLeafSignerPid12345" +Exportable = true +KeyLength = 2048 +HashAlgorithm = sha256 +KeySpec = AT_SIGNATURE +KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_DIGITAL_SIGNATURE_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE" +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG" +MachineKeySet = True +RequestType = cert +ValidityPeriodUnits = 5 +ValidityPeriod = Years + +[Extensions] + 2.5.29.37 = "{text}" + _continue_ = "1.3.6.1.4.1.311.76.9.21.1," + _continue_ = "1.3.6.1.4.1.311.76.9.21.1.12345" + + + diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingNoEKUsInSigner.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingNoEKUsInSigner.ini new file mode 100644 index 000000000000..60743b02a94b --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingNoEKUsInSigner.ini @@ -0,0 +1,16 @@ +[Version] +Signature="$Windows NT$ + + +[NewRequest] +Subject = "CN=TestEKUParsingNoEKUsInSigner" +Exportable = true +KeyLength = 2048 +HashAlgorithm = sha256 +KeySpec = AT_SIGNATURE +KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_DIGITAL_SIGNATURE_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE" +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG" +MachineKeySet = True +RequestType = cert +ValidityPeriodUnits = 20 +ValidityPeriod = Years diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingPolicyCA.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingPolicyCA.ini new file mode 100644 index 000000000000..2ccda66596bc --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingPolicyCA.ini @@ -0,0 +1,28 @@ +[Version] +Signature="$Windows NT$ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; 2.5.29.19 == Basic Constraints for CA +[Strings] +szOID_BASIC_CONSTRAINTS2 = "2.5.29.19" + +[NewRequest] +Subject = "CN=TestEKUParsingPolicyCA" +Exportable = true +KeyLength = 384 +HashAlgorithm = sha256 +KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE" +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG" +MachineKeySet = True +RequestType = cert +ValidityPeriodUnits = 20 +ValidityPeriod = Years +ProviderName = "Microsoft Software Key Storage Provider" +KeyAlgorithm = "ECDSA_P384" + + +[Extensions] +%szOID_BASIC_CONSTRAINTS2% = "{text}" + _continue_ = "ca=True" + +Critical=%szOID_BASIC_CONSTRAINTS2% + diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingRoot.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingRoot.ini new file mode 100644 index 000000000000..d8cd7d1f82a3 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingRoot.ini @@ -0,0 +1,28 @@ +[Version] +Signature="$Windows NT$ + +[Strings] +szOID_BASIC_CONSTRAINTS2 = "2.5.29.19" + +[NewRequest] +Subject = "CN=TestEKUParsingRoot" +Exportable = true +KeyLength = 521 +HashAlgorithm = sha256 +KeyUsage = "CERT_DIGITAL_SIGNATURE_KEY_USAGE | CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE" +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG" +MachineKeySet = True +RequestType = cert +ValidityPeriodUnits = 30 +ValidityPeriod = Years +ProviderName = "Microsoft Software Key Storage Provider" +KeyAlgorithm = ECDSA_P521 + + + + +[Extensions] +%szOID_BASIC_CONSTRAINTS2% = "{text}" + _continue_ = "ca=True" + +Critical=%szOID_BASIC_CONSTRAINTS2% -- 2.27.0.windows.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based) 2020-07-14 18:23 ` [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based) matthewfcarlson @ 2020-07-15 2:52 ` Michael D Kinney 2020-07-15 18:16 ` matthewfcarlson 0 siblings, 1 reply; 10+ messages in thread From: Michael D Kinney @ 2020-07-15 2:52 UTC (permalink / raw) To: devel@edk2.groups.io, matthewfcarlson@gmail.com, Kinney, Michael D Cc: Wang, Jian J, Lu, XiaoyuX Hi Matt, I think the BaseCryptLib unit tests may need some more work. 1) The DSC file for host based tests is in the wrong directory. It should be in CryptoPkg/Test to match the MdePkg, MdeModulePkg and UnitTestFrameworkPkg location. 2) CryptoPkg/CryptoPkg.dsc includes a reference to the host based library UnitTestHostBaseCryptLib.inf. This should only be listed in the host based DSC file. 3) CryptoPkg\Library\BaseCryptLib\UnitTestHostBaseCryptLib.inf This file appears to only be for host based tests, but it lists compatibility with DXE_DRIVER DXE_CORE UEFI_APPLICATION UEFI_DRIVER and does not list HOST_APPLICATION as expected. 4) Why do we need a new lib instance of the BaseCryptLib for host based unit testing. I would think we would want to perform unit tests on the BaseCryptLib instances that would actually be used in FW components. Can we update the unit tests to test the services provided in the Base, Pei, Runtime, and Smm instances of the BaseCryptLib? 5) Why do we need a host based specific version of the CrtWrapper, UnitTestHostCrtWrapper.c? 6) The file CryptoPkg/Test/UnitTest/Librray/BaseCryptLib/TestEKUCerts/ ChainCreationInstructions.txt makes reference to a bintohex tool and putting the results in a file called AllTestSignatures.h. But I do not see this file in the patch. Are these instructions out of date? Thanks, Mike > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On > Behalf Of matthewfcarlson@gmail.com > Sent: Tuesday, July 14, 2020 11:23 AM > To: devel@edk2.groups.io > Cc: Wang, Jian J <jian.j.wang@intel.com>; Lu, XiaoyuX > <xiaoyux.lu@intel.com> > Subject: [edk2-devel] [PATCH v3 2/3] CryptoPkg: > BaseCryptLib: Add unit tests (Host and Shell based) > > From: Matthew Carlson <macarl@microsoft.com> > > This adds a new INF for BaseCryptLib suitable for > host based environments. It adds a host based unit test > for > BaseCryptLib that can also be built as a shell based > Unit Test. > > Cc: Jian J Wang <jian.j.wang@intel.com> > Cc: Xiaoyu Lu <xiaoyux.lu@intel.com> > Signed-off-by: Matthew Carlson > <matthewfcarlson@gmail.com> > --- > > CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrtWr > apper.c | 93 ++ > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Authenticod > eTests.c | 1002 > ++++++++++++++++++++ > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCryptLi > bUnitTests.c | 66 ++ > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCipher > Tests.c | 293 ++++++ > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c > | 106 +++ > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests.c > | 197 ++++ > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c > | 184 ++++ > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncrypt > Tests.c | 308 ++++++ > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkdf2 > Tests.c | 71 ++ > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTes > ts.c | 524 ++++++++++ > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests.c > | 51 + > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7Tes > ts.c | 415 ++++++++ > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.c > | 310 ++++++ > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c > | 335 +++++++ > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMai > n.c | 81 ++ > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMai > nBCOP.c | 58 ++ > CryptoPkg/CryptoPkg.ci.yaml > | 4 + > CryptoPkg/CryptoPkg.dsc > | 26 + > > CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib. > inf | 90 ++ > CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc > | 35 + > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTes > tSignatures.h | 789 > +++++++++++++++ > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCry > ptLib.h | 121 +++ > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCry > ptLibHost.inf | 46 + > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCry > ptLibUefiShell.inf | 49 + > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert > s/ChainCreationInstructions.txt | 92 ++ > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert > s/CreateTestCerts.cmd | 11 + > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert > s/SignFirmwareWithEKUs.cmd | 76 ++ > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert > s/TestEKUParsingIssuingCA.ini | 45 + > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert > s/TestEKUParsingLeafSigner.ini | 25 + > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert > s/TestEKUParsingLeafSignerPid1.ini | 24 + > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert > s/TestEKUParsingLeafSignerPid12345.ini | 27 + > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert > s/TestEKUParsingNoEKUsInSigner.ini | 16 + > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert > s/TestEKUParsingPolicyCA.ini | 28 + > > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert > s/TestEKUParsingRoot.ini | 28 + > 34 files changed, 5626 insertions(+) > > diff --git > a/CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrt > Wrapper.c > b/CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrt > Wrapper.c > new file mode 100644 > index 000000000000..a9c288e8f2be > --- /dev/null > +++ > b/CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrt > Wrapper.c > @@ -0,0 +1,93 @@ > +/** @file > > + C Run-Time Libraries (CRT) Wrapper Implementation for > OpenSSL-based > > + Cryptographic Library. > > + > > +Copyright (c) 2009 - 2017, Intel Corporation. All > rights reserved.<BR> > > +Copyright (c) Microsoft Corporation > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include <stdio.h> > > + > > +#include <Base.h> > > +#include <Library/DebugLib.h> > > + > > +/* Convert character to lowercase */ > > +int tolower (int c) > > +{ > > + if (('A' <= (c)) && ((c) <= 'Z')) { > > + return (c - ('A' - 'a')); > > + } > > + return (c); > > +} > > + > > +/* Compare first n bytes of string s1 with string s2, > ignoring case */ > > +int strncasecmp (const char *s1, const char *s2, size_t > n) > > +{ > > + int Val; > > + > > + ASSERT(s1 != NULL); > > + ASSERT(s2 != NULL); > > + > > + if (n != 0) { > > + do { > > + Val = tolower(*s1) - tolower(*s2); > > + if (Val != 0) { > > + return Val; > > + } > > + ++s1; > > + ++s2; > > + if (*s1 == '\0') { > > + break; > > + } > > + } while (--n != 0); > > + } > > + return 0; > > +} > > + > > +/* Read formatted data from a string */ > > +int sscanf (const char *buffer, const char *format, > ...) > > +{ > > + // > > + // Null sscanf() function implementation to satisfy > the linker, since > > + // no direct functionality logic dependency in > present UEFI cases. > > + // > > + return 0; > > +} > > + > > +// > > +// -- Dummy OpenSSL Support Routines -- > > +// > > + > > +int BIO_printf (void *bio, const char *format, ...) > > +{ > > + return 0; > > +} > > + > > +int BIO_snprintf(char *buf, size_t n, const char > *format, ...) > > +{ > > + return 0; > > +} > > + > > +uid_t getuid (void) > > +{ > > + return 0; > > +} > > + > > +uid_t geteuid (void) > > +{ > > + return 0; > > +} > > + > > +gid_t getgid (void) > > +{ > > + return 0; > > +} > > + > > +gid_t getegid (void) > > +{ > > + return 0; > > +} > > + > > +int errno = 0; > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Authentic > odeTests.c > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Authentic > odeTests.c > new file mode 100644 > index 000000000000..8935f289d87a > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Authentic > odeTests.c > @@ -0,0 +1,1002 @@ > +/** @file > > + Sample Implementation for Microsoft Authenticode > Verification. > > + > > +Copyright (c) 2009 - 2011, Intel Corporation. All > rights reserved.<BR> > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include "TestBaseCryptLib.h" > > + > > +// > > +// Sample PE/COFF Image Hash Value (Digested by SHA-1). > > +// This value should be calculated following MSFT's > Authenticode Specification > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 PeSha1Hash[] = { > > + 0x44, 0xFD, 0x4F, 0xA9, 0x17, 0xEE, 0xAC, 0xCF, 0x1F, > 0x0B, 0xE3, 0xA1, 0x4D, 0x5B, 0xA6, 0x61, > > + 0x82, 0x97, 0xC4, 0xB6 > > + }; > > + > > +// > > +// Sample PE/COFF Image Hash Value (Digested by SHA- > 256). > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 PeSha256Hash[] = { > > + 0x61, 0x82, 0xB7, 0xF8, 0x8C, 0xFF, 0xC2, 0xEB, 0x79, > 0x6E, 0x9D, 0xA9, 0xDD, 0x39, 0x52, 0xDD, > > + 0x36, 0xDD, 0xF1, 0x43, 0x27, 0x58, 0x8C, 0xA7, 0xCC, > 0xAE, 0xDE, 0xDD, 0x3C, 0x02, 0x12, 0x49 > > + }; > > + > > +// > > +// Sample Authenticode Data with SHA-1 hash algorithm. > > +// This data should be retrieved from signed PE/COFF > image according to SECURITY > > +// directory in PE/COFF Header. > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 > AuthenticodeWithSha1[] = { > > + 0x30, 0x82, 0x1C, 0x43, 0x06, 0x09, 0x2A, 0x86, 0x48, > 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x02, 0xA0, > > + 0x82, 0x1C, 0x34, 0x30, 0x82, 0x1C, 0x30, 0x02, 0x01, > 0x01, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x05, > > + 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0x30, 0x68, > 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, > > + 0x82, 0x37, 0x02, 0x01, 0x04, 0xA0, 0x5A, 0x30, 0x58, > 0x30, 0x33, 0x06, 0x0A, 0x2B, 0x06, 0x01, > > + 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x0F, 0x30, 0x25, > 0x03, 0x01, 0x00, 0xA0, 0x20, 0xA2, 0x1E, > > + 0x80, 0x1C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, > 0x4F, 0x00, 0x62, 0x00, 0x73, 0x00, 0x6F, > > + 0x00, 0x6C, 0x00, 0x65, 0x00, 0x74, 0x00, 0x65, 0x00, > 0x3E, 0x00, 0x3E, 0x00, 0x3E, 0x30, 0x21, > > + 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, > 0x05, 0x00, 0x04, 0x14, 0x44, 0xFD, 0x4F, > > + 0xA9, 0x17, 0xEE, 0xAC, 0xCF, 0x1F, 0x0B, 0xE3, 0xA1, > 0x4D, 0x5B, 0xA6, 0x61, 0x82, 0x97, 0xC4, > > + 0xB6, 0xA0, 0x82, 0x17, 0x18, 0x30, 0x82, 0x04, 0xCA, > 0x30, 0x82, 0x03, 0xB2, 0xA0, 0x03, 0x02, > > + 0x01, 0x02, 0x02, 0x0A, 0x61, 0x03, 0xDC, 0xF6, 0x00, > 0x00, 0x00, 0x00, 0x00, 0x0C, 0x30, 0x0D, > > + 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, > 0x01, 0x05, 0x05, 0x00, 0x30, 0x77, 0x31, > > + 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, > 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, > > + 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, 0x61, > 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, > > + 0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, > 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, > > + 0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03, > 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, > > + 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x43, > 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, > > + 0x69, 0x6F, 0x6E, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03, > 0x55, 0x04, 0x03, 0x13, 0x18, 0x4D, 0x69, > > + 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x54, > 0x69, 0x6D, 0x65, 0x2D, 0x53, 0x74, 0x61, > > + 0x6D, 0x70, 0x20, 0x50, 0x43, 0x41, 0x30, 0x1E, 0x17, > 0x0D, 0x30, 0x38, 0x30, 0x37, 0x32, 0x35, > > + 0x31, 0x39, 0x31, 0x32, 0x35, 0x30, 0x5A, 0x17, 0x0D, > 0x31, 0x31, 0x30, 0x37, 0x32, 0x35, 0x31, > > + 0x39, 0x32, 0x32, 0x35, 0x30, 0x5A, 0x30, 0x81, 0xB3, > 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, > > + 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, > 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, > > + 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, > 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06, > > + 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, > 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30, > > + 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, > 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, > > + 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, > 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x0D, 0x30, > > + 0x0B, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x04, 0x4D, > 0x4F, 0x50, 0x52, 0x31, 0x27, 0x30, 0x25, > > + 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x1E, 0x6E, 0x43, > 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x44, > > + 0x53, 0x45, 0x20, 0x45, 0x53, 0x4E, 0x3A, 0x31, 0x35, > 0x39, 0x43, 0x2D, 0x41, 0x33, 0x46, 0x37, > > + 0x2D, 0x32, 0x35, 0x37, 0x30, 0x31, 0x25, 0x30, 0x23, > 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1C, > > + 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, > 0x20, 0x54, 0x69, 0x6D, 0x65, 0x2D, 0x53, > > + 0x74, 0x61, 0x6D, 0x70, 0x20, 0x53, 0x65, 0x72, 0x76, > 0x69, 0x63, 0x65, 0x30, 0x82, 0x01, 0x22, > > + 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, > 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, > > + 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, > 0x82, 0x01, 0x01, 0x00, 0xC0, 0xED, 0x81, > > + 0x14, 0xA1, 0x5E, 0x77, 0xC0, 0x5B, 0xF4, 0x76, 0x89, > 0x62, 0xFA, 0xAD, 0x7C, 0x68, 0x14, 0xB4, > > + 0xF7, 0xBD, 0x35, 0xD8, 0x13, 0x79, 0x5A, 0x17, 0xCA, > 0xD9, 0x6C, 0x51, 0x45, 0x62, 0x26, 0x7A, > > + 0x2F, 0x1F, 0xD8, 0xEA, 0xC1, 0x6E, 0x01, 0x17, 0xF9, > 0xC3, 0xA6, 0x1F, 0x67, 0xDB, 0x51, 0xB0, > > + 0x2C, 0xDE, 0x8A, 0x17, 0xED, 0xFF, 0x20, 0xAD, 0x34, > 0xEA, 0x98, 0xFB, 0xA5, 0xD6, 0x2A, 0xD2, > > + 0xF1, 0x44, 0x27, 0x07, 0x5A, 0x2D, 0x3A, 0x93, 0xFF, > 0x56, 0x53, 0xB0, 0xC8, 0xF5, 0xF3, 0x03, > > + 0xF2, 0x49, 0xCC, 0x16, 0xD0, 0xF5, 0x00, 0x4C, 0x58, > 0xF8, 0x9B, 0xF5, 0x07, 0x25, 0xB1, 0x66, > > + 0x17, 0xC0, 0xBD, 0xC8, 0xD2, 0x52, 0x85, 0x8D, 0xC2, > 0x2B, 0x38, 0xB2, 0xC3, 0x36, 0xBE, 0xF9, > > + 0x87, 0xDA, 0xF4, 0x8E, 0x5D, 0x43, 0xD7, 0x06, 0xBF, > 0x99, 0x05, 0x9F, 0xA4, 0xCE, 0xFE, 0xAB, > > + 0x8D, 0x61, 0x63, 0xE7, 0x39, 0xC5, 0xF3, 0x18, 0xF6, > 0xD8, 0xFC, 0x31, 0x36, 0x69, 0x72, 0x5A, > > + 0xA2, 0x1A, 0x4C, 0x3E, 0xEA, 0x87, 0x25, 0x42, 0x9D, > 0xD1, 0x3E, 0xF1, 0x97, 0xD2, 0x18, 0x32, > > + 0x93, 0x70, 0x55, 0x53, 0x81, 0x1E, 0xE3, 0x3B, 0x0D, > 0xE8, 0xBE, 0x82, 0x78, 0x6D, 0xE6, 0xFA, > > + 0xCD, 0x98, 0xA4, 0x6F, 0xDB, 0xEE, 0x66, 0xF4, 0x95, > 0xC8, 0xCD, 0x35, 0xC9, 0x9E, 0xBB, 0x36, > > + 0x0D, 0x83, 0x96, 0x94, 0x26, 0xA7, 0x90, 0xE0, 0xA9, > 0x34, 0x3B, 0xD5, 0xC0, 0x9E, 0x3E, 0xF0, > > + 0xD4, 0x47, 0x8D, 0x86, 0x0C, 0x82, 0xA4, 0x58, 0x30, > 0x3A, 0x1C, 0x76, 0xE3, 0xAD, 0x95, 0x66, > > + 0xB4, 0xB7, 0xFD, 0x09, 0x8A, 0x05, 0x60, 0x0F, 0xA3, > 0x0F, 0xE2, 0x93, 0x96, 0x58, 0x22, 0x9C, > > + 0x9D, 0x2B, 0xDB, 0xA2, 0x94, 0x18, 0x90, 0x95, 0x02, > 0xBD, 0x06, 0x40, 0x95, 0x02, 0x03, 0x01, > > + 0x00, 0x01, 0xA3, 0x82, 0x01, 0x19, 0x30, 0x82, 0x01, > 0x15, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, > > + 0x0E, 0x04, 0x16, 0x04, 0x14, 0xD2, 0xED, 0x0D, 0x1E, > 0x24, 0xBB, 0x37, 0xA9, 0xD8, 0x20, 0x6A, > > + 0x4D, 0x1D, 0xD2, 0x16, 0xD5, 0x2E, 0xBE, 0x9E, 0xEB, > 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, > > + 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x23, 0x34, 0xF8, > 0xD9, 0x52, 0x46, 0x70, 0x0A, 0xED, 0x40, > > + 0xFB, 0x76, 0xFB, 0xB3, 0x2B, 0xB0, 0xC3, 0x35, 0xB3, > 0x0F, 0x30, 0x54, 0x06, 0x03, 0x55, 0x1D, > > + 0x1F, 0x04, 0x4D, 0x30, 0x4B, 0x30, 0x49, 0xA0, 0x47, > 0xA0, 0x45, 0x86, 0x43, 0x68, 0x74, 0x74, > > + 0x70, 0x3A, 0x2F, 0x2F, 0x63, 0x72, 0x6C, 0x2E, 0x6D, > 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, > > + 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, > 0x2F, 0x63, 0x72, 0x6C, 0x2F, 0x70, 0x72, > > + 0x6F, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2F, 0x4D, 0x69, > 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, > > + 0x54, 0x69, 0x6D, 0x65, 0x53, 0x74, 0x61, 0x6D, 0x70, > 0x50, 0x43, 0x41, 0x2E, 0x63, 0x72, 0x6C, > > + 0x30, 0x58, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, > 0x07, 0x01, 0x01, 0x04, 0x4C, 0x30, 0x4A, > > + 0x30, 0x48, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, > 0x07, 0x30, 0x02, 0x86, 0x3C, 0x68, 0x74, > > + 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, > 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, > > + 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, > 0x69, 0x2F, 0x63, 0x65, 0x72, 0x74, 0x73, > > + 0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, > 0x74, 0x54, 0x69, 0x6D, 0x65, 0x53, 0x74, > > + 0x61, 0x6D, 0x70, 0x50, 0x43, 0x41, 0x2E, 0x63, 0x72, > 0x74, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1D, > > + 0x25, 0x04, 0x0C, 0x30, 0x0A, 0x06, 0x08, 0x2B, 0x06, > 0x01, 0x05, 0x05, 0x07, 0x03, 0x08, 0x30, > > + 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, > 0x04, 0x04, 0x03, 0x02, 0x06, 0xC0, 0x30, > > + 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, > 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, > > + 0x01, 0x01, 0x00, 0x9C, 0x0A, 0x55, 0xC8, 0xCC, 0x44, > 0x13, 0x34, 0x0C, 0xD8, 0x63, 0x27, 0x76, > > + 0x7D, 0x3E, 0xFA, 0x38, 0x32, 0x83, 0x53, 0x9D, 0xF2, > 0x08, 0xF9, 0x32, 0xF5, 0xC5, 0x6E, 0x70, > > + 0xA1, 0xC9, 0xB1, 0x63, 0x6B, 0x19, 0x9D, 0x09, 0x67, > 0xD9, 0x9D, 0xEB, 0x8A, 0x6A, 0xDB, 0x60, > > + 0x66, 0xE9, 0xE9, 0x52, 0x26, 0xF3, 0x3B, 0xC6, 0x6A, > 0xD3, 0xC2, 0x52, 0xBE, 0xA8, 0xB9, 0xEB, > > + 0x6A, 0xAA, 0x78, 0x8C, 0xC9, 0x16, 0x7D, 0x90, 0x95, > 0xA0, 0xCC, 0x21, 0xB3, 0x9E, 0x81, 0xBD, > > + 0xCD, 0xC1, 0x8B, 0x29, 0xBD, 0x62, 0x25, 0xEF, 0x09, > 0x57, 0xE7, 0x86, 0x4E, 0x2A, 0xEC, 0x80, > > + 0xCA, 0xBB, 0xFC, 0x21, 0x16, 0xC4, 0x3F, 0x4E, 0x52, > 0x19, 0xE6, 0x0E, 0xB1, 0xD8, 0xC1, 0xC2, > > + 0x79, 0x90, 0x64, 0xB4, 0x50, 0x73, 0x10, 0x35, 0x5E, > 0x5D, 0x11, 0xC1, 0xB8, 0xBA, 0xAA, 0xCF, > > + 0x52, 0xF6, 0x80, 0x91, 0x00, 0xE6, 0xEF, 0x51, 0x43, > 0x46, 0xE9, 0xD0, 0xE8, 0x94, 0xF6, 0x2C, > > + 0x24, 0x0D, 0x8A, 0xC6, 0xB2, 0x31, 0x8A, 0xA3, 0x7E, > 0x36, 0x6C, 0xA4, 0x05, 0x4C, 0x67, 0x07, > > + 0x2A, 0xBB, 0xBB, 0x10, 0xA5, 0xA5, 0x30, 0x1A, 0x72, > 0xD0, 0x06, 0x20, 0x3B, 0x24, 0x93, 0x5B, > > + 0x15, 0xD9, 0x39, 0x93, 0xD3, 0x73, 0x2D, 0x1A, 0xC4, > 0xD4, 0x6C, 0x1E, 0xA1, 0x08, 0xEC, 0xF6, > > + 0x31, 0xB8, 0x6B, 0x4B, 0xEC, 0xEE, 0x5C, 0x33, 0x02, > 0x14, 0x32, 0x8C, 0x7C, 0x11, 0x20, 0x2F, > > + 0x20, 0x03, 0x7F, 0xF9, 0x0C, 0x9D, 0xB8, 0xD3, 0x9E, > 0x5F, 0xD6, 0x08, 0xFC, 0x81, 0xA0, 0x99, > > + 0xB8, 0xBB, 0x55, 0x6E, 0xCD, 0x42, 0x4B, 0x3A, 0x4D, > 0x8C, 0x14, 0x2B, 0xCA, 0xC8, 0x12, 0xD3, > > + 0x62, 0x6E, 0xEA, 0x0D, 0x0A, 0x9D, 0x09, 0xA3, 0x66, > 0xD9, 0x79, 0x4F, 0x8E, 0x1A, 0xA2, 0xFF, > > + 0xCC, 0x98, 0x04, 0x30, 0x82, 0x05, 0x96, 0x30, 0x82, > 0x04, 0x7E, 0xA0, 0x03, 0x02, 0x01, 0x02, > > + 0x02, 0x0A, 0x61, 0x01, 0xC6, 0xC1, 0x00, 0x00, 0x00, > 0x00, 0x00, 0x07, 0x30, 0x0D, 0x06, 0x09, > > + 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, > 0x05, 0x00, 0x30, 0x81, 0x81, 0x31, 0x0B, > > + 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, > 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, > > + 0x03, 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, 0x61, 0x73, > 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, > > + 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x07, > 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, > > + 0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55, > 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, > > + 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x43, 0x6F, > 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, > > + 0x6F, 0x6E, 0x31, 0x2B, 0x30, 0x29, 0x06, 0x03, 0x55, > 0x04, 0x03, 0x13, 0x22, 0x4D, 0x69, 0x63, > > + 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x57, 0x69, > 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x20, 0x56, > > + 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, > 0x6F, 0x6E, 0x20, 0x50, 0x43, 0x41, 0x30, > > + 0x1E, 0x17, 0x0D, 0x30, 0x38, 0x31, 0x30, 0x32, 0x32, > 0x32, 0x30, 0x33, 0x39, 0x32, 0x32, 0x5A, > > + 0x17, 0x0D, 0x31, 0x30, 0x30, 0x31, 0x32, 0x32, 0x32, > 0x30, 0x34, 0x39, 0x32, 0x32, 0x5A, 0x30, > > + 0x7F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, > 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, > > + 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0A, > 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, > > + 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, > 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, > > + 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C, > 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, > > + 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, > 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, > > + 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x0D, 0x30, 0x0B, > 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x04, > > + 0x4D, 0x4F, 0x50, 0x52, 0x31, 0x1A, 0x30, 0x18, 0x06, > 0x03, 0x55, 0x04, 0x03, 0x13, 0x11, 0x4D, > > + 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, > 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, > > + 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, > 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, > > + 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, > 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, > > + 0x00, 0xDC, 0x3A, 0xD3, 0x44, 0xF4, 0x6E, 0x20, 0x9F, > 0xDD, 0xA4, 0x0E, 0x82, 0x4E, 0xC7, 0x86, > > + 0x5E, 0x63, 0xCC, 0xCA, 0xE5, 0x42, 0x53, 0x4B, 0x85, > 0xFA, 0x5D, 0x71, 0x6C, 0xCF, 0x76, 0x0C, > > + 0x18, 0x8B, 0xA6, 0x0D, 0xF5, 0x4A, 0xF7, 0xFE, 0x17, > 0xF2, 0x90, 0xCC, 0x62, 0xC7, 0x24, 0xAD, > > + 0x9B, 0x9A, 0xE1, 0x45, 0x3B, 0x61, 0xD8, 0x0D, 0x05, > 0x69, 0xC7, 0xCD, 0x88, 0x2A, 0xB8, 0xB9, > > + 0x18, 0x1E, 0x60, 0x10, 0x5F, 0x88, 0xC6, 0xD2, 0x82, > 0x4E, 0x6D, 0x49, 0xC5, 0xBE, 0x5C, 0x12, > > + 0x86, 0x48, 0x85, 0x89, 0x91, 0x81, 0xCD, 0x1B, 0xAD, > 0x1F, 0xB7, 0x2D, 0x67, 0x79, 0xF1, 0x7B, > > + 0x9F, 0x25, 0x87, 0x14, 0x76, 0x5F, 0xE3, 0x0E, 0x64, > 0xA1, 0x72, 0x61, 0x25, 0xE5, 0x75, 0x69, > > + 0xC5, 0x14, 0xF1, 0x5F, 0x07, 0x56, 0xA4, 0x0D, 0x70, > 0x06, 0x23, 0xA7, 0x6C, 0xDD, 0x82, 0xAE, > > + 0xD9, 0x9B, 0x47, 0xA4, 0xA5, 0x6C, 0x08, 0xB0, 0x58, > 0xF1, 0x53, 0x6A, 0x4F, 0xDA, 0x85, 0x61, > > + 0xCB, 0x02, 0x7B, 0x49, 0xAF, 0x1F, 0xBB, 0xE0, 0xD7, > 0xB9, 0x5E, 0xDB, 0x73, 0x89, 0x76, 0xC1, > > + 0x3A, 0xBB, 0x0D, 0xF5, 0x97, 0xF0, 0x88, 0x5D, 0x69, > 0x77, 0x80, 0xCF, 0xF1, 0x7E, 0x03, 0x9F, > > + 0x73, 0x6D, 0xDE, 0x05, 0xB8, 0x2F, 0x77, 0xB5, 0x54, > 0x55, 0x45, 0xD0, 0xD2, 0x38, 0xBD, 0x96, > > + 0xE3, 0xF7, 0xEA, 0x40, 0xE5, 0xAC, 0x19, 0xFC, 0x71, > 0xCB, 0x28, 0x27, 0xAA, 0x71, 0xA1, 0x72, > > + 0xB5, 0x12, 0x27, 0xC1, 0x51, 0xF6, 0x36, 0xC5, 0xC0, > 0xC7, 0x7B, 0x3A, 0x3A, 0x93, 0x37, 0x04, > > + 0xCC, 0xEE, 0x0B, 0x69, 0x78, 0x64, 0x75, 0x41, 0xB6, > 0x78, 0x22, 0x0F, 0x77, 0x84, 0xF7, 0x4B, > > + 0x8D, 0x46, 0x65, 0x92, 0x5B, 0x4D, 0x56, 0x6B, 0x75, > 0x04, 0x46, 0x3F, 0x0B, 0x1B, 0xB4, 0x19, > > + 0xBF, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x82, 0x02, > 0x0F, 0x30, 0x82, 0x02, 0x0B, 0x30, 0x1F, > > + 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, 0x18, 0x30, 0x16, > 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, > > + 0x07, 0x03, 0x03, 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, > 0x01, 0x82, 0x37, 0x0A, 0x03, 0x06, 0x30, > > + 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, > 0x14, 0xA1, 0xE6, 0xC3, 0x65, 0xD0, 0xE6, > > + 0xE8, 0x28, 0x62, 0xC2, 0xF3, 0xC2, 0x23, 0xA6, 0x1C, > 0x49, 0x82, 0x0B, 0xD5, 0x53, 0x30, 0x0E, > > + 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, > 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x1F, > > + 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, > 0x80, 0x14, 0x90, 0x8B, 0x11, > > + 0xA5, 0x70, 0xED, 0xE0, 0xF9, 0xA9, 0xC0, 0xAC, 0x08, > 0xC7, 0xB5, 0xF4, 0x82, 0xB1, 0x3C, 0xC5, > > + 0x4A, 0x30, 0x7B, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, > 0x74, 0x30, 0x72, 0x30, 0x70, 0xA0, 0x6E, > > + 0xA0, 0x6C, 0x86, 0x34, 0x68, 0x74, 0x74, 0x70, 0x3A, > 0x2F, 0x2F, 0x63, 0x72, 0x6C, 0x2E, 0x6D, > > + 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, > 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, > > + 0x2F, 0x63, 0x72, 0x6C, 0x2F, 0x70, 0x72, 0x6F, 0x64, > 0x75, 0x63, 0x74, 0x73, 0x2F, 0x57, 0x69, > > + 0x6E, 0x50, 0x43, 0x41, 0x2E, 0x63, 0x72, 0x6C, 0x86, > 0x34, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, > > + 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, > 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, > > + 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x72, > 0x6C, 0x2F, 0x70, 0x72, 0x6F, 0x64, 0x75, > > + 0x63, 0x74, 0x73, 0x2F, 0x57, 0x69, 0x6E, 0x50, 0x43, > 0x41, 0x2E, 0x63, 0x72, 0x6C, 0x30, 0x52, > > + 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, > 0x01, 0x04, 0x46, 0x30, 0x44, 0x30, 0x42, > > + 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, > 0x02, 0x86, 0x36, 0x68, 0x74, 0x74, 0x70, > > + 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, > 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, > > + 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, > 0x63, 0x65, 0x72, 0x74, 0x73, 0x2F, 0x4D, > > + 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x57, > 0x69, 0x6E, 0x50, 0x43, 0x41, 0x2E, 0x63, > > + 0x72, 0x74, 0x30, 0x81, 0xC6, 0x06, 0x03, 0x55, 0x1D, > 0x20, 0x04, 0x81, 0xBE, 0x30, 0x81, 0xBB, > > + 0x30, 0x81, 0xB8, 0x06, 0x09, 0x2B, 0x06, 0x01, 0x04, > 0x01, 0x82, 0x37, 0x15, 0x2F, 0x30, 0x81, > > + 0xAA, 0x30, 0x40, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, > 0x05, 0x07, 0x02, 0x01, 0x16, 0x34, 0x68, > > + 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x77, 0x77, > 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, > > + 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, > 0x70, 0x6B, 0x69, 0x2F, 0x73, 0x73, 0x6C, > > + 0x2F, 0x63, 0x70, 0x73, 0x2F, 0x57, 0x69, 0x6E, 0x64, > 0x6F, 0x77, 0x73, 0x50, 0x43, 0x41, 0x2E, > > + 0x68, 0x74, 0x6D, 0x30, 0x66, 0x06, 0x08, 0x2B, 0x06, > 0x01, 0x05, 0x05, 0x07, 0x02, 0x02, 0x30, > > + 0x5A, 0x1E, 0x58, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x70, > 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00, > > + 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x20, 0x00, 0xA9, > 0x00, 0x20, 0x00, 0x31, 0x00, 0x39, 0x00, > > + 0x39, 0x00, 0x39, 0x00, 0x2D, 0x00, 0x32, 0x00, 0x30, > 0x00, 0x30, 0x00, 0x35, 0x00, 0x20, 0x00, > > + 0x4D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x72, 0x00, 0x6F, > 0x00, 0x73, 0x00, 0x6F, 0x00, 0x66, 0x00, > > + 0x74, 0x00, 0x20, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x72, > 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, > > + 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, > 0x00, 0x2E, 0x30, 0x0D, 0x06, 0x09, 0x2A, > > + 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, > 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x73, > > + 0x5F, 0xCA, 0x80, 0x1C, 0x60, 0x46, 0x6F, 0xB9, 0x34, > 0x9D, 0x88, 0xE3, 0xBE, 0x22, 0x8C, 0xFA, > > + 0xE6, 0x58, 0x9A, 0xAB, 0x7B, 0x1A, 0x97, 0xFD, 0xED, > 0x2E, 0x39, 0xCC, 0x59, 0x5B, 0x1D, 0x7A, > > + 0x06, 0x8A, 0xBB, 0x43, 0x93, 0x7B, 0x1E, 0xA1, 0x88, > 0x53, 0xDF, 0x44, 0xF8, 0x53, 0xA9, 0xEA, > > + 0xF6, 0x67, 0x1B, 0x3A, 0x78, 0x84, 0x11, 0x6A, 0x6F, > 0x29, 0x47, 0x90, 0x0A, 0x0C, 0x7B, 0x22, > > + 0x77, 0x4E, 0x6F, 0xB8, 0x64, 0x29, 0xDF, 0x06, 0xC7, > 0xC8, 0x73, 0x84, 0xD6, 0x66, 0xA0, 0xCA, > > + 0xD9, 0x5A, 0x26, 0x82, 0x57, 0xF9, 0xE3, 0x4F, 0x39, > 0xAF, 0x2E, 0x8E, 0xB1, 0x06, 0x5B, 0x72, > > + 0xF2, 0x37, 0x32, 0xAE, 0x4E, 0xCE, 0x3C, 0x7D, 0xB0, > 0x12, 0x2B, 0x9E, 0xA5, 0x75, 0xE3, 0x43, > > + 0xA6, 0x12, 0x8B, 0x06, 0x14, 0x98, 0x77, 0xE3, 0x58, > 0x32, 0x25, 0x60, 0x07, 0x8C, 0x59, 0x71, > > + 0xA7, 0x71, 0x41, 0xB3, 0x06, 0x8D, 0x5C, 0xEF, 0x9C, > 0x7F, 0x5A, 0x22, 0x6D, 0xB7, 0xD3, 0xD9, > > + 0xF5, 0xA6, 0x1B, 0x52, 0xDE, 0xF5, 0x7E, 0x76, 0x7C, > 0xFE, 0xF4, 0xC8, 0x23, 0x1A, 0x4B, 0x25, > > + 0xEB, 0xE4, 0xEE, 0xAF, 0x10, 0x0B, 0x55, 0xC3, 0xD8, > 0xC1, 0x17, 0x85, 0x61, 0x6F, 0xD3, 0x3F, > > + 0xB6, 0xE9, 0xEC, 0x84, 0xA5, 0xEE, 0x6D, 0xB2, 0xFF, > 0xE8, 0x6C, 0x95, 0xAB, 0x2B, 0x5E, 0xC8, > > + 0x85, 0xC3, 0x11, 0x60, 0xAC, 0xFA, 0x02, 0x05, 0xF1, > 0x7B, 0xDA, 0xC3, 0x69, 0x49, 0x96, 0xA5, > > + 0x70, 0xF9, 0x65, 0x66, 0x46, 0x10, 0x8D, 0x34, 0xE9, > 0x21, 0x94, 0x3C, 0x0F, 0x71, 0x4A, 0x1C, > > + 0xEA, 0x1F, 0xF7, 0x23, 0xA6, 0x87, 0x60, 0x34, 0xE9, > 0x14, 0xE1, 0xDE, 0x03, 0x59, 0xB4, 0x02, > > + 0x1D, 0x3A, 0xAF, 0xE3, 0x55, 0x05, 0xF5, 0xED, 0xC1, > 0xF4, 0xE4, 0x5D, 0x0E, 0xD3, 0x97, 0x30, > > + 0x82, 0x06, 0x07, 0x30, 0x82, 0x03, 0xEF, 0xA0, 0x03, > 0x02, 0x01, 0x02, 0x02, 0x0A, 0x61, 0x16, > > + 0x68, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x30, > 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, > > + 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x5F, > 0x31, 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09, > > + 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, > 0x16, 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19, > > + 0x30, 0x17, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, > 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09, > > + 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, > 0x31, 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55, > > + 0x04, 0x03, 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72, 0x6F, > 0x73, 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F, > > + 0x6F, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, > 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, > > + 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x30, > 0x1E, 0x17, 0x0D, 0x30, 0x37, 0x30, 0x34, > > + 0x30, 0x33, 0x31, 0x32, 0x35, 0x33, 0x30, 0x39, 0x5A, > 0x17, 0x0D, 0x32, 0x31, 0x30, 0x34, 0x30, > > + 0x33, 0x31, 0x33, 0x30, 0x33, 0x30, 0x39, 0x5A, 0x30, > 0x77, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, > > + 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, > 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, > > + 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, > 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, > > + 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, > 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, > > + 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, > 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, > > + 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, > 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x21, > > + 0x30, 0x1F, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x18, > 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, > > + 0x66, 0x74, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x2D, 0x53, > 0x74, 0x61, 0x6D, 0x70, 0x20, 0x50, 0x43, > > + 0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, > 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, > > + 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, > 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, > > + 0x01, 0x00, 0x9F, 0xA1, 0x6C, 0xB1, 0xDF, 0xDB, 0x48, > 0x92, 0x2A, 0x7C, 0x6B, 0x2E, 0x19, 0xE1, > > + 0xBD, 0xE2, 0xE3, 0xC5, 0x99, 0x51, 0x23, 0x50, 0xAD, > 0xCE, 0xDD, 0x18, 0x4E, 0x24, 0x0F, 0xEE, > > + 0xD1, 0xA7, 0xD1, 0x4C, 0xAD, 0x74, 0x30, 0x20, 0x11, > 0xEB, 0x07, 0xD5, 0x54, 0x95, 0x15, 0x49, > > + 0x94, 0x1B, 0x42, 0x92, 0xAE, 0x98, 0x5C, 0x30, 0x26, > 0xDA, 0x00, 0x6B, 0xE8, 0x7B, 0xBD, 0xEC, > > + 0x89, 0x07, 0x0F, 0xF7, 0x0E, 0x04, 0x98, 0xF0, 0x89, > 0xCC, 0x1F, 0xCB, 0x33, 0x24, 0x87, 0x9D, > > + 0xF2, 0xF4, 0x67, 0x1C, 0x2C, 0xFC, 0x7B, 0xE7, 0x88, > 0x1D, 0xEA, 0xE7, 0x4E, 0xA3, 0xA1, 0xC1, > > + 0x23, 0x53, 0xCA, 0x8D, 0xFA, 0x45, 0xCF, 0x09, 0xD0, > 0x5E, 0xAF, 0xD0, 0xB0, 0x42, 0x04, 0xA2, > > + 0xF9, 0xA6, 0x6C, 0x93, 0x67, 0xD7, 0x28, 0xDC, 0x46, > 0x53, 0xB0, 0x86, 0xD0, 0xE5, 0x28, 0x46, > > + 0x2E, 0x27, 0xAC, 0x86, 0x4F, 0x55, 0x52, 0x0C, 0xE4, > 0x03, 0x2C, 0xFB, 0x6A, 0x90, 0x90, 0x30, > > + 0x6E, 0x87, 0xF3, 0x59, 0x30, 0x9D, 0xFA, 0x7E, 0xD6, > 0x97, 0xB3, 0xE8, 0x21, 0x97, 0x7E, 0xF8, > > + 0xD2, 0x13, 0xF3, 0x08, 0xB7, 0x53, 0x6D, 0x52, 0xB4, > 0x45, 0x90, 0x9F, 0x48, 0x00, 0x4A, 0x47, > > + 0x66, 0x11, 0x27, 0x29, 0x66, 0xA8, 0x97, 0xE4, 0xD3, > 0x06, 0x81, 0x4A, 0xA2, 0xF9, 0x84, 0xA7, > > + 0x11, 0x47, 0x14, 0x09, 0x82, 0x9F, 0x84, 0xED, 0x55, > 0x78, 0xFE, 0x01, 0x9A, 0x1D, 0x50, 0x08, > > + 0x85, 0x00, 0x10, 0x30, 0x46, 0xED, 0xB7, 0xDE, 0x23, > 0x46, 0xBB, 0xC4, 0x2D, 0x54, 0x9F, 0xAF, > > + 0x1E, 0x78, 0x41, 0x31, 0x77, 0xCC, 0x9B, 0xDF, 0x3B, > 0x83, 0x93, 0xA1, 0x61, 0x02, 0xB5, 0x1D, > > + 0x0D, 0xB1, 0xFC, 0xF7, 0x9B, 0xB2, 0x01, 0xCE, 0x22, > 0x4B, 0x54, 0xFF, 0xF9, 0x05, 0xC3, 0xC2, > > + 0x20, 0x0B, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x82, > 0x01, 0xAB, 0x30, 0x82, 0x01, 0xA7, 0x30, > > + 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, > 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, > > + 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, > 0x04, 0x14, 0x23, 0x34, 0xF8, 0xD9, 0x52, > > + 0x46, 0x70, 0x0A, 0xED, 0x40, 0xFB, 0x76, 0xFB, 0xB3, > 0x2B, 0xB0, 0xC3, 0x35, 0xB3, 0x0F, 0x30, > > + 0x0B, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x04, 0x04, 0x03, > 0x02, 0x01, 0x86, 0x30, 0x10, 0x06, 0x09, > > + 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, > 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x81, > > + 0x98, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x81, 0x90, > 0x30, 0x81, 0x8D, 0x80, 0x14, 0x0E, 0xAC, > > + 0x82, 0x60, 0x40, 0x56, 0x27, 0x97, 0xE5, 0x25, 0x13, > 0xFC, 0x2A, 0xE1, 0x0A, 0x53, 0x95, 0x59, > > + 0xE4, 0xA4, 0xA1, 0x63, 0xA4, 0x61, 0x30, 0x5F, 0x31, > 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09, 0x92, > > + 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, > 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30, > > + 0x17, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, > 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6D, > > + 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x31, > 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55, 0x04, > > + 0x03, 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, > 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F, > > + 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, > 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, > > + 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x82, 0x10, > 0x79, 0xAD, 0x16, 0xA1, 0x4A, 0xA0, 0xA5, > > + 0xAD, 0x4C, 0x73, 0x58, 0xF4, 0x07, 0x13, 0x2E, 0x65, > 0x30, 0x50, 0x06, 0x03, 0x55, 0x1D, 0x1F, > > + 0x04, 0x49, 0x30, 0x47, 0x30, 0x45, 0xA0, 0x43, 0xA0, > 0x41, 0x86, 0x3F, 0x68, 0x74, 0x74, 0x70, > > + 0x3A, 0x2F, 0x2F, 0x63, 0x72, 0x6C, 0x2E, 0x6D, 0x69, > 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, > > + 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, > 0x63, 0x72, 0x6C, 0x2F, 0x70, 0x72, 0x6F, > > + 0x64, 0x75, 0x63, 0x74, 0x73, 0x2F, 0x6D, 0x69, 0x63, > 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x72, > > + 0x6F, 0x6F, 0x74, 0x63, 0x65, 0x72, 0x74, 0x2E, 0x63, > 0x72, 0x6C, 0x30, 0x54, 0x06, 0x08, 0x2B, > > + 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x48, > 0x30, 0x46, 0x30, 0x44, 0x06, 0x08, 0x2B, > > + 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x38, > 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, > > + 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, > 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, > > + 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x65, 0x72, > 0x74, 0x73, 0x2F, 0x4D, 0x69, 0x63, 0x72, > > + 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x52, 0x6F, 0x6F, 0x74, > 0x43, 0x65, 0x72, 0x74, 0x2E, 0x63, 0x72, > > + 0x74, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, > 0x0C, 0x30, 0x0A, 0x06, 0x08, 0x2B, 0x06, > > + 0x01, 0x05, 0x05, 0x07, 0x03, 0x08, 0x30, 0x0D, 0x06, > 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, > > + 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, > 0x00, 0x10, 0x97, 0x8A, 0xC3, 0x5C, 0x03, > > + 0x44, 0x36, 0xDD, 0xE9, 0xB4, 0xAD, 0x77, 0xDB, 0xCE, > 0x79, 0x51, 0x4D, 0x01, 0xB1, 0x2E, 0x74, > > + 0x71, 0x5B, 0x6D, 0x0C, 0x13, 0xAB, 0xCE, 0xBE, 0x7B, > 0x8F, 0xB8, 0x2E, 0xD4, 0x12, 0xA2, 0x8C, > > + 0x6D, 0x62, 0xB8, 0x57, 0x02, 0xCB, 0x4E, 0x20, 0x13, > 0x50, 0x99, 0xDD, 0x7A, 0x40, 0xE2, 0x57, > > + 0xBB, 0xAF, 0x58, 0x9A, 0x1C, 0xE1, 0x1D, 0x01, 0x86, > 0xAC, 0xBB, 0x78, 0xF2, 0x8B, 0xD0, 0xEC, > > + 0x3B, 0x01, 0xEE, 0xE2, 0xBE, 0x8F, 0x0A, 0x05, 0xC8, > 0x8D, 0x48, 0xE2, 0xF0, 0x53, 0x15, 0xDD, > > + 0x4F, 0xAB, 0x92, 0xE4, 0xE7, 0x8D, 0x6A, 0xD5, 0x80, > 0xC1, 0xE6, 0x94, 0xF2, 0x06, 0x2F, 0x85, > > + 0x03, 0xE9, 0x91, 0x2A, 0x24, 0x22, 0x70, 0xFB, 0xF6, > 0xFC, 0xE4, 0x78, 0x99, 0x2E, 0x0D, 0xF7, > > + 0x07, 0xE2, 0x70, 0xBC, 0x18, 0x4E, 0x9D, 0x8E, 0x6B, > 0x0A, 0x72, 0x95, 0xB8, 0xA1, 0x39, 0x9C, > > + 0x67, 0x2D, 0xC5, 0x51, 0x0E, 0xEA, 0x62, 0x5C, 0x3F, > 0x16, 0x98, 0x8B, 0x20, 0x3F, 0xE2, 0x07, > > + 0x1A, 0x32, 0xF9, 0xCC, 0x31, 0x4A, 0x76, 0x31, 0x3D, > 0x2B, 0x72, 0x0B, 0xC8, 0xEA, 0x70, 0x3D, > > + 0xFF, 0x85, 0x0A, 0x13, 0xDF, 0xC2, 0x0A, 0x61, 0x8E, > 0xF0, 0xD7, 0xB8, 0x17, 0xEB, 0x4E, 0x8B, > > + 0x7F, 0xC5, 0x35, 0x2B, 0x5E, 0xA3, 0xBF, 0xEB, 0xBC, > 0x7D, 0x0B, 0x42, 0x7B, 0xD4, 0x53, 0x72, > > + 0x21, 0xEE, 0x30, 0xCA, 0xBB, 0x78, 0x65, 0x5C, 0x5B, > 0x01, 0x17, 0x0A, 0x14, 0x0E, 0xD2, 0xDA, > > + 0x14, 0x98, 0xF5, 0x3C, 0xB9, 0x66, 0x58, 0xB3, 0x2D, > 0x2F, 0xE7, 0xF9, 0x85, 0x86, 0xCC, 0x51, > > + 0x56, 0xE8, 0x9D, 0x70, 0x94, 0x6C, 0xAC, 0x39, 0x4C, > 0xD4, 0xF6, 0x79, 0xBF, 0xAA, 0x18, 0x7A, > > + 0x62, 0x29, 0xEF, 0xA2, 0x9B, 0x29, 0x34, 0x06, 0x77, > 0x1A, 0x62, 0xC9, 0x3D, 0x1E, 0x6D, 0x1F, > > + 0x82, 0xF0, 0x0B, 0xC7, 0x2C, 0xBB, 0xCF, 0x43, 0xB3, > 0xE5, 0xF9, 0xEC, 0x7D, 0xB5, 0xE3, 0xA4, > > + 0xA8, 0x74, 0x35, 0xB8, 0x4E, 0xC5, 0x71, 0x23, 0x12, > 0x26, 0x76, 0x0B, 0x3C, 0x52, 0x8C, 0x71, > > + 0x5A, 0x46, 0x43, 0x14, 0xBC, 0xB3, 0xB3, 0xB0, 0x4D, > 0x67, 0xC8, 0x9F, 0x42, 0xFF, 0x80, 0x79, > > + 0x21, 0x80, 0x9E, 0x15, 0x30, 0x66, 0xE8, 0x42, 0x12, > 0x5E, 0x1A, 0xC8, 0x9E, 0x22, 0x21, 0xD0, > > + 0x43, 0xE9, 0x2B, 0xE9, 0xBB, 0xF4, 0x48, 0xCC, 0x2C, > 0xD4, 0xD8, 0x32, 0x80, 0x4C, 0x26, 0x2A, > > + 0x48, 0x24, 0x5F, 0x5A, 0xEA, 0x56, 0xEF, 0xA6, 0xDE, > 0x99, 0x9D, 0xCA, 0x3A, 0x6F, 0xBD, 0x81, > > + 0x27, 0x74, 0x06, 0x11, 0xEE, 0x76, 0x21, 0xBF, 0x9B, > 0x82, 0xC1, 0x27, 0x54, 0xB6, 0xB1, 0x6A, > > + 0x3D, 0x89, 0xA1, 0x76, 0x61, 0xB4, 0x6E, 0xA1, 0x13, > 0xA6, 0xBF, 0xAA, 0x47, 0xF0, 0x12, 0x6F, > > + 0xFD, 0x8A, 0x32, 0x6C, 0xB2, 0xFE, 0xDF, 0x51, 0xC8, > 0x8C, 0x23, 0xC9, 0x66, 0xBD, 0x9D, 0x1D, > > + 0x87, 0x12, 0x64, 0x02, 0x3D, 0x2D, 0xAF, 0x59, 0x8F, > 0xB8, 0xE4, 0x21, 0xE5, 0xB5, 0xB0, 0xCA, > > + 0x63, 0xB4, 0x78, 0x54, 0x05, 0xD4, 0x41, 0x2E, 0x50, > 0xAC, 0x94, 0xB0, 0xA5, 0x78, 0xAB, 0xB3, > > + 0xA0, 0x96, 0x75, 0x1A, 0xD9, 0x92, 0x87, 0x13, 0x75, > 0x22, 0x2F, 0x32, 0xA8, 0x08, 0x6E, 0xA0, > > + 0x5B, 0x8C, 0x25, 0xBF, 0xA0, 0xEF, 0x84, 0xCA, 0x21, > 0xD6, 0xEB, 0x1E, 0x4F, 0xC9, 0x9A, 0xEE, > > + 0x49, 0xE0, 0xF7, 0x01, 0x65, 0x6F, 0x89, 0x0B, 0x7D, > 0xC8, 0x69, 0xC8, 0xE6, 0x6E, 0xEA, 0xA7, > > + 0x97, 0xCE, 0x31, 0x29, 0xFF, 0x0E, 0xC5, 0x5B, 0x5C, > 0xD8, 0x4D, 0x1B, 0xA1, 0xD8, 0xFA, 0x2F, > > + 0x9E, 0x3F, 0x2E, 0x55, 0x16, 0x6B, 0xC9, 0x13, 0xA3, > 0xFD, 0x30, 0x82, 0x06, 0xA1, 0x30, 0x82, > > + 0x04, 0x89, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0A, > 0x61, 0x07, 0x02, 0xDC, 0x00, 0x00, 0x00, > > + 0x00, 0x00, 0x0B, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, > 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, > > + 0x05, 0x00, 0x30, 0x5F, 0x31, 0x13, 0x30, 0x11, 0x06, > 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, > > + 0x2C, 0x64, 0x01, 0x19, 0x16, 0x03, 0x63, 0x6F, 0x6D, > 0x31, 0x19, 0x30, 0x17, 0x06, 0x0A, 0x09, > > + 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, > 0x16, 0x09, 0x6D, 0x69, 0x63, 0x72, 0x6F, > > + 0x73, 0x6F, 0x66, 0x74, 0x31, 0x2D, 0x30, 0x2B, 0x06, > 0x03, 0x55, 0x04, 0x03, 0x13, 0x24, 0x4D, > > + 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, > 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x43, 0x65, > > + 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, > 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, > > + 0x69, 0x74, 0x79, 0x30, 0x1E, 0x17, 0x0D, 0x30, 0x35, > 0x30, 0x39, 0x31, 0x35, 0x32, 0x31, 0x35, > > + 0x35, 0x34, 0x31, 0x5A, 0x17, 0x0D, 0x31, 0x36, 0x30, > 0x33, 0x31, 0x35, 0x32, 0x32, 0x30, 0x35, > > + 0x34, 0x31, 0x5A, 0x30, 0x81, 0x81, 0x31, 0x0B, 0x30, > 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, > > + 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, > 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, 0x61, > > + 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, 0x31, > 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, > > + 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, 0x6E, > 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03, > > + 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, 0x72, > 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x43, > > + 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, > 0x6E, 0x31, 0x2B, 0x30, 0x29, 0x06, 0x03, > > + 0x55, 0x04, 0x03, 0x13, 0x22, 0x4D, 0x69, 0x63, 0x72, > 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x57, > > + 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x20, 0x56, 0x65, > 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, > > + 0x69, 0x6F, 0x6E, 0x20, 0x50, 0x43, 0x41, 0x30, 0x82, > 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, > > + 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, > 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, > > + 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC5, > 0xAC, 0x93, 0x4E, 0xE6, 0x4A, 0x11, 0x9E, > > + 0x37, 0xD0, 0x35, 0xD2, 0xB0, 0x06, 0x5C, 0x83, 0x14, > 0xA5, 0x61, 0x92, 0xFC, 0xFE, 0xB3, 0x89, > > + 0xC1, 0xE6, 0xCD, 0xC8, 0x1F, 0x31, 0x84, 0x09, 0x91, > 0x34, 0x46, 0x92, 0x2C, 0xB8, 0xEE, 0x2C, > > + 0xC5, 0x20, 0x73, 0xC4, 0xE8, 0x1A, 0xD8, 0x8D, 0xCE, > 0x7A, 0x68, 0xB5, 0x66, 0x78, 0x8B, 0xE5, > > + 0x60, 0x15, 0xA2, 0xF6, 0x29, 0x5A, 0x1D, 0x5E, 0x5D, > 0xFC, 0x62, 0xD3, 0xC1, 0x5C, 0x29, 0x89, > > + 0xFB, 0x33, 0xF8, 0x16, 0x95, 0x36, 0xDD, 0xB1, 0x46, > 0x74, 0x69, 0x72, 0x53, 0xD5, 0xAA, 0xE8, > > + 0x8A, 0x99, 0x1A, 0xD8, 0xF7, 0x67, 0x09, 0xD9, 0x09, > 0x20, 0x22, 0x38, 0x7A, 0xD6, 0x03, 0x23, > > + 0xD7, 0x89, 0x9F, 0x1C, 0x01, 0xB7, 0x51, 0xDF, 0x98, > 0x66, 0x2A, 0x02, 0x8B, 0x06, 0xEC, 0xE4, > > + 0x29, 0xEF, 0x5B, 0x42, 0x17, 0x15, 0x97, 0x51, 0x8D, > 0x7D, 0x25, 0x0A, 0xAF, 0x25, 0xE8, 0xDE, > > + 0xDC, 0x9B, 0x67, 0x16, 0x0A, 0x56, 0x73, 0x9D, 0xB3, > 0x1D, 0x85, 0x83, 0x0B, 0x7E, 0x33, 0x2B, > > + 0x62, 0x33, 0xCE, 0x1C, 0x20, 0x81, 0x4B, 0x5E, 0xD3, > 0xC6, 0x49, 0xB8, 0xF6, 0x2E, 0xD3, 0x4E, > > + 0xB0, 0x71, 0x44, 0x46, 0x64, 0x3E, 0xDE, 0x43, 0x66, > 0x04, 0xB9, 0xCC, 0x83, 0x48, 0x3A, 0xC5, > > + 0x36, 0x7A, 0x04, 0x48, 0x0B, 0x89, 0x02, 0x3D, 0x63, > 0xA2, 0x01, 0x76, 0x29, 0x97, 0x75, 0xE9, > > + 0x01, 0xE6, 0x00, 0x97, 0x09, 0x92, 0xF8, 0xE2, 0x27, > 0xF0, 0x29, 0x67, 0x43, 0x77, 0xC3, 0x50, > > + 0x96, 0x53, 0x31, 0xE1, 0xB6, 0x71, 0x8B, 0xEC, 0x77, > 0xC7, 0x7C, 0x31, 0x48, 0xD5, 0xB8, 0x25, > > + 0x22, 0x8C, 0x00, 0xF7, 0x28, 0x38, 0x7A, 0xBD, 0x7C, > 0xC7, 0x3F, 0xCD, 0x40, 0x26, 0x77, 0xDD, > > + 0x00, 0x00, 0x11, 0x9A, 0x95, 0xBE, 0x1F, 0xDB, 0x02, > 0x03, 0x01, 0x00, 0x01, 0xA3, 0x82, 0x02, > > + 0x3A, 0x30, 0x82, 0x02, 0x36, 0x30, 0x10, 0x06, 0x09, > 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, > > + 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x1D, > 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, > > + 0x04, 0x14, 0x90, 0x8B, 0x11, 0xA5, 0x70, 0xED, 0xE0, > 0xF9, 0xA9, 0xC0, 0xAC, 0x08, 0xC7, 0xB5, > > + 0xF4, 0x82, 0xB1, 0x3C, 0xC5, 0x4A, 0x30, 0x0B, 0x06, > 0x03, 0x55, 0x1D, 0x0F, 0x04, 0x04, 0x03, > > + 0x02, 0x01, 0xC6, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, > 0x13, 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, > > + 0x03, 0x01, 0x01, 0xFF, 0x30, 0x81, 0x98, 0x06, 0x03, > 0x55, 0x1D, 0x23, 0x04, 0x81, 0x90, 0x30, > > + 0x81, 0x8D, 0x80, 0x14, 0x0E, 0xAC, 0x82, 0x60, 0x40, > 0x56, 0x27, 0x97, 0xE5, 0x25, 0x13, 0xFC, > > + 0x2A, 0xE1, 0x0A, 0x53, 0x95, 0x59, 0xE4, 0xA4, 0xA1, > 0x63, 0xA4, 0x61, 0x30, 0x5F, 0x31, 0x13, > > + 0x30, 0x11, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, > 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x03, > > + 0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30, 0x17, 0x06, 0x0A, > 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, > > + 0x64, 0x01, 0x19, 0x16, 0x09, 0x6D, 0x69, 0x63, 0x72, > 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x31, 0x2D, > > + 0x30, 0x2B, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x24, > 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, > > + 0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x43, > 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, > > + 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, > 0x72, 0x69, 0x74, 0x79, 0x82, 0x10, 0x79, > > + 0xAD, 0x16, 0xA1, 0x4A, 0xA0, 0xA5, 0xAD, 0x4C, 0x73, > 0x58, 0xF4, 0x07, 0x13, 0x2E, 0x65, 0x30, > > + 0x50, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x49, 0x30, > 0x47, 0x30, 0x45, 0xA0, 0x43, 0xA0, 0x41, > > + 0x86, 0x3F, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, > 0x63, 0x72, 0x6C, 0x2E, 0x6D, 0x69, 0x63, > > + 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, > 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, > > + 0x72, 0x6C, 0x2F, 0x70, 0x72, 0x6F, 0x64, 0x75, 0x63, > 0x74, 0x73, 0x2F, 0x6D, 0x69, 0x63, 0x72, > > + 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x72, 0x6F, 0x6F, 0x74, > 0x63, 0x65, 0x72, 0x74, 0x2E, 0x63, 0x72, > > + 0x6C, 0x30, 0x54, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, > 0x05, 0x07, 0x01, 0x01, 0x04, 0x48, 0x30, > > + 0x46, 0x30, 0x44, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, > 0x05, 0x07, 0x30, 0x02, 0x86, 0x38, 0x68, > > + 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, > 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, > > + 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, > 0x6B, 0x69, 0x2F, 0x63, 0x65, 0x72, 0x74, > > + 0x73, 0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, > 0x66, 0x74, 0x52, 0x6F, 0x6F, 0x74, 0x43, > > + 0x65, 0x72, 0x74, 0x2E, 0x63, 0x72, 0x74, 0x30, 0x81, > 0x80, 0x06, 0x03, 0x55, 0x1D, 0x20, 0x04, > > + 0x79, 0x30, 0x77, 0x30, 0x75, 0x06, 0x09, 0x2B, 0x06, > 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x2F, > > + 0x30, 0x68, 0x30, 0x66, 0x06, 0x08, 0x2B, 0x06, 0x01, > 0x05, 0x05, 0x07, 0x02, 0x02, 0x30, 0x5A, > > + 0x1E, 0x58, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x70, 0x00, > 0x79, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, > > + 0x00, 0x68, 0x00, 0x74, 0x00, 0x20, 0x00, 0xA9, 0x00, > 0x20, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, > > + 0x00, 0x39, 0x00, 0x2D, 0x00, 0x32, 0x00, 0x30, 0x00, > 0x30, 0x00, 0x35, 0x00, 0x20, 0x00, 0x4D, > > + 0x00, 0x69, 0x00, 0x63, 0x00, 0x72, 0x00, 0x6F, 0x00, > 0x73, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x74, > > + 0x00, 0x20, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x72, 0x00, > 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x61, > > + 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, > 0x2E, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, > > + 0x25, 0x04, 0x18, 0x30, 0x16, 0x06, 0x08, 0x2B, 0x06, > 0x01, 0x05, 0x05, 0x07, 0x03, 0x03, 0x06, > > + 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x0A, > 0x03, 0x06, 0x30, 0x0D, 0x06, 0x09, 0x2A, > > + 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, > 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x25, > > + 0x31, 0xA1, 0x58, 0xEA, 0x52, 0xE5, 0xE1, 0x17, 0x0C, > 0xE6, 0xF1, 0x3F, 0x78, 0xA3, 0x3F, 0x72, > > + 0xAF, 0xA7, 0x57, 0x10, 0x53, 0x89, 0x10, 0x5E, 0x32, > 0x9C, 0xB6, 0x70, 0xC3, 0x15, 0x2B, 0x4D, > > + 0x15, 0x30, 0x34, 0xE8, 0xC0, 0x6A, 0xE4, 0x1C, 0xD3, > 0x2E, 0x20, 0x65, 0x48, 0xD7, 0x1B, 0x98, > > + 0x62, 0x21, 0xBA, 0x45, 0x9F, 0x4A, 0xEC, 0xDB, 0x2F, > 0x09, 0x19, 0x51, 0xE5, 0xED, 0x32, 0x19, > > + 0x51, 0x2F, 0xE1, 0xDD, 0xFB, 0xC6, 0x52, 0xFD, 0xEB, > 0xC6, 0x82, 0x25, 0x42, 0x03, 0x09, 0xA6, > > + 0x38, 0xB6, 0x36, 0x1F, 0xCC, 0xC9, 0x80, 0xBB, 0x5A, > 0x69, 0x18, 0x31, 0xC3, 0xB3, 0xA0, 0xB3, > > + 0x67, 0x47, 0xBE, 0x9D, 0xC7, 0xE2, 0x3F, 0x96, 0xB3, > 0x88, 0xF8, 0x19, 0xBE, 0x39, 0xB9, 0xE9, > > + 0x95, 0xCE, 0xFC, 0x7C, 0xAF, 0xA8, 0xCD, 0xD0, 0x41, > 0x90, 0xE0, 0xD5, 0xB3, 0x1C, 0x2F, 0x68, > > + 0xBB, 0xDB, 0x0F, 0x6C, 0x6A, 0xDD, 0xF2, 0xAF, 0xDE, > 0xF2, 0xB5, 0xDE, 0x0D, 0xB6, 0xA6, 0x5A, > > + 0xF0, 0x86, 0x0A, 0xB9, 0x6D, 0x99, 0x4B, 0x3F, 0x7B, > 0x2D, 0x01, 0x84, 0x6C, 0x8F, 0x87, 0xDC, > > + 0x7F, 0x8F, 0xAB, 0x14, 0x88, 0xD0, 0x06, 0x91, 0x34, > 0xBE, 0x1B, 0x82, 0x22, 0xA4, 0xBC, 0x55, > > + 0x8A, 0xAD, 0x9B, 0xFC, 0x73, 0x14, 0x10, 0xC4, 0xC9, > 0x19, 0x1E, 0x07, 0x7D, 0x9B, 0x0E, 0xC0, > > + 0x95, 0x26, 0x5D, 0xC6, 0x1F, 0xAC, 0xB4, 0xF2, 0x7E, > 0xBA, 0x25, 0x70, 0x4A, 0x7B, 0xD7, 0x8E, > > + 0xD1, 0x9D, 0xA0, 0x13, 0x49, 0x7A, 0xB0, 0x02, 0x52, > 0x52, 0x24, 0xF4, 0xAF, 0xDD, 0x40, 0x2D, > > + 0xE5, 0x3E, 0x32, 0x58, 0xB3, 0x4A, 0x6A, 0xDD, 0x11, > 0x59, 0xAA, 0x2D, 0xBC, 0xA4, 0xA0, 0x73, > > + 0x38, 0xF9, 0x40, 0x77, 0x6B, 0x34, 0x19, 0x57, 0xCD, > 0x38, 0x68, 0x27, 0x82, 0xF8, 0xD1, 0x6F, > > + 0xEB, 0x23, 0xC0, 0x3F, 0x52, 0xF3, 0x4E, 0xD5, 0x02, > 0x3E, 0x6A, 0x9A, 0x2B, 0xC1, 0xF5, 0x31, > > + 0x71, 0xDB, 0x41, 0x4D, 0x3B, 0xDE, 0xEF, 0xAD, 0xAF, > 0x1F, 0x88, 0x65, 0x43, 0x1B, 0x51, 0xB7, > > + 0x9A, 0x75, 0xCA, 0x8E, 0x69, 0x49, 0x10, 0x8F, 0x78, > 0x8A, 0x74, 0x45, 0xB9, 0x09, 0x8E, 0x73, > > + 0x77, 0x07, 0x32, 0x4A, 0x4B, 0xD7, 0x68, 0x2B, 0x98, > 0xC5, 0xBA, 0x54, 0xEA, 0x3F, 0xCB, 0xA2, > > + 0x00, 0x8C, 0xBB, 0xD8, 0x10, 0x58, 0xF2, 0xDB, 0xDC, > 0x9B, 0xCD, 0xD8, 0xEA, 0x48, 0x43, 0xE2, > > + 0x4A, 0x7E, 0x65, 0xB2, 0xDC, 0xF5, 0x2D, 0x4E, 0x25, > 0x67, 0xA8, 0xE0, 0xB5, 0xBA, 0xA7, 0xDD, > > + 0x7E, 0x5E, 0xC1, 0x4C, 0x02, 0x74, 0xC9, 0xB3, 0x6E, > 0xE3, 0xF8, 0xF0, 0x0B, 0xED, 0xFC, 0xB9, > > + 0x29, 0xC5, 0x5B, 0xC9, 0x36, 0x51, 0x90, 0xDB, 0x78, > 0x7D, 0xB9, 0x32, 0x0F, 0x5E, 0x76, 0xD2, > > + 0x15, 0x5C, 0x3B, 0x37, 0x21, 0xC6, 0xDB, 0xC9, 0x19, > 0x6E, 0xED, 0x74, 0x2A, 0x5C, 0x2C, 0x0B, > > + 0x51, 0x49, 0x45, 0x53, 0xB0, 0xB2, 0xB3, 0x23, 0xD4, > 0xA1, 0xB0, 0x5F, 0x0D, 0x19, 0xCD, 0x14, > > + 0xA7, 0xE3, 0x3C, 0x9B, 0x97, 0x72, 0x94, 0x14, 0xDF, > 0xFF, 0xC1, 0x90, 0x1B, 0xA5, 0xDF, 0xF5, > > + 0xA9, 0xF3, 0x1B, 0x17, 0xDA, 0xB5, 0xFC, 0x44, 0xE0, > 0xE8, 0xE2, 0x3C, 0xA2, 0x7A, 0xBB, 0xBB, > > + 0x65, 0xE6, 0x4D, 0xB1, 0xB5, 0x15, 0xA1, 0xD9, 0x67, > 0x3B, 0xB0, 0x0C, 0x7D, 0x3B, 0xE9, 0xEE, > > + 0x51, 0x2A, 0x47, 0xF5, 0x15, 0x0F, 0x8C, 0xAD, 0x5D, > 0x2E, 0x35, 0xDF, 0xF4, 0xA4, 0x2E, 0xF6, > > + 0x13, 0x37, 0x5A, 0x2B, 0xE8, 0x55, 0x9A, 0x49, 0x2C, > 0x97, 0xCE, 0x9D, 0x01, 0x9E, 0x97, 0x46, > > + 0x5C, 0xD9, 0x2D, 0xBC, 0x24, 0x5A, 0x95, 0x59, 0x6F, > 0x4D, 0xCA, 0x9D, 0xD6, 0x57, 0x26, 0x31, > > + 0x82, 0x04, 0x96, 0x30, 0x82, 0x04, 0x92, 0x02, 0x01, > 0x01, 0x30, 0x81, 0x90, 0x30, 0x81, 0x81, > > + 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, > 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, > > + 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, > 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, > > + 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, > 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, > > + 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06, > 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, > > + 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, > 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, > > + 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x2B, 0x30, 0x29, 0x06, > 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x4D, > > + 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, > 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, > > + 0x20, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, > 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x50, 0x43, > > + 0x41, 0x02, 0x0A, 0x61, 0x01, 0xC6, 0xC1, 0x00, 0x00, > 0x00, 0x00, 0x00, 0x07, 0x30, 0x09, 0x06, > > + 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0xA0, > 0x81, 0xBA, 0x30, 0x19, 0x06, 0x09, 0x2A, > > + 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x03, 0x31, > 0x0C, 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, > > + 0x01, 0x82, 0x37, 0x02, 0x01, 0x04, 0x30, 0x1C, 0x06, > 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, > > + 0x37, 0x02, 0x01, 0x0B, 0x31, 0x0E, 0x30, 0x0C, 0x06, > 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, > > + 0x37, 0x02, 0x01, 0x15, 0x30, 0x23, 0x06, 0x09, 0x2A, > 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, > > + 0x04, 0x31, 0x16, 0x04, 0x14, 0xC5, 0xC5, 0xC1, 0xC3, > 0x46, 0xC4, 0x12, 0xB9, 0x38, 0xED, 0xE5, > > + 0x7E, 0x66, 0x78, 0x4E, 0x8F, 0x55, 0x10, 0x7D, 0xAC, > 0x30, 0x5A, 0x06, 0x0A, 0x2B, 0x06, 0x01, > > + 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x0C, 0x31, 0x4C, > 0x30, 0x4A, 0xA0, 0x24, 0x80, 0x22, 0x00, > > + 0x4D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x72, 0x00, 0x6F, > 0x00, 0x73, 0x00, 0x6F, 0x00, 0x66, 0x00, > > + 0x74, 0x00, 0x20, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6E, > 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, > > + 0x73, 0xA1, 0x22, 0x80, 0x20, 0x68, 0x74, 0x74, 0x70, > 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, > > + 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, > 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x77, 0x69, > > + 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x30, 0x0D, 0x06, 0x09, > 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, > > + 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0xC0, > 0x53, 0x19, 0xE7, 0x27, 0xE6, 0xD6, 0xD7, > > + 0xA8, 0xAE, 0xA0, 0xE6, 0x4C, 0xEF, 0x9A, 0xBC, 0x1D, > 0x19, 0xD4, 0xC5, 0x7F, 0x7C, 0x71, 0xFF, > > + 0x14, 0x7C, 0xAD, 0x7A, 0x8F, 0x2D, 0x0F, 0x40, 0x38, > 0x9B, 0x83, 0x09, 0xEE, 0xF5, 0x34, 0x92, > > + 0xB4, 0x85, 0x34, 0x7C, 0xBA, 0x9B, 0x58, 0x5D, 0xA6, > 0x15, 0xDE, 0x99, 0xBF, 0x25, 0x89, 0xDB, > > + 0xC0, 0x3A, 0x98, 0x21, 0x1C, 0x25, 0x09, 0xBD, 0x41, > 0xAA, 0x0F, 0x90, 0x6C, 0x62, 0xE9, 0xBD, > > + 0x1D, 0xDD, 0x7C, 0xA4, 0x1F, 0x19, 0x3F, 0xC8, 0x11, > 0xF5, 0x1C, 0x9E, 0xEA, 0x2E, 0x1A, 0xCE, > > + 0x5A, 0x61, 0x8A, 0x77, 0xFA, 0x65, 0x1F, 0x03, 0xB4, > 0x45, 0x02, 0x0F, 0xB4, 0x0E, 0xB9, 0x44, > > + 0xF6, 0x75, 0xF6, 0x67, 0x91, 0xAD, 0xFA, 0xF9, 0xC3, > 0xFA, 0x63, 0x91, 0x58, 0xFE, 0x40, 0xDF, > > + 0x92, 0x6B, 0x59, 0x42, 0x44, 0x66, 0xD2, 0x88, 0x49, > 0x59, 0x29, 0x1D, 0x6A, 0xF9, 0x93, 0x9B, > > + 0xD5, 0x38, 0x84, 0x96, 0xD7, 0xAF, 0xBA, 0xEC, 0x29, > 0x8D, 0x06, 0x8C, 0x8B, 0xF4, 0xA1, 0x56, > > + 0x0F, 0x78, 0x3F, 0x35, 0xCB, 0x12, 0x8A, 0x85, 0xD5, > 0x7C, 0xFC, 0x63, 0xDD, 0x72, 0xA1, 0x13, > > + 0xD3, 0x25, 0x4A, 0x59, 0x21, 0xD0, 0xC6, 0x47, 0x9F, > 0x22, 0xF7, 0xF8, 0x32, 0xA2, 0x05, 0x2B, > > + 0x53, 0xC5, 0x96, 0x98, 0x0D, 0x39, 0x02, 0xAD, 0x85, > 0xF7, 0x18, 0x73, 0x34, 0x12, 0x7F, 0x5A, > > + 0xCB, 0xE1, 0xA2, 0xFB, 0x4E, 0x25, 0x81, 0xF0, 0x9F, > 0x7A, 0x79, 0xDB, 0x4F, 0x4B, 0x66, 0x44, > > + 0x30, 0x8E, 0x0D, 0x57, 0x23, 0xD3, 0x7F, 0x60, 0x87, > 0xDE, 0xD0, 0x4C, 0x90, 0x90, 0x84, 0x64, > > + 0x70, 0xE8, 0x15, 0x65, 0xCA, 0x18, 0xF8, 0x9A, 0xB6, > 0x0C, 0x24, 0xF5, 0xDF, 0xC3, 0x47, 0xE2, > > + 0x7C, 0xAD, 0x91, 0x70, 0x6D, 0xF8, 0x43, 0xE9, 0xA1, > 0x82, 0x02, 0x1D, 0x30, 0x82, 0x02, 0x19, > > + 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, > 0x09, 0x06, 0x31, 0x82, 0x02, 0x0A, 0x30, > > + 0x82, 0x02, 0x06, 0x02, 0x01, 0x01, 0x30, 0x81, 0x85, > 0x30, 0x77, 0x31, 0x0B, 0x30, 0x09, 0x06, > > + 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, > 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, > > + 0x08, 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, > 0x67, 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, > > + 0x0E, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, > 0x65, 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, > > + 0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, > 0x15, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, > > + 0x6F, 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, > 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, > > + 0x21, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, > 0x18, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, > > + 0x6F, 0x66, 0x74, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x2D, > 0x53, 0x74, 0x61, 0x6D, 0x70, 0x20, 0x50, > > + 0x43, 0x41, 0x02, 0x0A, 0x61, 0x03, 0xDC, 0xF6, 0x00, > 0x00, 0x00, 0x00, 0x00, 0x0C, 0x30, 0x07, > > + 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0xA0, 0x5D, > 0x30, 0x18, 0x06, 0x09, 0x2A, 0x86, 0x48, > > + 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x03, 0x31, 0x0B, 0x06, > 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, > > + 0x01, 0x07, 0x01, 0x30, 0x1C, 0x06, 0x09, 0x2A, 0x86, > 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x05, > > + 0x31, 0x0F, 0x17, 0x0D, 0x30, 0x39, 0x30, 0x34, 0x32, > 0x32, 0x30, 0x35, 0x35, 0x34, 0x33, 0x34, > > + 0x5A, 0x30, 0x23, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, > 0xF7, 0x0D, 0x01, 0x09, 0x04, 0x31, 0x16, > > + 0x04, 0x14, 0x74, 0xD7, 0x54, 0xA0, 0xC0, 0x9E, 0x62, > 0xF0, 0xDD, 0x92, 0xDC, 0xD6, 0x96, 0x34, > > + 0xA1, 0x0B, 0xF0, 0xD5, 0xB5, 0x3A, 0x30, 0x0D, 0x06, > 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, > > + 0x01, 0x01, 0x05, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, > 0x8D, 0x16, 0xB5, 0xC8, 0x3D, 0xBC, 0x8A, > > + 0xB5, 0xC3, 0x23, 0xF3, 0x33, 0xB0, 0xFA, 0x75, 0xAD, > 0xAC, 0x53, 0x0D, 0x5C, 0xF4, 0xD9, 0xBE, > > + 0x63, 0xEB, 0x0D, 0x6F, 0x69, 0x63, 0x91, 0xF8, 0x8E, > 0x67, 0x03, 0xE1, 0xC6, 0x2E, 0xCD, 0x9C, > > + 0xEB, 0xDD, 0x9C, 0xCA, 0x65, 0x4A, 0xBB, 0xF2, 0xF4, > 0x1C, 0x85, 0x44, 0xD6, 0x58, 0x70, 0x2E, > > + 0x3B, 0xFE, 0x97, 0xD0, 0xEC, 0x72, 0x77, 0x20, 0xA8, > 0x20, 0xAC, 0xF0, 0xED, 0x86, 0xC4, 0xFF, > > + 0x3A, 0x3D, 0x40, 0xD9, 0xF6, 0xD5, 0x99, 0xBE, 0xCC, > 0xD2, 0xD8, 0xBA, 0x71, 0x51, 0x60, 0xAA, > > + 0x72, 0x36, 0x13, 0x8B, 0x0A, 0xA9, 0xD6, 0xF5, 0x36, > 0xE0, 0x44, 0x6B, 0xC1, 0x44, 0x42, 0x43, > > + 0x56, 0x1A, 0xD6, 0xF1, 0x5A, 0x98, 0xCC, 0xBA, 0xA9, > 0x4C, 0xCF, 0xC9, 0x86, 0xC3, 0x5B, 0x1C, > > + 0xDF, 0x75, 0x22, 0x54, 0x6A, 0xF0, 0x18, 0x34, 0x0B, > 0x29, 0xB0, 0x26, 0x07, 0x59, 0xB6, 0x52, > > + 0x7B, 0x69, 0x74, 0x11, 0x1B, 0xB8, 0x29, 0x19, 0x36, > 0x0E, 0xB7, 0x65, 0xCB, 0x87, 0x09, 0x9E, > > + 0x03, 0x28, 0x6C, 0xDB, 0xA7, 0xFB, 0xDF, 0xC7, 0xF7, > 0xCE, 0x0D, 0xC2, 0xBA, 0xEA, 0x3C, 0xE8, > > + 0x43, 0x1E, 0x7F, 0xF2, 0x64, 0xDA, 0x87, 0x89, 0xC0, > 0xCD, 0x67, 0xE4, 0x84, 0x9B, 0xA7, 0x77, > > + 0xFA, 0x6C, 0x69, 0x19, 0x5B, 0xD1, 0xF7, 0xD9, 0x07, > 0x91, 0x50, 0xDD, 0x98, 0x26, 0x10, 0xE3, > > + 0x2E, 0x39, 0x62, 0xF0, 0x56, 0xE9, 0xD9, 0x5C, 0x85, > 0x67, 0x9B, 0x2F, 0xDE, 0xD1, 0x00, 0x45, > > + 0x0E, 0x99, 0x1F, 0xDF, 0x7E, 0xC9, 0x10, 0x56, 0xC7, > 0x00, 0x6D, 0x5F, 0x23, 0x57, 0x12, 0x84, > > + 0xCD, 0xAC, 0x82, 0xAE, 0x39, 0x52, 0xA5, 0x19, 0x23, > 0xA3, 0x6B, 0xE7, 0x49, 0x8F, 0x86, 0x74, > > + 0x46, 0x41, 0x2A, 0x0F, 0x3D, 0x29, 0xB7, 0xAE, 0x8C, > 0x00 > > + }; > > + > > +// > > +// Sample Authenticode Data with SHA-256 hash > algorithm. > > +// This data should be retrieved from signed PE/COFF > image according to SECURITY > > +// directory in PE/COFF Header. > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 > AuthenticodeWithSha256[] = { > > + 0x30, 0x82, 0x0e, 0xd1, 0x06, 0x09, 0x2a, 0x86, 0x48, > 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0, > > + 0x82, 0x0e, 0xc2, 0x30, 0x82, 0x0e, 0xbe, 0x02, 0x01, > 0x01, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x09, > > + 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, > 0x05, 0x00, 0x30, 0x5c, 0x06, 0x0a, 0x2b, > > + 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x04, > 0xa0, 0x4e, 0x30, 0x4c, 0x30, 0x17, 0x06, > > + 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, > 0x01, 0x0f, 0x30, 0x09, 0x03, 0x01, 0x00, > > + 0xa0, 0x04, 0xa2, 0x02, 0x80, 0x00, 0x30, 0x31, 0x30, > 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, > > + 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20, > 0x61, 0x82, 0xb7, 0xf8, 0x8c, 0xff, 0xc2, > > + 0xeb, 0x79, 0x6e, 0x9d, 0xa9, 0xdd, 0x39, 0x52, 0xdd, > 0x36, 0xdd, 0xf1, 0x43, 0x27, 0x58, 0x8c, > > + 0xa7, 0xcc, 0xae, 0xde, 0xdd, 0x3c, 0x02, 0x12, 0x49, > 0xa0, 0x82, 0x0c, 0x0a, 0x30, 0x82, 0x05, > > + 0xe5, 0x30, 0x82, 0x03, 0xcd, 0xa0, 0x03, 0x02, 0x01, > 0x02, 0x02, 0x0a, 0x61, 0x03, 0x5f, 0x09, > > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x30, 0x0d, 0x06, > 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, > > + 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x90, 0x31, > 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, > > + 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, > 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, > > + 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, > 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, > > + 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, > 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, > > + 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x4d, 0x69, > 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, > > + 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, > 0x69, 0x6f, 0x6e, 0x31, 0x3a, 0x30, 0x38, > > + 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x31, 0x4d, 0x69, > 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, > > + 0x20, 0x54, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, > 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, > > + 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, > 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, > > + 0x69, 0x74, 0x79, 0x20, 0x32, 0x30, 0x31, 0x30, 0x30, > 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x36, > > + 0x32, 0x31, 0x32, 0x32, 0x35, 0x35, 0x30, 0x31, 0x5a, > 0x17, 0x0d, 0x31, 0x34, 0x30, 0x36, 0x32, > > + 0x31, 0x32, 0x33, 0x30, 0x35, 0x30, 0x31, 0x5a, 0x30, > 0x81, 0x81, 0x31, 0x13, 0x30, 0x11, 0x06, > > + 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, > 0x01, 0x19, 0x16, 0x03, 0x63, 0x6f, 0x6d, > > + 0x31, 0x19, 0x30, 0x17, 0x06, 0x0a, 0x09, 0x92, 0x26, > 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, > > + 0x16, 0x09, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, > 0x66, 0x74, 0x31, 0x14, 0x30, 0x12, 0x06, > > + 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, > 0x01, 0x19, 0x16, 0x04, 0x63, 0x6f, 0x72, > > + 0x70, 0x31, 0x17, 0x30, 0x15, 0x06, 0x0a, 0x09, 0x92, > 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, > > + 0x19, 0x16, 0x07, 0x72, 0x65, 0x64, 0x6d, 0x6f, 0x6e, > 0x64, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, > > + 0x55, 0x04, 0x03, 0x13, 0x17, 0x4d, 0x53, 0x49, 0x54, > 0x20, 0x54, 0x65, 0x73, 0x74, 0x20, 0x43, > > + 0x6f, 0x64, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x43, > 0x41, 0x20, 0x33, 0x30, 0x82, 0x01, 0x22, > > + 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, > 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, > > + 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, > 0x82, 0x01, 0x01, 0x00, 0x9b, 0x71, 0xdd, > > + 0x0d, 0x32, 0x2d, 0x08, 0xe8, 0x2d, 0x01, 0x90, 0x9c, > 0xdf, 0x9f, 0x32, 0x58, 0x8b, 0x47, 0xd0, > > + 0xfe, 0x9a, 0x6b, 0x40, 0x5e, 0x76, 0xa2, 0x10, 0x00, > 0x0e, 0xd2, 0x8f, 0xce, 0xa1, 0x5f, 0x42, > > + 0xa7, 0x0b, 0x5e, 0x83, 0xc2, 0xe9, 0x06, 0xa6, 0x0a, > 0xb4, 0x3d, 0x30, 0x50, 0xdb, 0x35, 0x43, > > + 0x2c, 0xd3, 0xc3, 0xc6, 0x3c, 0xc9, 0xb5, 0x88, 0xfc, > 0x0b, 0xe6, 0xa3, 0x71, 0x47, 0xce, 0xfd, > > + 0x88, 0x62, 0xa4, 0x25, 0xe2, 0x4e, 0x1b, 0x79, 0x3d, > 0xe3, 0xbf, 0x8b, 0x84, 0x2d, 0x64, 0x25, > > + 0xa5, 0xfa, 0x8e, 0x30, 0xae, 0xe3, 0x34, 0x7d, 0x27, > 0xf3, 0x5e, 0xf4, 0x05, 0x60, 0xc6, 0x0f, > > + 0x1a, 0x1b, 0x9e, 0xaf, 0x21, 0x37, 0xa9, 0xd9, 0xb6, > 0xb7, 0x6a, 0x54, 0x4b, 0x5e, 0xa0, 0x75, > > + 0xb5, 0x9a, 0xc4, 0xb6, 0xbe, 0x28, 0xe3, 0x3b, 0xf7, > 0x5a, 0x08, 0x77, 0xd9, 0x39, 0x4a, 0x2a, > > + 0x7a, 0xf8, 0xf4, 0xfe, 0xe8, 0x12, 0x54, 0x41, 0x11, > 0x55, 0xc8, 0xc7, 0x98, 0x3e, 0x64, 0xa5, > > + 0xbb, 0xda, 0x6b, 0xa4, 0xaa, 0x29, 0x8c, 0x9f, 0x27, > 0x55, 0x25, 0xe7, 0xfd, 0x31, 0x70, 0x60, > > + 0x1d, 0xd3, 0xc4, 0xf2, 0xb9, 0xef, 0x92, 0x4a, 0x9f, > 0xc8, 0x4c, 0x93, 0xe7, 0x19, 0xa8, 0x4e, > > + 0xbc, 0xe3, 0x62, 0xf4, 0xe0, 0x6e, 0xec, 0x45, 0x6e, > 0x61, 0x4e, 0xad, 0x58, 0xe0, 0xf0, 0xea, > > + 0xf7, 0x74, 0x2c, 0xdf, 0x1b, 0xf6, 0x43, 0x3c, 0x84, > 0xc2, 0x8c, 0x0b, 0xb4, 0xbd, 0x4a, 0x57, > > + 0xa6, 0x0c, 0x4e, 0x9e, 0x73, 0x43, 0x5f, 0x2d, 0xaf, > 0x22, 0xf4, 0xa6, 0xfd, 0x5a, 0x87, 0xb9, > > + 0xbe, 0x6f, 0x9e, 0x1d, 0x99, 0xc8, 0xdf, 0x95, 0xc2, > 0x02, 0xad, 0x7d, 0x4a, 0xf3, 0xba, 0x5d, > > + 0xe8, 0x7b, 0x6e, 0x57, 0xe5, 0x3a, 0x02, 0xf8, 0xd3, > 0x01, 0x15, 0xae, 0x4f, 0x02, 0x03, 0x01, > > + 0x00, 0x01, 0xa3, 0x82, 0x01, 0x4c, 0x30, 0x82, 0x01, > 0x48, 0x30, 0x10, 0x06, 0x09, 0x2b, 0x06, > > + 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, > 0x02, 0x01, 0x00, 0x30, 0x1d, 0x06, 0x03, > > + 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x4e, 0xfe, > 0x61, 0x39, 0x6f, 0xca, 0xc5, 0x64, 0xe0, > > + 0x20, 0xb6, 0xda, 0xc1, 0xb9, 0x52, 0x0e, 0xca, 0xdf, > 0x8e, 0xfe, 0x30, 0x19, 0x06, 0x09, 0x2b, > > + 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04, > 0x0c, 0x1e, 0x0a, 0x00, 0x53, 0x00, 0x75, > > + 0x00, 0x62, 0x00, 0x43, 0x00, 0x41, 0x30, 0x0b, 0x06, > 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, > > + 0x02, 0x01, 0x86, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1d, > 0x13, 0x01, 0x01, 0xff, 0x04, 0x08, 0x30, > > + 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x00, 0x30, 0x1f, > 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, > > + 0x30, 0x16, 0x80, 0x14, 0xa3, 0x01, 0x04, 0x7e, 0x30, > 0x88, 0x33, 0xeb, 0xb9, 0x31, 0x9c, 0xca, > > + 0xeb, 0x85, 0x76, 0x67, 0xfc, 0x65, 0xb4, 0xd1, 0x30, > 0x59, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, > > + 0x52, 0x30, 0x50, 0x30, 0x4e, 0xa0, 0x4c, 0xa0, 0x4a, > 0x86, 0x48, 0x68, 0x74, 0x74, 0x70, 0x3a, > > + 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x6d, 0x69, 0x63, > 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, > > + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63, > 0x72, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x64, > > + 0x75, 0x63, 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63, 0x54, > 0x65, 0x73, 0x52, 0x6f, 0x6f, 0x43, 0x65, > > + 0x72, 0x41, 0x75, 0x74, 0x5f, 0x32, 0x30, 0x31, 0x30, > 0x2d, 0x30, 0x36, 0x2d, 0x31, 0x37, 0x2e, > > + 0x63, 0x72, 0x6c, 0x30, 0x5d, 0x06, 0x08, 0x2b, 0x06, > 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, > > + 0x51, 0x30, 0x4f, 0x30, 0x4d, 0x06, 0x08, 0x2b, 0x06, > 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, > > + 0x41, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, > 0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63, 0x72, > > + 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, > 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x65, > > + 0x72, 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63, 0x54, 0x65, > 0x73, 0x52, 0x6f, 0x6f, 0x43, 0x65, 0x72, > > + 0x41, 0x75, 0x74, 0x5f, 0x32, 0x30, 0x31, 0x30, 0x2d, > 0x30, 0x36, 0x2d, 0x31, 0x37, 0x2e, 0x63, > > + 0x72, 0x74, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, > 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, > > + 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x91, 0x2d, 0x11, > 0x36, 0xd1, 0x2c, 0x5e, 0x21, 0x77, 0x62, > > + 0x1a, 0xa1, 0xcf, 0x9a, 0x7e, 0x62, 0x2d, 0xc9, 0x90, > 0xb9, 0x0e, 0x3d, 0x71, 0x0d, 0xa0, 0x4a, > > + 0x48, 0xad, 0xe1, 0xd6, 0xb0, 0x73, 0x4a, 0x51, 0x4b, > 0x4c, 0xb2, 0x6b, 0x88, 0x0a, 0x5a, 0xb7, > > + 0xe9, 0x55, 0x67, 0x43, 0x8b, 0xf1, 0x9d, 0xcc, 0x52, > 0x03, 0xaf, 0xac, 0x85, 0xe9, 0xd3, 0x75, > > + 0xce, 0xe5, 0x6f, 0x8b, 0x3c, 0x80, 0x81, 0xab, 0xd1, > 0xd1, 0x73, 0x0d, 0x6b, 0xb0, 0x51, 0xb8, > > + 0xa2, 0x5e, 0x0c, 0x09, 0xe5, 0xa6, 0xbc, 0x54, 0x49, > 0xe5, 0x54, 0x38, 0x5a, 0xb7, 0x43, 0xd2, > > + 0x75, 0x34, 0x52, 0xdd, 0x35, 0x79, 0x95, 0x98, 0xd5, > 0x3c, 0xc6, 0xda, 0x46, 0xb2, 0xd8, 0xa0, > > + 0xa7, 0xcc, 0x30, 0x31, 0x0f, 0x4b, 0xeb, 0xb7, 0x02, > 0xab, 0x2b, 0x38, 0xd2, 0xb7, 0x27, 0xc2, > > + 0xc7, 0x0d, 0x62, 0xa4, 0xc0, 0x48, 0xf4, 0x1a, 0x48, > 0x79, 0x7d, 0xe1, 0x31, 0xa4, 0x5d, 0x19, > > + 0xd0, 0x18, 0x17, 0x00, 0xca, 0xe3, 0x5d, 0x0b, 0xc1, > 0x85, 0x7f, 0xf1, 0xbe, 0xd3, 0xcb, 0x97, > > + 0xf4, 0x1b, 0x62, 0x0f, 0xd7, 0x14, 0x38, 0x8d, 0xb2, > 0x2e, 0x98, 0xd4, 0x41, 0x6a, 0xb0, 0xb5, > > + 0x84, 0xee, 0xd8, 0x2c, 0x2d, 0x13, 0xfc, 0x50, 0x1d, > 0x9a, 0x6f, 0x31, 0x87, 0x1c, 0xe0, 0xd0, > > + 0xd0, 0xd3, 0x24, 0x52, 0xdf, 0x12, 0x8d, 0xfb, 0xf7, > 0x7f, 0x33, 0x04, 0x17, 0x7a, 0x8b, 0xe3, > > + 0xbd, 0x7c, 0x1e, 0xa2, 0x2a, 0x91, 0x76, 0xd9, 0xfc, > 0x43, 0x17, 0xa7, 0x0a, 0xa1, 0xd9, 0xc6, > > + 0x3c, 0x3a, 0x42, 0xed, 0xb7, 0x12, 0xcd, 0x9e, 0xdd, > 0xfe, 0x91, 0x9d, 0x98, 0xb5, 0x35, 0xe8, > > + 0x94, 0xdd, 0x9a, 0xce, 0xd4, 0xf4, 0xac, 0xca, 0xa6, > 0xcd, 0x59, 0x3d, 0xde, 0x44, 0xbf, 0x0e, > > + 0x82, 0xe5, 0xdf, 0x5c, 0xe3, 0x49, 0xcb, 0x01, 0xa0, > 0x7f, 0x7b, 0xe2, 0x25, 0x21, 0xab, 0x95, > > + 0x50, 0x1e, 0x9f, 0xea, 0x77, 0x56, 0x47, 0x74, 0x73, > 0xf2, 0x25, 0x1b, 0x0e, 0x36, 0xb9, 0xa2, > > + 0x57, 0xbf, 0x2c, 0x57, 0xbc, 0xe4, 0xfb, 0x88, 0xb1, > 0x83, 0x56, 0xd8, 0x3c, 0xe0, 0x7c, 0xfd, > > + 0x11, 0x9f, 0xde, 0xe1, 0xb7, 0xd4, 0xc6, 0x23, 0xaf, > 0xae, 0xc7, 0x5e, 0x4f, 0xc5, 0x23, 0x74, > > + 0x98, 0x38, 0x74, 0x9d, 0x0d, 0x0d, 0x6d, 0xf4, 0xde, > 0x28, 0x44, 0x41, 0xd8, 0x22, 0x68, 0xe7, > > + 0x57, 0xa7, 0x66, 0x74, 0xb5, 0xc3, 0x31, 0x24, 0xe2, > 0x7c, 0xd5, 0x52, 0x5d, 0x8a, 0xd2, 0x4e, > > + 0x14, 0xbb, 0x08, 0xd3, 0x1a, 0x31, 0x12, 0x04, 0x58, > 0x9b, 0x3a, 0x99, 0x78, 0x93, 0x51, 0x3f, > > + 0x0b, 0x85, 0xce, 0xde, 0x09, 0x58, 0xf9, 0x96, 0x1b, > 0x91, 0x11, 0xa0, 0x68, 0x53, 0x33, 0xcb, > > + 0xbe, 0x08, 0x89, 0xcc, 0x95, 0x55, 0xae, 0x06, 0x78, > 0x27, 0x99, 0xa2, 0x56, 0xef, 0xae, 0x95, > > + 0x0a, 0x7f, 0x0d, 0xeb, 0x43, 0x0c, 0xc6, 0x9e, 0x3f, > 0x80, 0xbb, 0xc4, 0x74, 0x03, 0x9d, 0xb8, > > + 0x1a, 0xaa, 0xbc, 0xcb, 0x1e, 0x03, 0xfb, 0xd8, 0x49, > 0x89, 0x9d, 0x20, 0xaa, 0x25, 0x4b, 0x47, > > + 0x67, 0xf4, 0xa7, 0x0d, 0x8d, 0x76, 0x30, 0xc6, 0x48, > 0xce, 0xdd, 0x8d, 0xfa, 0xbe, 0xda, 0xb4, > > + 0xeb, 0x3d, 0xd8, 0x0c, 0x3b, 0x15, 0x9a, 0xd1, 0x83, > 0x85, 0xe5, 0xe3, 0x92, 0xaa, 0x3b, 0xad, > > + 0x34, 0x0c, 0x39, 0xf1, 0x7f, 0x75, 0xae, 0xe8, 0x70, > 0xb0, 0xfd, 0xf2, 0x8e, 0x29, 0xda, 0xdc, > > + 0x09, 0x4f, 0x8a, 0x7b, 0x63, 0xbe, 0x1e, 0x8a, 0xc3, > 0x58, 0xd1, 0x03, 0xbe, 0x37, 0xe9, 0xed, > > + 0x32, 0x26, 0xa8, 0x0c, 0xfe, 0xed, 0x12, 0xa7, 0x63, > 0x04, 0xb3, 0x92, 0x97, 0xd9, 0x46, 0xa3, > > + 0x33, 0x33, 0x9c, 0x5b, 0xbc, 0x54, 0x30, 0x82, 0x06, > 0x1d, 0x30, 0x82, 0x05, 0x05, 0xa0, 0x03, > > + 0x02, 0x01, 0x02, 0x02, 0x0a, 0x4e, 0x30, 0xa5, 0xbb, > 0x00, 0x00, 0x00, 0x12, 0x7b, 0xf2, 0x30, > > + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, > 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, > > + 0x81, 0x31, 0x13, 0x30, 0x11, 0x06, 0x0a, 0x09, 0x92, > 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, > > + 0x19, 0x16, 0x03, 0x63, 0x6f, 0x6d, 0x31, 0x19, 0x30, > 0x17, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, > > + 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6d, > 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, > > + 0x74, 0x31, 0x14, 0x30, 0x12, 0x06, 0x0a, 0x09, 0x92, > 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, > > + 0x19, 0x16, 0x04, 0x63, 0x6f, 0x72, 0x70, 0x31, 0x17, > 0x30, 0x15, 0x06, 0x0a, 0x09, 0x92, 0x26, > > + 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x07, > 0x72, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, > > + 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, > 0x13, 0x17, 0x4d, 0x53, 0x49, 0x54, 0x20, > > + 0x54, 0x65, 0x73, 0x74, 0x20, 0x43, 0x6f, 0x64, 0x65, > 0x53, 0x69, 0x67, 0x6e, 0x20, 0x43, 0x41, > > + 0x20, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x31, 0x30, > 0x34, 0x32, 0x31, 0x30, 0x33, 0x33, 0x33, > > + 0x34, 0x39, 0x5a, 0x17, 0x0d, 0x31, 0x33, 0x30, 0x34, > 0x32, 0x30, 0x30, 0x33, 0x33, 0x33, 0x34, > > + 0x39, 0x5a, 0x30, 0x70, 0x31, 0x0b, 0x30, 0x09, 0x06, > 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, > > + 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, > 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, > > + 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, > 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, > > + 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, > 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, > > + 0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, > 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, > > + 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, > 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, > > + 0x03, 0x13, 0x11, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, > 0x6f, 0x66, 0x74, 0x20, 0x57, 0x69, 0x6e, > > + 0x64, 0x6f, 0x77, 0x73, 0x30, 0x82, 0x01, 0x22, 0x30, > 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, > > + 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, > 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, > > + 0x02, 0x82, 0x01, 0x01, 0x00, 0xca, 0x9f, 0xcb, 0x8c, > 0x5e, 0x61, 0x19, 0xb5, 0x37, 0x72, 0xd1, > > + 0xe2, 0x88, 0x1f, 0x37, 0x56, 0xce, 0xa8, 0x88, 0x05, > 0x3e, 0xe8, 0xa6, 0x8d, 0xfd, 0x0b, 0x30, > > + 0x63, 0x54, 0x89, 0x1d, 0xda, 0x11, 0x70, 0x5a, 0x06, > 0x00, 0x86, 0xd7, 0x7f, 0xe6, 0x21, 0x70, > > + 0x41, 0x81, 0x26, 0x4b, 0x6e, 0xc7, 0x02, 0xe2, 0xbf, > 0x61, 0x45, 0x04, 0x2f, 0x45, 0xbc, 0xd2, > > + 0x0d, 0xf6, 0xac, 0xda, 0x91, 0x6d, 0xc6, 0x60, 0xad, > 0xb3, 0x0b, 0x32, 0xe5, 0x13, 0x95, 0x96, > > + 0x02, 0x4e, 0x10, 0xad, 0x2e, 0x6c, 0xb0, 0xc7, 0x65, > 0x6d, 0xea, 0x89, 0x91, 0x67, 0x73, 0x5d, > > + 0x05, 0x12, 0x9f, 0x95, 0x74, 0x6a, 0x6d, 0xb0, 0x6a, > 0xd8, 0x94, 0x9b, 0xb0, 0x70, 0x79, 0xb0, > > + 0x85, 0x42, 0xe7, 0xd7, 0x19, 0xc4, 0x33, 0xfd, 0xac, > 0xbe, 0x2b, 0xd5, 0x7e, 0x5a, 0xa9, 0xc7, > > + 0xa7, 0x68, 0x53, 0xed, 0xaa, 0x51, 0x2a, 0x6b, 0xac, > 0x5a, 0xd7, 0x6e, 0xcf, 0x68, 0x60, 0x90, > > + 0xc7, 0xda, 0xd1, 0xe7, 0xf2, 0x53, 0x4a, 0x01, 0xaf, > 0xe8, 0xb1, 0x29, 0x91, 0xab, 0x4c, 0x58, > > + 0x64, 0xe6, 0xb6, 0xcc, 0xdc, 0x0f, 0x43, 0xf2, 0x87, > 0x15, 0xf8, 0x73, 0x06, 0xb8, 0x1f, 0xaa, > > + 0xf2, 0x66, 0x49, 0x82, 0xca, 0xf0, 0xdd, 0x4c, 0x7c, > 0xd5, 0xe7, 0x59, 0xb7, 0xc6, 0xd3, 0x81, > > + 0x29, 0x5c, 0xce, 0xe4, 0xfd, 0xf7, 0xeb, 0x58, 0x6b, > 0x50, 0x79, 0x72, 0x83, 0x4d, 0x59, 0xec, > > + 0xd1, 0xd2, 0xfc, 0x3a, 0x10, 0xc5, 0x7a, 0xba, 0x90, > 0xea, 0xfd, 0x54, 0xc7, 0xc8, 0x58, 0x2d, > > + 0x84, 0xe5, 0x5b, 0x51, 0x98, 0x2c, 0x36, 0x7c, 0x42, > 0x2b, 0xb1, 0x62, 0x4b, 0x0f, 0xf9, 0x72, > > + 0xd3, 0x3f, 0x99, 0xc8, 0xb4, 0x02, 0x17, 0x39, 0xe5, > 0x0b, 0xf2, 0x5d, 0x2d, 0x7f, 0x23, 0x41, > > + 0xcd, 0x58, 0x3a, 0x25, 0x75, 0x02, 0x03, 0x01, 0x00, > 0x01, 0xa3, 0x82, 0x02, 0xa5, 0x30, 0x82, > > + 0x02, 0xa1, 0x30, 0x3d, 0x06, 0x09, 0x2b, 0x06, 0x01, > 0x04, 0x01, 0x82, 0x37, 0x15, 0x07, 0x04, > > + 0x30, 0x30, 0x2e, 0x06, 0x26, 0x2b, 0x06, 0x01, 0x04, > 0x01, 0x82, 0x37, 0x15, 0x08, 0x83, 0xcf, > > + 0x89, 0x4d, 0xad, 0xf2, 0x02, 0x85, 0xa1, 0x9f, 0x0c, > 0x82, 0xfa, 0xca, 0x7d, 0x81, 0xe1, 0xfb, > > + 0x74, 0x81, 0x4f, 0x84, 0x9a, 0xf1, 0x69, 0x85, 0xa1, > 0xad, 0x1d, 0x02, 0x01, 0x64, 0x02, 0x01, > > + 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, > 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x29, > > + 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, > 0x15, 0x0a, 0x04, 0x1c, 0x30, 0x1a, 0x30, > > + 0x0c, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, > 0x37, 0x0a, 0x03, 0x06, 0x30, 0x0a, 0x06, > > + 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x03, > 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x25, > > + 0x04, 0x18, 0x30, 0x16, 0x06, 0x0a, 0x2b, 0x06, 0x01, > 0x04, 0x01, 0x82, 0x37, 0x0a, 0x03, 0x06, > > + 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, > 0x03, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, > > + 0x0e, 0x04, 0x16, 0x04, 0x14, 0xc9, 0x5a, 0xb3, 0x11, > 0x02, 0x66, 0x71, 0x8c, 0x5b, 0x06, 0x80, > > + 0x8a, 0x6d, 0x4f, 0x5b, 0xf2, 0xb5, 0x67, 0x45, 0xb5, > 0x30, 0x30, 0x06, 0x03, 0x55, 0x1d, 0x11, > > + 0x04, 0x29, 0x30, 0x27, 0xa0, 0x25, 0x06, 0x0a, 0x2b, > 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, > > + 0x02, 0x03, 0xa0, 0x17, 0x0c, 0x15, 0x77, 0x69, 0x6e, > 0x63, 0x62, 0x6c, 0x64, 0x40, 0x6d, 0x69, > > + 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, > 0x6f, 0x6d, 0x30, 0x1f, 0x06, 0x03, 0x55, > > + 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x4e, > 0xfe, 0x61, 0x39, 0x6f, 0xca, 0xc5, 0x64, > > + 0xe0, 0x20, 0xb6, 0xda, 0xc1, 0xb9, 0x52, 0x0e, 0xca, > 0xdf, 0x8e, 0xfe, 0x30, 0x81, 0xe8, 0x06, > > + 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x81, 0xe0, 0x30, 0x81, > 0xdd, 0x30, 0x81, 0xda, 0xa0, 0x81, 0xd7, > > + 0xa0, 0x81, 0xd4, 0x86, 0x36, 0x68, 0x74, 0x74, 0x70, > 0x3a, 0x2f, 0x2f, 0x63, 0x6f, 0x72, 0x70, > > + 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x4d, > 0x53, 0x49, 0x54, 0x25, 0x32, 0x30, 0x54, > > + 0x65, 0x73, 0x74, 0x25, 0x32, 0x30, 0x43, 0x6f, 0x64, > 0x65, 0x53, 0x69, 0x67, 0x6e, 0x25, 0x32, > > + 0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x33, 0x2e, 0x63, > 0x72, 0x6c, 0x86, 0x4d, 0x68, 0x74, 0x74, > > + 0x70, 0x3a, 0x2f, 0x2f, 0x6d, 0x73, 0x63, 0x72, 0x6c, > 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, > > + 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, > 0x6b, 0x69, 0x2f, 0x6d, 0x73, 0x63, 0x6f, > > + 0x72, 0x70, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x4d, 0x53, > 0x49, 0x54, 0x25, 0x32, 0x30, 0x54, 0x65, > > + 0x73, 0x74, 0x25, 0x32, 0x30, 0x43, 0x6f, 0x64, 0x65, > 0x53, 0x69, 0x67, 0x6e, 0x25, 0x32, 0x30, > > + 0x43, 0x41, 0x25, 0x32, 0x30, 0x33, 0x2e, 0x63, 0x72, > 0x6c, 0x86, 0x4b, 0x68, 0x74, 0x74, 0x70, > > + 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x6d, 0x69, > 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, > > + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, > 0x6d, 0x73, 0x63, 0x6f, 0x72, 0x70, 0x2f, > > + 0x63, 0x72, 0x6c, 0x2f, 0x4d, 0x53, 0x49, 0x54, 0x25, > 0x32, 0x30, 0x54, 0x65, 0x73, 0x74, 0x25, > > + 0x32, 0x30, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x67, > 0x6e, 0x25, 0x32, 0x30, 0x43, 0x41, 0x25, > > + 0x32, 0x30, 0x33, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x81, > 0xa9, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, > > + 0x05, 0x07, 0x01, 0x01, 0x04, 0x81, 0x9c, 0x30, 0x81, > 0x99, 0x30, 0x42, 0x06, 0x08, 0x2b, 0x06, > > + 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x36, 0x68, > 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, > > + 0x6f, 0x72, 0x70, 0x70, 0x6b, 0x69, 0x2f, 0x61, 0x69, > 0x61, 0x2f, 0x4d, 0x53, 0x49, 0x54, 0x25, > > + 0x32, 0x30, 0x54, 0x65, 0x73, 0x74, 0x25, 0x32, 0x30, > 0x43, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x67, > > + 0x6e, 0x25, 0x32, 0x30, 0x43, 0x41, 0x25, 0x32, 0x30, > 0x33, 0x2e, 0x63, 0x72, 0x74, 0x30, 0x53, > > + 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, > 0x02, 0x86, 0x47, 0x68, 0x74, 0x74, 0x70, > > + 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x69, > 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, > > + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, > 0x6d, 0x73, 0x63, 0x6f, 0x72, 0x70, 0x2f, > > + 0x4d, 0x53, 0x49, 0x54, 0x25, 0x32, 0x30, 0x54, 0x65, > 0x73, 0x74, 0x25, 0x32, 0x30, 0x43, 0x6f, > > + 0x64, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x25, 0x32, 0x30, > 0x43, 0x41, 0x25, 0x32, 0x30, 0x33, 0x2e, > > + 0x63, 0x72, 0x74, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, > 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, > > + 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x97, 0x6d, > 0x52, 0x46, 0x65, 0x08, 0x60, 0x01, 0x12, > > + 0x7a, 0x26, 0xaa, 0xd9, 0xc3, 0x15, 0xec, 0xc6, 0xae, > 0x0b, 0x75, 0xe4, 0xd5, 0xe0, 0x31, 0xf6, > > + 0xda, 0xc0, 0xb1, 0x1b, 0x7b, 0x8a, 0x07, 0xda, 0x2f, > 0x82, 0x4a, 0x21, 0x89, 0xe6, 0x61, 0x97, > > + 0xe4, 0x3a, 0x38, 0xd8, 0x0a, 0x26, 0x4e, 0x83, 0x54, > 0xbf, 0x32, 0xe3, 0x64, 0x36, 0x61, 0x40, > > + 0x75, 0x55, 0xf1, 0xaa, 0x34, 0xb2, 0xd3, 0x45, 0x8d, > 0x79, 0x9a, 0x93, 0x0b, 0x9f, 0x5a, 0xb3, > > + 0x5b, 0xcf, 0x0d, 0x28, 0x00, 0x46, 0x68, 0xe7, 0x36, > 0xc9, 0xe6, 0xd2, 0x03, 0x2d, 0x1c, 0x2b, > > + 0x24, 0x79, 0x32, 0xfb, 0xd8, 0x43, 0xb4, 0x0e, 0xd0, > 0x37, 0x3b, 0x5e, 0x15, 0xbf, 0x8a, 0x00, > > + 0x56, 0x00, 0x95, 0x00, 0xd4, 0x71, 0x09, 0xe1, 0x84, > 0xfa, 0x6e, 0xc5, 0x75, 0x2f, 0xe1, 0x83, > > + 0x7b, 0x66, 0xe2, 0x22, 0x75, 0x23, 0x6a, 0xf3, 0x83, > 0xfc, 0x94, 0xf8, 0x51, 0x6d, 0x40, 0x6d, > > + 0x20, 0x7e, 0xb0, 0xe9, 0xac, 0xa8, 0x28, 0x04, 0xa0, > 0x1a, 0x3c, 0x88, 0x7e, 0x7e, 0x3b, 0x96, > > + 0xe9, 0xd0, 0x4b, 0xfa, 0xfa, 0x34, 0x4a, 0x4f, 0xe7, > 0xe8, 0x76, 0x16, 0x20, 0xc0, 0x10, 0xca, > > + 0x1f, 0x7a, 0xde, 0x54, 0xfd, 0xb7, 0xf0, 0xea, 0x8f, > 0xe2, 0xcb, 0xa5, 0x1c, 0x58, 0x18, 0x57, > > + 0x6c, 0x7d, 0x06, 0xde, 0x8c, 0xbd, 0x45, 0xd7, 0x28, > 0x86, 0x13, 0x42, 0xaa, 0x4a, 0x9a, 0x50, > > + 0xc5, 0x76, 0x7f, 0x63, 0x99, 0xd0, 0x90, 0x92, 0xd6, > 0xc9, 0x21, 0xf2, 0xb8, 0x66, 0x9c, 0x96, > > + 0x53, 0xd2, 0xe5, 0xc4, 0xdd, 0x3a, 0x7c, 0x06, 0xae, > 0xb1, 0x7a, 0xb4, 0x36, 0x04, 0x9d, 0xe6, > > + 0x2a, 0xe4, 0x6a, 0x56, 0xd0, 0x9a, 0x98, 0xa2, 0xbf, > 0x6f, 0x43, 0xf2, 0xb0, 0x5b, 0xfd, 0xd9, > > + 0xfa, 0x08, 0x17, 0xc8, 0x3c, 0x61, 0xf1, 0x31, 0x82, > 0x02, 0x3a, 0x30, 0x82, 0x02, 0x36, 0x02, > > + 0x01, 0x01, 0x30, 0x81, 0x90, 0x30, 0x81, 0x81, 0x31, > 0x13, 0x30, 0x11, 0x06, 0x0a, 0x09, 0x92, > > + 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, > 0x03, 0x63, 0x6f, 0x6d, 0x31, 0x19, 0x30, > > + 0x17, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, > 0x2c, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6d, > > + 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x31, > 0x14, 0x30, 0x12, 0x06, 0x0a, 0x09, 0x92, > > + 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, > 0x04, 0x63, 0x6f, 0x72, 0x70, 0x31, 0x17, > > + 0x30, 0x15, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, > 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x07, > > + 0x72, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x20, > 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, > > + 0x13, 0x17, 0x4d, 0x53, 0x49, 0x54, 0x20, 0x54, 0x65, > 0x73, 0x74, 0x20, 0x43, 0x6f, 0x64, 0x65, > > + 0x53, 0x69, 0x67, 0x6e, 0x20, 0x43, 0x41, 0x20, 0x33, > 0x02, 0x0a, 0x4e, 0x30, 0xa5, 0xbb, 0x00, > > + 0x00, 0x00, 0x12, 0x7b, 0xf2, 0x30, 0x0d, 0x06, 0x09, > 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, > > + 0x02, 0x01, 0x05, 0x00, 0xa0, 0x7c, 0x30, 0x10, 0x06, > 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, > > + 0x37, 0x02, 0x01, 0x0c, 0x31, 0x02, 0x30, 0x00, 0x30, > 0x19, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, > > + 0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0c, 0x06, 0x0a, > 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, > > + 0x02, 0x01, 0x04, 0x30, 0x1c, 0x06, 0x0a, 0x2b, 0x06, > 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, > > + 0x0b, 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x0a, 0x2b, 0x06, > 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, > > + 0x15, 0x30, 0x2f, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, > 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x22, > > + 0x04, 0x20, 0x25, 0x60, 0x6e, 0xc8, 0x66, 0x72, 0x73, > 0xb0, 0x71, 0x7b, 0x82, 0x09, 0x8c, 0x27, > > + 0xe8, 0xb1, 0x4a, 0x36, 0x1c, 0x81, 0x36, 0xb4, 0x1b, > 0x44, 0xdf, 0x09, 0x82, 0x8b, 0xf9, 0xb6, > > + 0x1c, 0x65, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, > 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, > > + 0x00, 0x04, 0x82, 0x01, 0x00, 0x01, 0xb7, 0x8e, 0x46, > 0x9b, 0xb4, 0x18, 0xcd, 0xf6, 0x39, 0x8f, > > + 0x82, 0x79, 0xbc, 0x96, 0x55, 0x7e, 0xd7, 0x84, 0x8f, > 0x18, 0x37, 0x48, 0x4e, 0x8f, 0x25, 0x6f, > > + 0x1a, 0x6c, 0x60, 0xe9, 0xc1, 0x5f, 0x65, 0xec, 0xb0, > 0x4b, 0x35, 0x98, 0x8a, 0x31, 0x6b, 0xfd, > > + 0xa9, 0xd2, 0x28, 0xa7, 0x00, 0xd0, 0x5c, 0x97, 0x2e, > 0x3d, 0x19, 0x96, 0x75, 0xc2, 0x9a, 0xa7, > > + 0x4e, 0x2d, 0x3c, 0x6a, 0xd7, 0xd1, 0x81, 0x96, 0x2e, > 0x06, 0x54, 0x82, 0xe9, 0x87, 0xa2, 0x53, > > + 0x63, 0x6a, 0xda, 0x72, 0xa3, 0x41, 0x4f, 0x14, 0xc5, > 0x3d, 0x41, 0x7d, 0xbb, 0xd7, 0x29, 0x11, > > + 0x96, 0x14, 0x60, 0x5f, 0xb9, 0xd3, 0x47, 0xb6, 0x23, > 0x97, 0x64, 0xf6, 0xe1, 0xac, 0x6c, 0x4d, > > + 0xa9, 0x58, 0xc2, 0x35, 0xbf, 0x02, 0xee, 0x29, 0xd4, > 0x52, 0x80, 0x25, 0xa1, 0x7e, 0xbe, 0x21, > > + 0xcd, 0x04, 0x3c, 0x4d, 0x7d, 0xdb, 0x9b, 0x13, 0x71, > 0x35, 0x13, 0x8d, 0x16, 0x0a, 0x40, 0x7b, > > + 0x63, 0x45, 0x00, 0x11, 0xc5, 0x3e, 0xc8, 0x21, 0x37, > 0xc9, 0xbc, 0xd2, 0x0f, 0x82, 0x21, 0xf9, > > + 0x2f, 0xde, 0xb3, 0x1c, 0x9b, 0x67, 0xb6, 0x5a, 0xb8, > 0x74, 0xa0, 0x30, 0xd8, 0x86, 0x1f, 0xd9, > > + 0x08, 0x45, 0xf9, 0x6b, 0xe8, 0x57, 0xda, 0xb7, 0x14, > 0xf7, 0x63, 0x97, 0xfd, 0x87, 0x61, 0x1e, > > + 0x95, 0x6f, 0xba, 0x53, 0x40, 0x5e, 0x9f, 0x49, 0xf6, > 0xe7, 0x3c, 0x59, 0xd9, 0x78, 0x08, 0x4c, > > + 0xa6, 0x4a, 0xa2, 0x05, 0x42, 0xa7, 0x77, 0xbc, 0x44, > 0x7b, 0xed, 0xdb, 0x77, 0x63, 0x4c, 0x63, > > + 0x22, 0xb6, 0x17, 0x3f, 0x4f, 0x33, 0xed, 0xa6, 0xd9, > 0x0f, 0x74, 0xfa, 0x97, 0x8d, 0x98, 0x55, > > + 0x42, 0x14, 0x76, 0xd4, 0x89, 0x07, 0xf2, 0x30, 0x5a, > 0x27, 0x96, 0x1b, 0x92, 0x70, 0x5a, 0x83, > > + 0x89, 0x0f, 0xdb, 0x47, 0x7a, 0x00, 0x00, 0x00, 0x0a > > + }; > > + > > +// > > +// Sample root certificate for code signing. > > +// A trusted certificate with self-signing, will be > used to construct the certificate chains for > > +// authority checking. > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 TestRootCert1[] = { > > + 0x30, 0x82, 0x05, 0x99, 0x30, 0x82, 0x03, 0x81, 0xA0, > 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x79, > > + 0xAD, 0x16, 0xA1, 0x4A, 0xA0, 0xA5, 0xAD, 0x4C, 0x73, > 0x58, 0xF4, 0x07, 0x13, 0x2E, 0x65, 0x30, > > + 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, > 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x5F, > > + 0x31, 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09, 0x92, 0x26, > 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, > > + 0x16, 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30, 0x17, > 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, > > + 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6D, 0x69, > 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, > > + 0x31, 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55, 0x04, 0x03, > 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72, 0x6F, > > + 0x73, 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F, 0x74, > 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, > > + 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, > 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x30, > > + 0x1E, 0x17, 0x0D, 0x30, 0x31, 0x30, 0x35, 0x30, 0x39, > 0x32, 0x33, 0x31, 0x39, 0x32, 0x32, 0x5A, > > + 0x17, 0x0D, 0x32, 0x31, 0x30, 0x35, 0x30, 0x39, 0x32, > 0x33, 0x32, 0x38, 0x31, 0x33, 0x5A, 0x30, > > + 0x5F, 0x31, 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09, 0x92, > 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, > > + 0x19, 0x16, 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30, > 0x17, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, > > + 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6D, > 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, > > + 0x74, 0x31, 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55, 0x04, > 0x03, 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72, > > + 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F, > 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, > > + 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, > 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, > > + 0x30, 0x82, 0x02, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, > 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, > > + 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0F, 0x00, 0x30, > 0x82, 0x02, 0x0A, 0x02, 0x82, 0x02, 0x01, > > + 0x00, 0xF3, 0x5D, 0xFA, 0x80, 0x67, 0xD4, 0x5A, 0xA7, > 0xA9, 0x0C, 0x2C, 0x90, 0x20, 0xD0, 0x35, > > + 0x08, 0x3C, 0x75, 0x84, 0xCD, 0xB7, 0x07, 0x89, 0x9C, > 0x89, 0xDA, 0xDE, 0xCE, 0xC3, 0x60, 0xFA, > > + 0x91, 0x68, 0x5A, 0x9E, 0x94, 0x71, 0x29, 0x18, 0x76, > 0x7C, 0xC2, 0xE0, 0xC8, 0x25, 0x76, 0x94, > > + 0x0E, 0x58, 0xFA, 0x04, 0x34, 0x36, 0xE6, 0xDF, 0xAF, > 0xF7, 0x80, 0xBA, 0xE9, 0x58, 0x0B, 0x2B, > > + 0x93, 0xE5, 0x9D, 0x05, 0xE3, 0x77, 0x22, 0x91, 0xF7, > 0x34, 0x64, 0x3C, 0x22, 0x91, 0x1D, 0x5E, > > + 0xE1, 0x09, 0x90, 0xBC, 0x14, 0xFE, 0xFC, 0x75, 0x58, > 0x19, 0xE1, 0x79, 0xB7, 0x07, 0x92, 0xA3, > > + 0xAE, 0x88, 0x59, 0x08, 0xD8, 0x9F, 0x07, 0xCA, 0x03, > 0x58, 0xFC, 0x68, 0x29, 0x6D, 0x32, 0xD7, > > + 0xD2, 0xA8, 0xCB, 0x4B, 0xFC, 0xE1, 0x0B, 0x48, 0x32, > 0x4F, 0xE6, 0xEB, 0xB8, 0xAD, 0x4F, 0xE4, > > + 0x5C, 0x6F, 0x13, 0x94, 0x99, 0xDB, 0x95, 0xD5, 0x75, > 0xDB, 0xA8, 0x1A, 0xB7, 0x94, 0x91, 0xB4, > > + 0x77, 0x5B, 0xF5, 0x48, 0x0C, 0x8F, 0x6A, 0x79, 0x7D, > 0x14, 0x70, 0x04, 0x7D, 0x6D, 0xAF, 0x90, > > + 0xF5, 0xDA, 0x70, 0xD8, 0x47, 0xB7, 0xBF, 0x9B, 0x2F, > 0x6C, 0xE7, 0x05, 0xB7, 0xE1, 0x11, 0x60, > > + 0xAC, 0x79, 0x91, 0x14, 0x7C, 0xC5, 0xD6, 0xA6, 0xE4, > 0xE1, 0x7E, 0xD5, 0xC3, 0x7E, 0xE5, 0x92, > > + 0xD2, 0x3C, 0x00, 0xB5, 0x36, 0x82, 0xDE, 0x79, 0xE1, > 0x6D, 0xF3, 0xB5, 0x6E, 0xF8, 0x9F, 0x33, > > + 0xC9, 0xCB, 0x52, 0x7D, 0x73, 0x98, 0x36, 0xDB, 0x8B, > 0xA1, 0x6B, 0xA2, 0x95, 0x97, 0x9B, 0xA3, > > + 0xDE, 0xC2, 0x4D, 0x26, 0xFF, 0x06, 0x96, 0x67, 0x25, > 0x06, 0xC8, 0xE7, 0xAC, 0xE4, 0xEE, 0x12, > > + 0x33, 0x95, 0x31, 0x99, 0xC8, 0x35, 0x08, 0x4E, 0x34, > 0xCA, 0x79, 0x53, 0xD5, 0xB5, 0xBE, 0x63, > > + 0x32, 0x59, 0x40, 0x36, 0xC0, 0xA5, 0x4E, 0x04, 0x4D, > 0x3D, 0xDB, 0x5B, 0x07, 0x33, 0xE4, 0x58, > > + 0xBF, 0xEF, 0x3F, 0x53, 0x64, 0xD8, 0x42, 0x59, 0x35, > 0x57, 0xFD, 0x0F, 0x45, 0x7C, 0x24, 0x04, > > + 0x4D, 0x9E, 0xD6, 0x38, 0x74, 0x11, 0x97, 0x22, 0x90, > 0xCE, 0x68, 0x44, 0x74, 0x92, 0x6F, 0xD5, > > + 0x4B, 0x6F, 0xB0, 0x86, 0xE3, 0xC7, 0x36, 0x42, 0xA0, > 0xD0, 0xFC, 0xC1, 0xC0, 0x5A, 0xF9, 0xA3, > > + 0x61, 0xB9, 0x30, 0x47, 0x71, 0x96, 0x0A, 0x16, 0xB0, > 0x91, 0xC0, 0x42, 0x95, 0xEF, 0x10, 0x7F, > > + 0x28, 0x6A, 0xE3, 0x2A, 0x1F, 0xB1, 0xE4, 0xCD, 0x03, > 0x3F, 0x77, 0x71, 0x04, 0xC7, 0x20, 0xFC, > > + 0x49, 0x0F, 0x1D, 0x45, 0x88, 0xA4, 0xD7, 0xCB, 0x7E, > 0x88, 0xAD, 0x8E, 0x2D, 0xEC, 0x45, 0xDB, > > + 0xC4, 0x51, 0x04, 0xC9, 0x2A, 0xFC, 0xEC, 0x86, 0x9E, > 0x9A, 0x11, 0x97, 0x5B, 0xDE, 0xCE, 0x53, > > + 0x88, 0xE6, 0xE2, 0xB7, 0xFD, 0xAC, 0x95, 0xC2, 0x28, > 0x40, 0xDB, 0xEF, 0x04, 0x90, 0xDF, 0x81, > > + 0x33, 0x39, 0xD9, 0xB2, 0x45, 0xA5, 0x23, 0x87, 0x06, > 0xA5, 0x55, 0x89, 0x31, 0xBB, 0x06, 0x2D, > > + 0x60, 0x0E, 0x41, 0x18, 0x7D, 0x1F, 0x2E, 0xB5, 0x97, > 0xCB, 0x11, 0xEB, 0x15, 0xD5, 0x24, 0xA5, > > + 0x94, 0xEF, 0x15, 0x14, 0x89, 0xFD, 0x4B, 0x73, 0xFA, > 0x32, 0x5B, 0xFC, 0xD1, 0x33, 0x00, 0xF9, > > + 0x59, 0x62, 0x70, 0x07, 0x32, 0xEA, 0x2E, 0xAB, 0x40, > 0x2D, 0x7B, 0xCA, 0xDD, 0x21, 0x67, 0x1B, > > + 0x30, 0x99, 0x8F, 0x16, 0xAA, 0x23, 0xA8, 0x41, 0xD1, > 0xB0, 0x6E, 0x11, 0x9B, 0x36, 0xC4, 0xDE, > > + 0x40, 0x74, 0x9C, 0xE1, 0x58, 0x65, 0xC1, 0x60, 0x1E, > 0x7A, 0x5B, 0x38, 0xC8, 0x8F, 0xBB, 0x04, > > + 0x26, 0x7C, 0xD4, 0x16, 0x40, 0xE5, 0xB6, 0x6B, 0x6C, > 0xAA, 0x86, 0xFD, 0x00, 0xBF, 0xCE, 0xC1, > > + 0x35, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x51, 0x30, > 0x4F, 0x30, 0x0B, 0x06, 0x03, 0x55, 0x1D, > > + 0x0F, 0x04, 0x04, 0x03, 0x02, 0x01, 0xC6, 0x30, 0x0F, > 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, > > + 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, > 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, > > + 0x16, 0x04, 0x14, 0x0E, 0xAC, 0x82, 0x60, 0x40, 0x56, > 0x27, 0x97, 0xE5, 0x25, 0x13, 0xFC, 0x2A, > > + 0xE1, 0x0A, 0x53, 0x95, 0x59, 0xE4, 0xA4, 0x30, 0x10, > 0x06, 0x09, 0x2B, 0x06, 0x01, 0x04, 0x01, > > + 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, > 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, > > + 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, > 0x82, 0x02, 0x01, 0x00, 0xC5, 0x11, 0x4D, > > + 0x03, 0x3A, 0x60, 0xDD, 0x5D, 0x52, 0x11, 0x77, 0x8F, > 0xB2, 0xBB, 0x36, 0xC8, 0xB2, 0x05, 0xBF, > > + 0xB4, 0xB7, 0xA8, 0xD8, 0x20, 0x9D, 0x5C, 0x13, 0x03, > 0xB6, 0x1C, 0x22, 0xFA, 0x06, 0x13, 0x35, > > + 0xB6, 0xC8, 0x63, 0xD4, 0x9A, 0x47, 0x6F, 0x26, 0x57, > 0xD2, 0x55, 0xF1, 0x04, 0xB1, 0x26, 0x5F, > > + 0xD6, 0xA9, 0x50, 0x68, 0xA0, 0xBC, 0xD2, 0xB8, 0x6E, > 0xCC, 0xC3, 0xE9, 0xAC, 0xDF, 0x19, 0xCD, > > + 0x78, 0xAC, 0x59, 0x74, 0xAC, 0x66, 0x34, 0x36, 0xC4, > 0x1B, 0x3E, 0x6C, 0x38, 0x4C, 0x33, 0x0E, > > + 0x30, 0x12, 0x0D, 0xA3, 0x26, 0xFE, 0x51, 0x53, 0x00, > 0xFF, 0xAF, 0x5A, 0x4E, 0x84, 0x0D, 0x0F, > > + 0x1F, 0xE4, 0x6D, 0x05, 0x2E, 0x4E, 0x85, 0x4B, 0x8D, > 0x6C, 0x33, 0x6F, 0x54, 0xD2, 0x64, 0xAB, > > + 0xBF, 0x50, 0xAF, 0x7D, 0x7A, 0x39, 0xA0, 0x37, 0xED, > 0x63, 0x03, 0x0F, 0xFC, 0x13, 0x06, 0xCE, > > + 0x16, 0x36, 0xD4, 0x54, 0x3B, 0x95, 0x1B, 0x51, 0x62, > 0x3A, 0xE5, 0x4D, 0x17, 0xD4, 0x05, 0x39, > > + 0x92, 0x9A, 0x27, 0xA8, 0x5B, 0xAA, 0xBD, 0xEC, 0xBB, > 0xBE, 0xE3, 0x20, 0x89, 0x60, 0x71, 0x6C, > > + 0x56, 0xB3, 0xA5, 0x13, 0xD0, 0x6D, 0x0E, 0x23, 0x7E, > 0x95, 0x03, 0xED, 0x68, 0x3D, 0xF2, 0xD8, > > + 0x63, 0xB8, 0x6B, 0x4D, 0xB6, 0xE8, 0x30, 0xB5, 0xE1, > 0xCA, 0x94, 0x4B, 0xF7, 0xA2, 0xAA, 0x5D, > > + 0x99, 0x30, 0xB2, 0x3D, 0xA7, 0xC2, 0x51, 0x6C, 0x28, > 0x20, 0x01, 0x24, 0x27, 0x2B, 0x4B, 0x00, > > + 0xB7, 0x9D, 0x11, 0x6B, 0x70, 0xBE, 0xB2, 0x10, 0x82, > 0xBC, 0x0C, 0x9B, 0x68, 0xD0, 0x8D, 0x3B, > > + 0x24, 0x87, 0xAA, 0x99, 0x28, 0x72, 0x9D, 0x33, 0x5F, > 0x59, 0x90, 0xBD, 0xF5, 0xDE, 0x93, 0x9E, > > + 0x3A, 0x62, 0x5A, 0x34, 0x39, 0xE2, 0x88, 0x55, 0x1D, > 0xB9, 0x06, 0xB0, 0xC1, 0x89, 0x6B, 0x2D, > > + 0xD7, 0x69, 0xC3, 0x19, 0x12, 0x36, 0x84, 0xD0, 0xC9, > 0xA0, 0xDA, 0xFF, 0x2F, 0x69, 0x78, 0xB2, > > + 0xE5, 0x7A, 0xDA, 0xEB, 0xD7, 0x0C, 0xC0, 0xF7, 0xBD, > 0x63, 0x17, 0xB8, 0x39, 0x13, 0x38, 0xA2, > > + 0x36, 0x5B, 0x7B, 0xF2, 0x85, 0x56, 0x6A, 0x1D, 0x64, > 0x62, 0xC1, 0x38, 0xE2, 0xAA, 0xBF, 0x51, > > + 0x66, 0xA2, 0x94, 0xF5, 0x12, 0x9C, 0x66, 0x22, 0x10, > 0x6B, 0xF2, 0xB7, 0x30, 0x92, 0x2D, 0xF2, > > + 0x29, 0xF0, 0x3D, 0x3B, 0x14, 0x43, 0x68, 0xA2, 0xF1, > 0x9C, 0x29, 0x37, 0xCB, 0xCE, 0x38, 0x20, > > + 0x25, 0x6D, 0x7C, 0x67, 0xF3, 0x7E, 0x24, 0x12, 0x24, > 0x03, 0x08, 0x81, 0x47, 0xEC, 0xA5, 0x9E, > > + 0x97, 0xF5, 0x18, 0xD7, 0xCF, 0xBB, 0xD5, 0xEF, 0x76, > 0x96, 0xEF, 0xFD, 0xCE, 0xDB, 0x56, 0x9D, > > + 0x95, 0xA0, 0x42, 0xF9, 0x97, 0x58, 0xE1, 0xD7, 0x31, > 0x22, 0xD3, 0x5F, 0x59, 0xE6, 0x3E, 0x6E, > > + 0x22, 0x00, 0xEA, 0x43, 0x84, 0xB6, 0x25, 0xDB, 0xD9, > 0xF3, 0x08, 0x56, 0x68, 0xC0, 0x64, 0x6B, > > + 0x1D, 0x7C, 0xEC, 0xB6, 0x93, 0xA2, 0x62, 0x57, 0x6E, > 0x2E, 0xD8, 0xE7, 0x58, 0x8F, 0xC4, 0x31, > > + 0x49, 0x26, 0xDD, 0xDE, 0x29, 0x35, 0x87, 0xF5, 0x30, > 0x71, 0x70, 0x5B, 0x14, 0x3C, 0x69, 0xBD, > > + 0x89, 0x12, 0x7D, 0xEB, 0x2E, 0xA3, 0xFE, 0xD8, 0x7F, > 0x9E, 0x82, 0x5A, 0x52, 0x0A, 0x2B, 0xC1, > > + 0x43, 0x2B, 0xD9, 0x30, 0x88, 0x9F, 0xC8, 0x10, 0xFB, > 0x89, 0x8D, 0xE6, 0xA1, 0x85, 0x75, 0x33, > > + 0x7E, 0x6C, 0x9E, 0xDB, 0x73, 0x13, 0x64, 0x62, 0x69, > 0xA5, 0x2F, 0x7D, 0xCA, 0x96, 0x6D, 0x9F, > > + 0xF8, 0x04, 0x4D, 0x30, 0x92, 0x3D, 0x6E, 0x21, 0x14, > 0x21, 0xC9, 0x3D, 0xE0, 0xC3, 0xFD, 0x8A, > > + 0x6B, 0x9D, 0x4A, 0xFD, 0xD1, 0xA1, 0x9D, 0x99, 0x43, > 0x77, 0x3F, 0xB0, 0xDA > > +}; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 TestRootCert2[] = { > > + 0x30, 0x82, 0x05, 0xfd, 0x30, 0x82, 0x03, 0xe5, 0xa0, > 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x74, > > + 0x45, 0xc8, 0x78, 0x4e, 0x0c, 0xc9, 0x96, 0x4a, 0xb4, > 0x2f, 0xbc, 0xda, 0x29, 0xe1, 0xbc, 0x30, > > + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, > 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, > > + 0x90, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, > 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, > > + 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, > 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, > > + 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, > 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, > > + 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, > 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, > > + 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, > 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, > > + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x3a, 0x30, 0x38, > 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x31, > > + 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, > 0x20, 0x54, 0x65, 0x73, 0x74, 0x69, 0x6e, > > + 0x67, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, > 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, > > + 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, > 0x69, 0x74, 0x79, 0x20, 0x32, 0x30, 0x31, > > + 0x30, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x36, > 0x31, 0x37, 0x32, 0x30, 0x35, 0x38, 0x30, > > + 0x32, 0x5a, 0x17, 0x0d, 0x33, 0x35, 0x30, 0x36, 0x31, > 0x37, 0x32, 0x31, 0x30, 0x34, 0x31, 0x31, > > + 0x5a, 0x30, 0x81, 0x90, 0x31, 0x0b, 0x30, 0x09, 0x06, > 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, > > + 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, > 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, > > + 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, > 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, > > + 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, > 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, > > + 0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, > 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, > > + 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, > 0x3a, 0x30, 0x38, 0x06, 0x03, 0x55, 0x04, > > + 0x03, 0x13, 0x31, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, > 0x6f, 0x66, 0x74, 0x20, 0x54, 0x65, 0x73, > > + 0x74, 0x69, 0x6e, 0x67, 0x20, 0x52, 0x6f, 0x6f, 0x74, > 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, > > + 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, > 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, > > + 0x32, 0x30, 0x31, 0x30, 0x30, 0x82, 0x02, 0x22, 0x30, > 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, > > + 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, > 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, > > + 0x02, 0x82, 0x02, 0x01, 0x00, 0x95, 0xe3, 0xa8, 0xc1, > 0xb9, 0x9c, 0x26, 0x54, 0xb0, 0x99, 0xef, > > + 0x26, 0x1f, 0xac, 0x1e, 0xc7, 0x30, 0x80, 0xbb, 0xf5, > 0x3f, 0xf2, 0xe4, 0xbb, 0xf8, 0xfe, 0x06, > > + 0x6a, 0x0a, 0xa6, 0x88, 0xbc, 0xb4, 0x8c, 0x45, 0xe0, > 0x70, 0x55, 0x19, 0x88, 0xb4, 0x05, 0xcb, > > + 0xb5, 0xc1, 0xa1, 0xfa, 0xd4, 0x7c, 0xc2, 0x42, 0x53, > 0x07, 0x9c, 0x54, 0x56, 0xa8, 0x97, 0xe0, > > + 0x94, 0x69, 0xbe, 0x13, 0x24, 0xef, 0xe5, 0x8a, 0x29, > 0x9c, 0xa6, 0xd0, 0x2b, 0x2f, 0x8a, 0xa6, > > + 0xe8, 0x79, 0x44, 0x2e, 0x8b, 0xea, 0xc9, 0xbe, 0xb8, > 0x54, 0x86, 0x53, 0xbe, 0x07, 0x24, 0x34, > > + 0x54, 0x15, 0x22, 0x20, 0x01, 0x7b, 0x8a, 0x46, 0xfb, > 0xd2, 0x91, 0x07, 0x95, 0x09, 0xb0, 0x56, > > + 0x11, 0xcc, 0x76, 0xb2, 0xd0, 0x1f, 0x44, 0x79, 0x52, > 0x34, 0x28, 0xec, 0x4f, 0x49, 0xc2, 0xcb, > > + 0x61, 0xd3, 0x86, 0xdc, 0xe4, 0xa3, 0x7e, 0x55, 0x9e, > 0x9f, 0xee, 0x10, 0x6f, 0xcf, 0xe1, 0x3d, > > + 0xf8, 0xb7, 0x84, 0x79, 0xa2, 0x3b, 0x8d, 0x1c, 0xb0, > 0x81, 0x7c, 0xe4, 0x44, 0x07, 0xe4, 0xce, > > + 0x46, 0xb0, 0x98, 0x83, 0x8d, 0x87, 0x8f, 0xe5, 0xf5, > 0xae, 0x40, 0x7a, 0xf1, 0xed, 0x3d, 0x9b, > > + 0x9a, 0x7c, 0x4a, 0xd1, 0xb9, 0xc3, 0x94, 0x05, 0x7b, > 0xdc, 0xda, 0xb8, 0xce, 0xdc, 0x1e, 0x6c, > > + 0xcf, 0xd9, 0x9e, 0x37, 0xef, 0xc3, 0x5a, 0x36, 0x7b, > 0x90, 0x86, 0x45, 0xdc, 0xf6, 0x2e, 0xca, > > + 0xdd, 0xee, 0xde, 0x27, 0xd9, 0x74, 0x9a, 0x69, 0xf5, > 0xd9, 0x5d, 0x09, 0x2d, 0x45, 0x41, 0xcc, > > + 0xb7, 0xc2, 0x82, 0xd4, 0x2a, 0x8c, 0x16, 0x25, 0x92, > 0x97, 0x3d, 0x94, 0x4e, 0x89, 0x33, 0x7e, > > + 0x5b, 0x03, 0x54, 0xcd, 0xb0, 0x83, 0xa0, 0x8e, 0x41, > 0xb7, 0x87, 0x8d, 0xd9, 0x05, 0x63, 0x52, > > + 0xf6, 0xee, 0xe6, 0x4e, 0x13, 0x9d, 0x54, 0xcd, 0x49, > 0xfe, 0xe3, 0x8b, 0x3b, 0x50, 0x9b, 0x48, > > + 0xbb, 0xb2, 0xe5, 0x92, 0xd4, 0xab, 0xa0, 0xc5, 0x10, > 0xaf, 0x3e, 0xb1, 0x45, 0x21, 0x34, 0x90, > > + 0xdc, 0xad, 0xb9, 0xf7, 0xfe, 0x21, 0xae, 0xee, 0x50, > 0x58, 0x7a, 0x3a, 0xe5, 0xaa, 0xd8, 0xe3, > > + 0x82, 0xd6, 0xcf, 0x6d, 0x4d, 0xc9, 0x15, 0xac, 0x9c, > 0x31, 0x17, 0xa5, 0x16, 0xa7, 0x42, 0xf6, > > + 0xda, 0x12, 0x78, 0xa7, 0x66, 0x90, 0xec, 0xfc, 0xcd, > 0x01, 0x63, 0xff, 0xf0, 0x0e, 0xba, 0xe1, > > + 0xcd, 0xf0, 0xdb, 0x6b, 0x9a, 0x0f, 0xf6, 0x0f, 0x04, > 0x01, 0x09, 0xbc, 0x9f, 0xce, 0xb7, 0x6c, > > + 0x51, 0x70, 0x57, 0x08, 0x1b, 0xff, 0x79, 0x9a, 0x52, > 0x5d, 0xba, 0xac, 0x14, 0xe5, 0x3b, 0x67, > > + 0xcf, 0x2c, 0x52, 0xde, 0x27, 0x9a, 0x34, 0x03, 0x6e, > 0x25, 0x48, 0xb0, 0x19, 0x74, 0xfc, 0x4d, > > + 0x98, 0xc2, 0x4b, 0x8c, 0x92, 0xe1, 0x88, 0xae, 0x48, > 0x2a, 0xab, 0xab, 0xcd, 0x14, 0x4d, 0xb6, > > + 0x61, 0x0e, 0xa1, 0x09, 0x8f, 0x2c, 0xdb, 0x45, 0xaf, > 0x7d, 0x3b, 0x81, 0x56, 0x08, 0xc9, 0x3b, > > + 0x41, 0xb7, 0x64, 0x9f, 0x5d, 0x2e, 0x12, 0x7f, 0xb9, > 0x69, 0x29, 0x1f, 0x52, 0x45, 0x4a, 0x23, > > + 0xc6, 0xaf, 0xb6, 0xb2, 0x38, 0x72, 0x9d, 0x08, 0x33, > 0xff, 0xd0, 0xcf, 0x89, 0xb6, 0xea, 0x6e, > > + 0x85, 0x44, 0x94, 0x3e, 0x91, 0x59, 0xeb, 0xef, 0x9e, > 0xbd, 0x9b, 0x9c, 0x1a, 0x47, 0x03, 0x4e, > > + 0xa2, 0x17, 0x96, 0xfa, 0x62, 0x0b, 0xe8, 0x53, 0xb6, > 0x4e, 0xe3, 0xe8, 0x2a, 0x73, 0x59, 0xe2, > > + 0x13, 0xb8, 0xf8, 0x5a, 0x7e, 0xc6, 0xe2, 0x0a, 0xdd, > 0x4a, 0x43, 0xcc, 0xc3, 0x77, 0x3b, 0x7a, > > + 0x31, 0x04, 0x0a, 0xc1, 0x84, 0x96, 0x3a, 0x63, 0x6e, > 0x1a, 0x3e, 0x0a, 0x0c, 0x25, 0xb8, 0x7e, > > + 0xb5, 0x52, 0x0c, 0xb9, 0xab, 0x02, 0x03, 0x01, 0x00, > 0x01, 0xa3, 0x51, 0x30, 0x4f, 0x30, 0x0b, > > + 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, > 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, > > + 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, > 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, > > + 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xa3, 0x01, > 0x04, 0x7e, 0x30, 0x88, 0x33, 0xeb, 0xb9, > > + 0x31, 0x9c, 0xca, 0xeb, 0x85, 0x76, 0x67, 0xfc, 0x65, > 0xb4, 0xd1, 0x30, 0x10, 0x06, 0x09, 0x2b, > > + 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, > 0x03, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, > > + 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, > 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, > > + 0x00, 0x49, 0x8b, 0xc1, 0xfc, 0x4f, 0xe8, 0xe4, 0x2d, > 0x67, 0x92, 0x9a, 0x76, 0x05, 0xba, 0xd1, > > + 0xbc, 0x98, 0xe4, 0x2b, 0xba, 0x1f, 0x66, 0x5f, 0x66, > 0x23, 0xcf, 0x1c, 0x27, 0xeb, 0xb4, 0xaa, > > + 0xdd, 0xa0, 0x17, 0x20, 0x55, 0x72, 0x33, 0xb1, 0x76, > 0xde, 0xc9, 0x6d, 0x0d, 0x3c, 0x2d, 0x0a, > > + 0x08, 0x24, 0x2d, 0xec, 0x38, 0x96, 0x7a, 0x83, 0xf1, > 0x27, 0x50, 0x3c, 0x86, 0x09, 0xdd, 0x0d, > > + 0x41, 0xce, 0xaa, 0x5e, 0xf3, 0x8f, 0x7a, 0x3e, 0x3e, > 0xf1, 0xf0, 0xba, 0x8b, 0x72, 0xdd, 0x36, > > + 0xa1, 0x69, 0x05, 0x5b, 0x7c, 0xec, 0xe7, 0x70, 0x63, > 0x8d, 0x1d, 0x6e, 0xc0, 0xfd, 0x3a, 0x03, > > + 0xf1, 0x10, 0x3e, 0x90, 0xd7, 0x7b, 0x7a, 0xdc, 0xea, > 0x60, 0xec, 0x2f, 0x53, 0xfd, 0x19, 0x1d, > > + 0x3a, 0xa1, 0x74, 0x08, 0xc2, 0x7b, 0x3c, 0xe0, 0x50, > 0xac, 0x21, 0xd7, 0xb6, 0xdd, 0xdd, 0x3c, > > + 0x44, 0x1b, 0xf7, 0xf3, 0x44, 0x3e, 0x6c, 0x96, 0xe0, > 0xc0, 0x9f, 0xe6, 0xef, 0xdd, 0xdd, 0xb1, > > + 0xa6, 0x68, 0x61, 0x6c, 0x5e, 0x9e, 0xf9, 0xff, 0x9a, > 0x06, 0xa4, 0x6a, 0xcd, 0x9e, 0x75, 0x43, > > + 0x89, 0x9b, 0xcb, 0x85, 0xf6, 0xdc, 0x0c, 0x46, 0x4a, > 0x8c, 0x9b, 0xac, 0x11, 0xa6, 0x63, 0x45, > > + 0xfb, 0xfc, 0xde, 0x20, 0xee, 0xce, 0x67, 0x9f, 0x3d, > 0xd0, 0x93, 0xdb, 0x39, 0xfb, 0xea, 0x5e, > > + 0x4b, 0xfc, 0xd6, 0x20, 0xf1, 0x95, 0x36, 0x08, 0x8c, > 0xb2, 0xb3, 0xa1, 0x97, 0x1b, 0x41, 0x19, > > + 0xb0, 0xac, 0xfe, 0xe2, 0xd5, 0xab, 0x7d, 0xd9, 0x26, > 0xd4, 0xdc, 0xbd, 0x1f, 0x38, 0xc0, 0xe3, > > + 0x86, 0xdf, 0x24, 0xe7, 0xf5, 0x3e, 0x09, 0xca, 0x4d, > 0xa1, 0xba, 0x16, 0xc3, 0x4a, 0xb1, 0xfc, > > + 0x72, 0x98, 0xcf, 0x0e, 0x92, 0xfa, 0x57, 0x45, 0xe9, > 0x48, 0x4d, 0xc6, 0xa2, 0x7c, 0x3b, 0x72, > > + 0x63, 0xac, 0x4e, 0xf4, 0x74, 0xe9, 0x2b, 0x57, 0xac, > 0xab, 0x32, 0x88, 0x0b, 0xa9, 0x10, 0x67, > > + 0x53, 0x7e, 0xd2, 0x62, 0xd2, 0xfa, 0x68, 0xe8, 0x9d, > 0x5b, 0xae, 0xcd, 0xe0, 0xe5, 0xe2, 0x06, > > + 0x96, 0x0c, 0x34, 0x32, 0xf6, 0xbc, 0x25, 0xad, 0x98, > 0xf3, 0x32, 0x60, 0xbe, 0x14, 0xd3, 0x78, > > + 0xd1, 0x10, 0x6f, 0xff, 0x32, 0xe3, 0x9e, 0x3d, 0x88, > 0xda, 0xb3, 0x32, 0x0a, 0xcf, 0x20, 0x65, > > + 0x47, 0x78, 0xaa, 0xa5, 0x4b, 0x87, 0x6a, 0x83, 0xdc, > 0x1a, 0x5a, 0x2a, 0xdf, 0x70, 0x61, 0xaf, > > + 0x35, 0x32, 0xe0, 0x59, 0xa1, 0x9f, 0x0b, 0x14, 0x7a, > 0xaa, 0xab, 0x42, 0x0b, 0x6b, 0xff, 0xfb, > > + 0x34, 0xcb, 0x9d, 0x96, 0xd7, 0x26, 0x2a, 0x13, 0x3b, > 0xe3, 0xdf, 0x11, 0xe6, 0x86, 0x7d, 0x0d, > > + 0x09, 0x11, 0x93, 0x4b, 0xa4, 0xf6, 0xd2, 0x07, 0xc2, > 0xcd, 0xc8, 0xbe, 0xf5, 0x67, 0xf7, 0xae, > > + 0x05, 0xce, 0x16, 0xfe, 0x90, 0xc9, 0x4a, 0x98, 0x1b, > 0x24, 0x69, 0x78, 0x90, 0xf9, 0x34, 0x8e, > > + 0x37, 0xe8, 0x6e, 0x1d, 0xdc, 0xcf, 0x4f, 0xe7, 0xd2, > 0x64, 0x40, 0x1d, 0xc4, 0x30, 0xba, 0xd5, > > + 0x08, 0x88, 0x67, 0x4b, 0x0f, 0xb8, 0xe5, 0x59, 0xe9, > 0x18, 0xd8, 0x0c, 0x60, 0x68, 0xae, 0x7f, > > + 0xea, 0x91, 0x55, 0xbe, 0xeb, 0xf1, 0xa7, 0x8e, 0xd8, > 0x5d, 0x50, 0x3e, 0xbf, 0xd5, 0x69, 0x57, > > + 0x95, 0x8f, 0xa7, 0xff, 0xe4, 0x09, 0x3f, 0x08, 0x80, > 0x97, 0x32, 0x42, 0xb8, 0x82, 0x43, 0x82, > > + 0x6f, 0x8b, 0x0b, 0x93, 0xda, 0x19, 0xbf, 0x63, 0x4e, > 0x5f, 0x9f, 0xed, 0x2c, 0x22, 0xb6, 0x20, > > + 0x5f, 0x70, 0x44, 0xfa, 0x89, 0x59, 0x93, 0xb0, 0x7b, > 0x12, 0x0f, 0x5e, 0x62, 0x62, 0x51, 0x11, > > + 0xbd, 0xba, 0x5a, 0xd0, 0xce, 0xa1, 0xb6, 0xef, 0x80, > 0x20, 0xe6, 0x73, 0x4b, 0x11, 0x06, 0x56, > > + 0xe2, 0x0a > > + }; > > + > > +// > > +// OID ASN.1 Value for Hash Algorithms > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 HashOidValue[] = { > > + 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x02, 0x05, > // OBJ_md5 > > + 0x2B, 0x0E, 0x03, 0x02, 0x1A, > // OBJ_sha1 > > + 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x04, > // OBJ_sha224 > > + 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, > // OBJ_sha256 > > + 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02, > // OBJ_sha384 > > + 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, > // OBJ_sha512 > > + }; > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyAuthenticodeVerify ( > > + IN UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + BOOLEAN Status; > > + > > + // > > + // Sample Code: Demonstrate how to check the Hash > algorithm in PE/COFF Authenticode. > > + // According to PKCS#7 Definition: > > + // SignedData ::= SEQUENCE { > > + // version Version, > > + // digestAlgorithms > DigestAlgorithmIdentifiers, > > + // contentInfo ContentInfo, > > + // .... } > > + // The DigestAlgorithmIdentifiers can be used to > determine the hash algorithm in PE/COFF hashing > > + // This field has the fixed offset (+32) in final > Authenticode ASN.1 data. > > + // > > + if (CompareMem (AuthenticodeWithSha1 + 32, > &HashOidValue[8], 5) == 0) { > > + // > > + // Verify Authenticode signature. > > + // The PeHash value should be calculated following > MSFT's Authenticode Specification. > > + // > > + Status = AuthenticodeVerify ( > > + AuthenticodeWithSha1, > > + sizeof (AuthenticodeWithSha1), > > + TestRootCert1, > > + sizeof (TestRootCert1), > > + PeSha1Hash, > > + SHA1_DIGEST_SIZE > > + ); > > + UT_ASSERT_TRUE (Status); > > + } > > + > > + if (CompareMem (AuthenticodeWithSha256 + 32, > &HashOidValue[22], 9) == 0) { > > + Status = AuthenticodeVerify ( > > + AuthenticodeWithSha256, > > + sizeof (AuthenticodeWithSha256), > > + TestRootCert2, > > + sizeof (TestRootCert2), > > + PeSha256Hash, > > + SHA256_DIGEST_SIZE > > + ); > > + UT_ASSERT_TRUE (Status); > > + } > > + > > + return UNIT_TEST_PASSED; > > +} > > + > > +TEST_DESC mAuthenticodeTest[] = { > > + // > > + // -----Description-------------------------------- > ------Class----------------------Function--------------- > --Pre---Post--Context > > + // > > + {"TestVerifyAuthenticodeVerify()", > "CryptoPkg.BaseCryptLib.Authenticode", > TestVerifyAuthenticodeVerify, NULL, NULL, NULL}, > > +}; > > + > > +UINTN mAuthenticodeTestNum = > ARRAY_SIZE(mAuthenticodeTest); > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCrypt > LibUnitTests.c > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCrypt > LibUnitTests.c > new file mode 100644 > index 000000000000..b7fcea3ff7e4 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCrypt > LibUnitTests.c > @@ -0,0 +1,66 @@ > +/** @file > > + This is defines the tests that will run on > BaseCryptLib > > + > > + Copyright (c) Microsoft Corporation.<BR> > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > +#include "TestBaseCryptLib.h" > > + > > +SUITE_DESC mSuiteDesc[] = { > > + // > > + // Title--------------------------Package---------- > ---------Sup--Tdn----TestNum------------TestDesc > > + // > > + {"EKU verify tests", > "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs7EkuTestNum, > mPkcs7EkuTest}, > > + {"HASH verify tests", > "CryptoPkg.BaseCryptLib", NULL, NULL, &mHashTestNum, > mHashTest}, > > + {"HMAC verify tests", > "CryptoPkg.BaseCryptLib", NULL, NULL, &mHmacTestNum, > mHmacTest}, > > + {"BlockCipher verify tests", > "CryptoPkg.BaseCryptLib", NULL, NULL, > &mBlockCipherTestNum, mBlockCipherTest}, > > + {"RSA verify tests", > "CryptoPkg.BaseCryptLib", NULL, NULL, &mRsaTestNum, > mRsaTest}, > > + {"RSACert verify tests", > "CryptoPkg.BaseCryptLib", NULL, NULL, &mRsaCertTestNum, > mRsaCertTest}, > > + {"PKCS7 verify tests", > "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs7TestNum, > mPkcs7Test}, > > + {"PKCS5 verify tests", > "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs5TestNum, > mPkcs5Test}, > > + {"Authenticode verify tests", > "CryptoPkg.BaseCryptLib", NULL, NULL, > &mAuthenticodeTestNum, mAuthenticodeTest}, > > + {"ImageTimestamp verify tests", > "CryptoPkg.BaseCryptLib", NULL, NULL, > &mImageTimestampTestNum, mImageTimestampTest}, > > + {"DH verify tests", > "CryptoPkg.BaseCryptLib", NULL, NULL, &mDhTestNum, > mDhTest}, > > + {"PRNG verify tests", > "CryptoPkg.BaseCryptLib", NULL, NULL, &mPrngTestNum, > mPrngTest}, > > + {"OAEP encrypt verify tests", > "CryptoPkg.BaseCryptLib", NULL, NULL, &mOaepTestNum, > mOaepTest}, > > +}; > > + > > +EFI_STATUS > > +EFIAPI > > +CreateUnitTest ( > > + IN CHAR8* UnitTestName, > > + IN CHAR8* UnitTestVersion, > > + IN OUT UNIT_TEST_FRAMEWORK_HANDLE* Framework > > +) { > > + EFI_STATUS Status; > > + UINTN SuiteIndex; > > + UINTN TestIndex; > > + > > + if ( Framework == NULL || UnitTestVersion == NULL > || UnitTestName == NULL) { > > + return EFI_INVALID_PARAMETER; > > + } > > + Status = EFI_SUCCESS; > > + // > > + // Start setting up the test framework for running > the tests. > > + // > > + Status = InitUnitTestFramework (Framework, > UnitTestName, gEfiCallerBaseName, UnitTestVersion); > > + if (EFI_ERROR (Status)) { > > + DEBUG((DEBUG_ERROR, "Failed in > InitUnitTestFramework. Status = %r\n", Status)); > > + goto EXIT; > > + } > > + > > + for (SuiteIndex = 0; SuiteIndex < > ARRAY_SIZE(mSuiteDesc); SuiteIndex++) { > > + UNIT_TEST_SUITE_HANDLE Suite = NULL; > > + Status = CreateUnitTestSuite (&Suite, > *Framework, mSuiteDesc[SuiteIndex].Title, > mSuiteDesc[SuiteIndex].Package, > mSuiteDesc[SuiteIndex].Sup, mSuiteDesc[SuiteIndex].Tdn); > > + if (EFI_ERROR (Status)) { > > + Status = EFI_OUT_OF_RESOURCES; > > + goto EXIT; > > + } > > + for (TestIndex = 0; TestIndex < > *mSuiteDesc[SuiteIndex].TestNum; TestIndex++) { > > + AddTestCase (Suite, > (mSuiteDesc[SuiteIndex].TestDesc + TestIndex)- > >Description, (mSuiteDesc[SuiteIndex].TestDesc + > TestIndex)->ClassName, (mSuiteDesc[SuiteIndex].TestDesc > + TestIndex)->Func, (mSuiteDesc[SuiteIndex].TestDesc + > TestIndex)->PreReq, (mSuiteDesc[SuiteIndex].TestDesc + > TestIndex)->CleanUp, (mSuiteDesc[SuiteIndex].TestDesc + > TestIndex)->Context); > > + } > > + } > > + EXIT: > > + return Status; > > +} > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCiph > erTests.c > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCiph > erTests.c > new file mode 100644 > index 000000000000..b3493073965f > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCiph > erTests.c > @@ -0,0 +1,293 @@ > +/** @file > > + Application for Block Cipher Primitives Validation. > > + > > +Copyright (c) 2010, Intel Corporation. All rights > reserved.<BR> > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include "TestBaseCryptLib.h" > > + > > +// > > +// TDES test vectors are extracted from OpenSSL 0.9.8l, > crypto\des\destest.c > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesEcbData[] > = { > > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesEcbKey[] > = { > > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > > + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > TdesEcbCipher[] = { > > + 0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7, > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > TdesEcb2Cipher[] = { > > + 0x92, 0x95, 0xB5, 0x9B, 0xB3, 0x84, 0x73, 0x6E, > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesCbcData[] > = { > > + 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20, > > + 0x4E, 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74, > > + 0x68, 0x65, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x20 > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesCbcKey[] > = { > > + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, > > + 0xf1, 0xe0, 0xd3, 0xc2, 0xb5, 0xa4, 0x97, 0x86, > > + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 TdesCbcIvec[] = { > > + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > TdesCbc3Cipher[] = { > > + 0x3F, 0xE3, 0x01, 0xC9, 0x62, 0xAC, 0x01, 0xD0, > > + 0x22, 0x13, 0x76, 0x3C, 0x1C, 0xBD, 0x4C, 0xDC, > > + 0x79, 0x96, 0x57, 0xC0, 0x64, 0xEC, 0xF5, 0xD4 > > + }; > > + > > +// > > +// AES test vectors are from NIST KAT of AES > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Aes128EcbData[] = { > > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Aes128EcbKey[] = { > > + 0x10, 0xa5, 0x88, 0x69, 0xd7, 0x4b, 0xe5, 0xa3, 0x74, > 0xcf, 0x86, 0x7c, 0xfb, 0x47, 0x38, 0x59 > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Aes128EcbCipher[] = { > > + 0x6d, 0x25, 0x1e, 0x69, 0x44, 0xb0, 0x51, 0xe0, 0x4e, > 0xaa, 0x6f, 0xb4, 0xdb, 0xf7, 0x84, 0x65 > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Aes192EcbData[] = { > > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Aes192EcbKey[] = { > > + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, > 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, > > + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Aes192EcbCipher[] = { > > + 0xdd, 0x8a, 0x49, 0x35, 0x14, 0x23, 0x1c, 0xbf, 0x56, > 0xec, 0xce, 0xe4, 0xc4, 0x08, 0x89, 0xfb > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Aes256EcbData[] = { > > + 0x01, 0x47, 0x30, 0xf8, 0x0a, 0xc6, 0x25, 0xfe, 0x84, > 0xf0, 0x26, 0xc6, 0x0b, 0xfd, 0x54, 0x7d > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Aes256EcbKey[] = { > > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Aes256EcbCipher[] = { > > + 0x5c, 0x9d, 0x84, 0x4e, 0xd4, 0x6f, 0x98, 0x85, 0x08, > 0x5e, 0x5d, 0x6a, 0x4f, 0x94, 0xc7, 0xd7 > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Aes128CbcData[] = { > > + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, > 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, > > + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, > 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Aes128CbcKey[] = { > > + 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0, 0x61, > 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Aes128CbcIvec[] = { > > + 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 0xdd, > 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58 > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Aes128CbcCipher[] = { > > + 0xd2, 0x96, 0xcd, 0x94, 0xc2, 0xcc, 0xcf, 0x8a, 0x3a, > 0x86, 0x30, 0x28, 0xb5, 0xe1, 0xdc, 0x0a, > > + 0x75, 0x86, 0x60, 0x2d, 0x25, 0x3c, 0xff, 0xf9, 0x1b, > 0x82, 0x66, 0xbe, 0xa6, 0xd6, 0x1a, 0xb1 > > + }; > > + > > +// > > +// ARC4 Test Vector defined in "Appendix A.1 Test > Vectors from [CRYPTLIB]" of > > +// IETF Draft draft-kaukonen-cipher-arcfour-03 ("A > Stream Cipher Encryption Algorithm 'Arcfour'"). > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Arc4Data[] = > { > > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Arc4Key[] = { > > + 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Arc4Cipher[] > = { > > + 0x74, 0x94, 0xC2, 0xE7, 0x10, 0x4B, 0x08, 0x79 > > + }; > > + > > + > > +typedef > > +UINTN > > +(EFIAPI *EFI_BLOCK_CIPHER_GET_CONTEXT_SIZE) ( > > + VOID > > + ); > > + > > +typedef > > +BOOLEAN > > +(EFIAPI *EFI_BLOCK_CIPHER_INIT) ( > > + OUT VOID *BlockCipherContext, > > + IN CONST UINT8 *Key, > > + IN UINTN KeyLength > > + ); > > + > > +typedef > > +BOOLEAN > > +(EFIAPI *EFI_BLOCK_CIPHER_ECB_ENCRYPT_DECRYPT) ( > > + IN VOID *BlockCipherContext, > > + IN CONST UINT8 *Input, > > + IN UINTN InputSize, > > + OUT UINT8 *Output > > + ); > > + > > +typedef > > +BOOLEAN > > +(EFIAPI *EFI_BLOCK_CIPHER_CBC_ENCRYPT_DECRYPT) ( > > + IN VOID *BlockCipherContext, > > + IN CONST UINT8 *Input, > > + IN UINTN InputSize, > > + IN CONST UINT8 *Ivec, > > + OUT UINT8 *Output > > + ); > > + > > +typedef > > +BOOLEAN > > +(EFIAPI *EFI_BLOCK_CIPHER_RESET) ( > > + IN OUT VOID *BlockCipherContext > > + ); > > + > > +typedef struct { > > + EFI_BLOCK_CIPHER_GET_CONTEXT_SIZE > GetContextSize; > > + EFI_BLOCK_CIPHER_INIT Init; > > + EFI_BLOCK_CIPHER_ECB_ENCRYPT_DECRYPT EcbEncrypt; > > + EFI_BLOCK_CIPHER_ECB_ENCRYPT_DECRYPT EcbDecrypt; > > + EFI_BLOCK_CIPHER_CBC_ENCRYPT_DECRYPT CbcEncrypt; > > + EFI_BLOCK_CIPHER_CBC_ENCRYPT_DECRYPT CbcDecrypt; > > + EFI_BLOCK_CIPHER_RESET Reset; > > + CONST UINT8 *Key; > > + UINTN KeySize; > > + CONST UINT8 *Ivec; > > + CONST UINT8 *Data; > > + UINTN DataSize; > > + CONST UINT8 *Cipher; > > + UINTN CipherSize; > > + VOID *Ctx; > > +} BLOCK_CIPHER_TEST_CONTEXT; > > + > > +// These are commented out as they are deprecated, but > are left in should they be used again > > +//BLOCK_CIPHER_TEST_CONTEXT mTdesEcbTestCtx = > {TdesGetContextSize, TdesInit, TdesEcbEncrypt, > TdesEcbDecrypt, NULL, NULL, NULL, > TdesEcbKey, 64, NULL, > TdesEcbData, 8, TdesEcbCipher, > 8}; > > +//BLOCK_CIPHER_TEST_CONTEXT mTdesCbcTestCtx = > {TdesGetContextSize, TdesInit, NULL, NULL, > TdesCbcEncrypt, TdesCbcDecrypt, NULL, TdesCbcKey, > 192, TdesCbcIvec, TdesCbcData, > sizeof(TdesCbcData), TdesCbc3Cipher, > sizeof(TdesCbc3Cipher)}; > > +//BLOCK_CIPHER_TEST_CONTEXT mAes128EcbTestCtx = > {AesGetContextSize, AesInit, AesEcbEncrypt, > AesEcbDecrypt, NULL, NULL, NULL, > Aes128EcbKey, 128, NULL, > Aes128EcbData, sizeof(Aes128EcbData), Aes128EcbCipher, > sizeof(Aes128EcbCipher)}; > > +//BLOCK_CIPHER_TEST_CONTEXT mAes192EcbTestCtx = > {AesGetContextSize, AesInit, AesEcbEncrypt, > AesEcbDecrypt, NULL, NULL, NULL, > Aes192EcbKey, 192, NULL, > Aes192EcbData, sizeof(Aes192EcbData), Aes192EcbCipher, > sizeof(Aes192EcbCipher)}; > > +//BLOCK_CIPHER_TEST_CONTEXT mAes256EcbTestCtx = > {AesGetContextSize, AesInit, AesEcbEncrypt, > AesEcbDecrypt, NULL, NULL, NULL, > Aes256EcbKey, 256, NULL, > Aes256EcbData, sizeof(Aes256EcbData), Aes256EcbCipher, > sizeof(Aes256EcbCipher)}; > > +//BLOCK_CIPHER_TEST_CONTEXT mArc4TestCtx = > {Arc4GetContextSize, Arc4Init, Arc4Encrypt, > (EFI_BLOCK_CIPHER_ECB_ENCRYPT_DECRYPT), Arc4Decrypt, > NULL, NULL, Arc4Reset, Arc4Key, > sizeof(Arc4Key), NULL, Arc4Data, > sizeof(Arc4Data), Arc4Cipher, > sizeof(Arc4Cipher)}; > > +BLOCK_CIPHER_TEST_CONTEXT mAes128CbcTestCtx = > {AesGetContextSize, AesInit, NULL, NULL, > AesCbcEncrypt, AesCbcDecrypt, NULL, Aes128CbcKey, > 128, Aes128CbcIvec, Aes128CbcData, > sizeof(Aes128CbcData), Aes128CbcCipher, > sizeof(Aes128CbcCipher)}; > > + > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyBLockCiperPreReq ( > > + UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + BLOCK_CIPHER_TEST_CONTEXT *TestContext; > > + UINTN CtxSize; > > + > > + TestContext = Context; > > + CtxSize = TestContext->GetContextSize (); > > + TestContext->Ctx = AllocatePool (CtxSize); > > + if (TestContext->Ctx == NULL) { > > + return UNIT_TEST_ERROR_TEST_FAILED; > > + } > > + > > + return UNIT_TEST_PASSED; > > +} > > + > > +VOID > > +EFIAPI > > +TestVerifyBLockCiperCleanUp ( > > + UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + BLOCK_CIPHER_TEST_CONTEXT *TestContext; > > + > > + TestContext = Context; > > + if (TestContext->Ctx != NULL) { > > + FreePool (TestContext->Ctx); > > + } > > +} > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyBLockCiper ( > > + UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + UINT8 Encrypt[256]; > > + UINT8 Decrypt[256]; > > + BOOLEAN Status; > > + BLOCK_CIPHER_TEST_CONTEXT *TestContext; > > + > > + TestContext = Context; > > + > > + ZeroMem (Encrypt, sizeof (Encrypt)); > > + ZeroMem (Decrypt, sizeof (Decrypt)); > > + > > + Status = TestContext->Init (TestContext->Ctx, > TestContext->Key, TestContext->KeySize); > > + UT_ASSERT_TRUE (Status); > > + > > + if (TestContext->Ivec == NULL) { > > + Status = TestContext->EcbEncrypt (TestContext->Ctx, > TestContext->Data, TestContext->DataSize, Encrypt); > > + UT_ASSERT_TRUE (Status); > > + > > + if (TestContext->Reset != NULL) { > > + Status = TestContext->Reset (TestContext->Ctx); > > + UT_ASSERT_TRUE (Status); > > + } > > + > > + Status = TestContext->EcbDecrypt (TestContext->Ctx, > Encrypt, TestContext->DataSize, Decrypt); > > + UT_ASSERT_TRUE (Status); > > + > > + } else { > > + Status = TestContext->CbcEncrypt (TestContext->Ctx, > TestContext->Data, TestContext->DataSize, TestContext- > >Ivec, Encrypt); > > + UT_ASSERT_TRUE (Status); > > + > > + if (TestContext->Reset != NULL) { > > + Status = TestContext->Reset (TestContext->Ctx); > > + UT_ASSERT_TRUE (Status); > > + } > > + > > + Status = TestContext->CbcDecrypt (TestContext->Ctx, > Encrypt, TestContext->DataSize, TestContext->Ivec, > Decrypt); > > + UT_ASSERT_TRUE (Status); > > + } > > + > > + UT_ASSERT_MEM_EQUAL (Encrypt, TestContext->Cipher, > TestContext->CipherSize); > > + UT_ASSERT_MEM_EQUAL (Decrypt, TestContext->Data, > TestContext->DataSize); > > + > > + return UNIT_TEST_PASSED; > > +} > > + > > +TEST_DESC mBlockCipherTest[] = { > > + // > > + // -----Description-------------------------Class-- > -----------------------Function---------------Pre------- > --------------------Post------------------Context > > + // > > + {"TestVerifyAes128Cbc()", > "CryptoPkg.BaseCryptLib.BlockCipher", > TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, > TestVerifyBLockCiperCleanUp, &mAes128CbcTestCtx}, > > + // These are commented out as these functions have > been deprecated, but they have been left in for future > reference > > + //{"TestVerifyTdesEcb()", > "CryptoPkg.BaseCryptLib.BlockCipher", > TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, > TestVerifyBLockCiperCleanUp, &mTdesEcbTestCtx}, > > + //{"TestVerifyTdesCbc()", > "CryptoPkg.BaseCryptLib.BlockCipher", > TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, > TestVerifyBLockCiperCleanUp, &mTdesCbcTestCtx}, > > + //{"TestVerifyAes128Ecb()", > "CryptoPkg.BaseCryptLib.BlockCipher", > TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, > TestVerifyBLockCiperCleanUp, &mAes128EcbTestCtx}, > > + //{"TestVerifyAes192Ecb()", > "CryptoPkg.BaseCryptLib.BlockCipher", > TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, > TestVerifyBLockCiperCleanUp, &mAes192EcbTestCtx}, > > + //{"TestVerifyAes256Ecb()", > "CryptoPkg.BaseCryptLib.BlockCipher", > TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, > TestVerifyBLockCiperCleanUp, &mAes256EcbTestCtx}, > > + //{"TestVerifyArc4()", > "CryptoPkg.BaseCryptLib.BlockCipher", > TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, > TestVerifyBLockCiperCleanUp, &mArc4TestCtx}, > > +}; > > + > > +UINTN mBlockCipherTestNum = > ARRAY_SIZE(mBlockCipherTest); > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c > new file mode 100644 > index 000000000000..422b990f2c2d > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c > @@ -0,0 +1,106 @@ > +/** @file > > + Application for Diffie-Hellman Primitives Validation. > > + > > +Copyright (c) 2010 - 2014, Intel Corporation. All > rights reserved.<BR> > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include "TestBaseCryptLib.h" > > + > > +VOID *mDh1; > > +VOID *mDh2; > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyDhPreReq ( > > + UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + mDh1 = DhNew (); > > + if (mDh1 == NULL) { > > + return UNIT_TEST_ERROR_TEST_FAILED; > > + } > > + > > + mDh2 = DhNew (); > > + if (mDh2 == NULL) { > > + return UNIT_TEST_ERROR_TEST_FAILED; > > + } > > + > > + return UNIT_TEST_PASSED; > > +} > > + > > +VOID > > +EFIAPI > > +TestVerifyDhCleanUp ( > > + UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + if (mDh1 != NULL) { > > + DhFree (mDh1); > > + mDh1 = NULL; > > + } > > + if (mDh2 != NULL) { > > + DhFree (mDh2); > > + mDh2 = NULL; > > + } > > +} > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyDhGenerateKey ( > > + UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + UINT8 Prime[64]; > > + UINT8 PublicKey1[64]; > > + UINTN PublicKey1Length; > > + UINT8 PublicKey2[64]; > > + UINTN PublicKey2Length; > > + UINT8 Key1[64]; > > + UINTN Key1Length; > > + UINT8 Key2[64]; > > + UINTN Key2Length; > > + BOOLEAN Status; > > + > > + // > > + // Initialize Key Length > > + // > > + PublicKey1Length = sizeof (PublicKey1); > > + PublicKey2Length = sizeof (PublicKey2); > > + Key1Length = sizeof (Key1); > > + Key2Length = sizeof (Key2); > > + > > + Status = DhGenerateParameter (mDh1, 2, 64, Prime); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = DhSetParameter (mDh2, 2, 64, Prime); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = DhGenerateKey (mDh1, PublicKey1, > &PublicKey1Length); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = DhGenerateKey (mDh2, PublicKey2, > &PublicKey2Length); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = DhComputeKey (mDh1, PublicKey2, > PublicKey2Length, Key1, &Key1Length); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = DhComputeKey (mDh2, PublicKey1, > PublicKey1Length, Key2, &Key2Length); > > + UT_ASSERT_TRUE (Status); > > + > > + UT_ASSERT_EQUAL (Key1Length, Key2Length); > > + > > + UT_ASSERT_MEM_EQUAL (Key1, Key2, Key1Length); > > + > > + return UNIT_TEST_PASSED; > > +} > > + > > +TEST_DESC mDhTest[] = { > > + // > > + // -----Description-------------------------------- > Class---------------------Function----------------Pre--- > --------------Post------------Context > > + // > > + {"TestVerifyDhGenerateKey()", > "CryptoPkg.BaseCryptLib.Dh", TestVerifyDhGenerateKey, > TestVerifyDhPreReq, TestVerifyDhCleanUp, NULL}, > > +}; > > + > > +UINTN mDhTestNum = ARRAY_SIZE(mDhTest); > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests > .c > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests > .c > new file mode 100644 > index 000000000000..bc47c5736246 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests > .c > @@ -0,0 +1,197 @@ > +/** @file > > + Application for Hash Primitives Validation. > > + > > +Copyright (c) 2010 - 2016, Intel Corporation. All > rights reserved.<BR> > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include "TestBaseCryptLib.h" > > + > > +// > > +// Max Known Digest Size is SHA512 Output (64 bytes) by > far > > +// > > +#define MAX_DIGEST_SIZE 64 > > + > > +// > > +// Message string for digest validation > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *HashData = > "abc"; > > + > > +// > > +// Result for MD5("abc"). (From "A.5 Test suite" of > IETF RFC1321) > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Md5Digest[MD5_DIGEST_SIZE] = { > > + 0x90, 0x01, 0x50, 0x98, 0x3c, 0xd2, 0x4f, 0xb0, 0xd6, > 0x96, 0x3f, 0x7d, 0x28, 0xe1, 0x7f, 0x72 > > + > > + }; > > + > > +// > > +// Result for SHA-1("abc"). (From "A.1 SHA-1 Example" > of NIST FIPS 180-2) > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Sha1Digest[SHA1_DIGEST_SIZE] = { > > + 0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a, 0xba, > 0x3e, 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c, > > + 0x9c, 0xd0, 0xd8, 0x9d > > + }; > > + > > +// > > +// Result for SHA-256("abc"). (From "B.1 SHA-256 > Example" of NIST FIPS 180-2) > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Sha256Digest[SHA256_DIGEST_SIZE] = { > > + 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, > 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, > > + 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, > 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad > > + }; > > + > > +// > > +// Result for SHA-384("abc"). (From "D.1 SHA-384 > Example" of NIST FIPS 180-2) > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Sha384Digest[SHA384_DIGEST_SIZE] = { > > + 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b, 0xb5, > 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07, > > + 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63, 0x1a, > 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed, > > + 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23, 0x58, > 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7 > > + }; > > + > > +// > > +// Result for SHA-512("abc"). (From "C.1 SHA-512 > Example" of NIST FIPS 180-2) > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > Sha512Digest[SHA512_DIGEST_SIZE] = { > > + 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, 0xcc, > 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31, > > + 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2, 0x0a, > 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a, > > + 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8, 0x36, > 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd, > > + 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e, 0x2a, > 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f > > + }; > > + > > +typedef > > +UINTN > > +(EFIAPI *EFI_HASH_GET_CONTEXT_SIZE) ( > > + VOID > > + ); > > + > > +typedef > > +BOOLEAN > > +(EFIAPI *EFI_HASH_INIT) ( > > + OUT VOID *HashContext > > + ); > > + > > +typedef > > +BOOLEAN > > +(EFIAPI *EFI_HASH_UPDATE) ( > > + IN OUT VOID *HashContext, > > + IN CONST VOID *Data, > > + IN UINTN DataSize > > + ); > > + > > +typedef > > +BOOLEAN > > +(EFIAPI *EFI_HASH_FINAL) ( > > + IN OUT VOID *HashContext, > > + OUT UINT8 *HashValue > > + ); > > + > > +typedef > > +BOOLEAN > > +(EFIAPI *EFI_HASH_ALL) ( > > + IN CONST VOID *Data, > > + IN UINTN DataSize, > > + OUT UINT8 *HashValue > > + ); > > + > > +typedef struct { > > + UINT32 DigestSize; > > + EFI_HASH_GET_CONTEXT_SIZE GetContextSize; > > + EFI_HASH_INIT HashInit; > > + EFI_HASH_UPDATE HashUpdate; > > + EFI_HASH_FINAL HashFinal; > > + EFI_HASH_ALL HashAll; > > + CONST UINT8 *Digest; > > + VOID *HashCtx; > > +} HASH_TEST_CONTEXT; > > + > > +HASH_TEST_CONTEXT mMd5TestCtx = > {MD5_DIGEST_SIZE, Md5GetContextSize, Md5Init, > Md5Update, Md5Final, Md5HashAll, Md5Digest}; > > +HASH_TEST_CONTEXT mSha1TestCtx = > {SHA1_DIGEST_SIZE, Sha1GetContextSize, Sha1Init, > Sha1Update, Sha1Final, Sha1HashAll, Sha1Digest}; > > +HASH_TEST_CONTEXT mSha256TestCtx = > {SHA256_DIGEST_SIZE, Sha256GetContextSize, Sha256Init, > Sha256Update, Sha256Final, Sha256HashAll, Sha256Digest}; > > +HASH_TEST_CONTEXT mSha384TestCtx = > {SHA384_DIGEST_SIZE, Sha384GetContextSize, Sha384Init, > Sha384Update, Sha384Final, Sha384HashAll, Sha384Digest}; > > +HASH_TEST_CONTEXT mSha512TestCtx = > {SHA512_DIGEST_SIZE, Sha512GetContextSize, Sha512Init, > Sha512Update, Sha512Final, Sha512HashAll, Sha512Digest}; > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyHashPreReq ( > > + UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + HASH_TEST_CONTEXT *HashTestContext; > > + UINTN CtxSize; > > + > > + HashTestContext = Context; > > + CtxSize = HashTestContext->GetContextSize (); > > + HashTestContext->HashCtx = AllocatePool (CtxSize); > > + if (HashTestContext->HashCtx == NULL) { > > + return UNIT_TEST_ERROR_TEST_FAILED; > > + } > > + > > + return UNIT_TEST_PASSED; > > +} > > + > > +VOID > > +EFIAPI > > +TestVerifyHashCleanUp ( > > + UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + HASH_TEST_CONTEXT *HashTestContext; > > + > > + HashTestContext = Context; > > + if (HashTestContext->HashCtx != NULL) { > > + FreePool (HashTestContext->HashCtx); > > + } > > +} > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyHash ( > > + IN UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + UINTN DataSize; > > + UINT8 Digest[MAX_DIGEST_SIZE]; > > + BOOLEAN Status; > > + HASH_TEST_CONTEXT *HashTestContext; > > + > > + HashTestContext = Context; > > + > > + DataSize = AsciiStrLen (HashData); > > + > > + ZeroMem (Digest, MAX_DIGEST_SIZE); > > + > > + Status = HashTestContext->HashInit (HashTestContext- > >HashCtx); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = HashTestContext->HashUpdate > (HashTestContext->HashCtx, HashData, DataSize); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = HashTestContext->HashFinal > (HashTestContext->HashCtx, Digest); > > + UT_ASSERT_TRUE (Status); > > + > > + UT_ASSERT_MEM_EQUAL (Digest, HashTestContext->Digest, > HashTestContext->DigestSize); > > + > > + ZeroMem (Digest, MAX_DIGEST_SIZE); > > + Status = HashTestContext->HashAll (HashData, > DataSize, Digest); > > + UT_ASSERT_TRUE (Status); > > + > > + UT_ASSERT_MEM_EQUAL (Digest, HashTestContext->Digest, > HashTestContext->DigestSize); > > + > > + return UNIT_TEST_PASSED; > > +} > > + > > +TEST_DESC mHashTest[] = { > > + // > > + // -----Description----------------Class----------- > ----------Function---------------Pre------------------ > Post------------Context > > + // > > + {"TestVerifyMd5()", > "CryptoPkg.BaseCryptLib.Hash", TestVerifyHash, > TestVerifyHashPreReq, TestVerifyHashCleanUp, > &mMd5TestCtx}, > > + {"TestVerifySha1()", > "CryptoPkg.BaseCryptLib.Hash", TestVerifyHash, > TestVerifyHashPreReq, TestVerifyHashCleanUp, > &mSha1TestCtx}, > > + {"TestVerifySha256()", > "CryptoPkg.BaseCryptLib.Hash", TestVerifyHash, > TestVerifyHashPreReq, TestVerifyHashCleanUp, > &mSha256TestCtx}, > > + {"TestVerifySha384()", > "CryptoPkg.BaseCryptLib.Hash", TestVerifyHash, > TestVerifyHashPreReq, TestVerifyHashCleanUp, > &mSha384TestCtx}, > > + {"TestVerifySha512()", > "CryptoPkg.BaseCryptLib.Hash", TestVerifyHash, > TestVerifyHashPreReq, TestVerifyHashCleanUp, > &mSha512TestCtx}, > > +}; > > + > > +UINTN mHashTestNum = ARRAY_SIZE(mHashTest); > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests > .c > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests > .c > new file mode 100644 > index 000000000000..2e0cdd7c4570 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests > .c > @@ -0,0 +1,184 @@ > +/** @file > > + Application for HMAC Primitives Validation. > > + > > +Copyright (c) 2010 - 2016, Intel Corporation. All > rights reserved.<BR> > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include "TestBaseCryptLib.h" > > + > > +// > > +// Max Known Digest Size is SHA512 Output (64 bytes) by > far > > +// > > +#define MAX_DIGEST_SIZE 64 > > + > > +// > > +// Data string for HMAC validation > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *HmacData = > "Hi There"; > > + > > +// > > +// Key value for HMAC-MD5 validation. (From "2. Test > Cases for HMAC-MD5" of IETF RFC2202) > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > HmacMd5Key[16] = { > > + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, > 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b > > + }; > > + > > +// > > +// Result for HMAC-MD5("Hi There"). (From "2. Test > Cases for HMAC-MD5" of IETF RFC2202) > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > HmacMd5Digest[] = { > > + 0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c, 0x13, > 0xf4, 0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d > > + }; > > + > > +// > > +// Key value for HMAC-SHA-1 validation. (From "3. Test > Cases for HMAC-SHA-1" of IETF RFC2202) > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > HmacSha1Key[20] = { > > + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, > 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, > > + 0x0b, 0x0b, 0x0b, 0x0b > > + }; > > + > > +// > > +// Result for HMAC-SHA-1 ("Hi There"). (From "3. Test > Cases for HMAC-SHA-1" of IETF RFC2202) > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > HmacSha1Digest[] = { > > + 0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, 0xe2, > 0x8b, 0xc0, 0xb6, 0xfb, 0x37, 0x8c, 0x8e, > > + 0xf1, 0x46, 0xbe, 0x00 > > + }; > > + > > +// > > +// Key value for HMAC-SHA-256 validation. (From "4. > Test Vectors" of IETF RFC4231) > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > HmacSha256Key[20] = { > > + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, > 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, > > + 0x0b, 0x0b, 0x0b, 0x0b > > + }; > > + > > +// > > +// Result for HMAC-SHA-256 ("Hi There"). (From "4. Test > Vectors" of IETF RFC4231) > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > HmacSha256Digest[] = { > > + 0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, > 0xa8, 0xaf, 0xce, 0xaf, 0x0b, 0xf1, 0x2b, > > + 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, > 0xe9, 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7 > > + }; > > + > > +typedef > > +VOID* > > +(EFIAPI *EFI_HMAC_NEW) ( > > + VOID > > + ); > > + > > +typedef > > +BOOLEAN > > +(EFIAPI *EFI_HMAC_INIT) ( > > + IN OUT VOID *HashContext, > > + IN CONST UINT8 *Key, > > + IN UINTN KeySize > > + ); > > + > > +typedef > > +BOOLEAN > > +(EFIAPI *EFI_HMAC_UPDATE) ( > > + IN OUT VOID *HashContext, > > + IN CONST VOID *Data, > > + IN UINTN DataSize > > + ); > > + > > +typedef > > +BOOLEAN > > +(EFIAPI *EFI_HMAC_FINAL) ( > > + IN OUT VOID *HashContext, > > + OUT UINT8 *HashValue > > + ); > > + > > +typedef struct { > > + UINT32 DigestSize; > > + EFI_HMAC_NEW HmacNew; > > + EFI_HMAC_INIT HmacInit; > > + EFI_HMAC_UPDATE HmacUpdate; > > + EFI_HMAC_FINAL HmacFinal; > > + CONST UINT8 *Key; > > + UINTN KeySize; > > + CONST UINT8 *Digest; > > + VOID *HmacCtx; > > +} HMAC_TEST_CONTEXT; > > + > > +// These functions have been deprecated but they've > been left commented out for future reference > > +//HMAC_TEST_CONTEXT mHmacMd5TestCtx = > {MD5_DIGEST_SIZE, HmacMd5New, HmacMd5SetKey, > HmacMd5Update, HmacMd5Final, HmacMd5Key, > sizeof(HmacMd5Key), HmacMd5Digest}; > > +//HMAC_TEST_CONTEXT mHmacSha1TestCtx = > {SHA1_DIGEST_SIZE, HmacSha1New, HmacSha1SetKey, > HmacSha1Update, HmacSha1Final, HmacSha1Key, > sizeof(HmacSha1Key), HmacSha1Digest}; > > +HMAC_TEST_CONTEXT mHmacSha256TestCtx = > {SHA256_DIGEST_SIZE, HmacSha256New, HmacSha256SetKey, > HmacSha256Update, HmacSha256Final, HmacSha256Key, > sizeof(HmacSha256Key), HmacSha256Digest}; > > + > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyHmacPreReq ( > > + UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + HMAC_TEST_CONTEXT *HmacTestContext; > > + > > + HmacTestContext = Context; > > + HmacTestContext->HmacCtx = HmacTestContext- > >HmacNew(); > > + if (HmacTestContext->HmacCtx == NULL) { > > + return UNIT_TEST_ERROR_TEST_FAILED; > > + } > > + > > + return UNIT_TEST_PASSED; > > +} > > + > > +VOID > > +EFIAPI > > +TestVerifyHmacCleanUp ( > > + UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + HMAC_TEST_CONTEXT *HmacTestContext; > > + > > + HmacTestContext = Context; > > + if (HmacTestContext->HmacCtx != NULL) { > > + FreePool (HmacTestContext->HmacCtx); > > + } > > +} > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyHmac ( > > + IN UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + UINT8 Digest[MAX_DIGEST_SIZE]; > > + BOOLEAN Status; > > + HMAC_TEST_CONTEXT *HmacTestContext; > > + > > + HmacTestContext = Context; > > + > > + ZeroMem (Digest, MAX_DIGEST_SIZE); > > + > > + Status = HmacTestContext->HmacInit (HmacTestContext- > >HmacCtx, HmacTestContext->Key, HmacTestContext- > >KeySize); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = HmacTestContext->HmacUpdate > (HmacTestContext->HmacCtx, HmacData, 8); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = HmacTestContext->HmacFinal > (HmacTestContext->HmacCtx, Digest); > > + UT_ASSERT_TRUE (Status); > > + > > + UT_ASSERT_MEM_EQUAL (Digest, HmacTestContext->Digest, > HmacTestContext->DigestSize); > > + > > + return UNIT_TEST_PASSED; > > +} > > + > > +TEST_DESC mHmacTest[] = { > > + // > > + // -----Description---------------------Class------ > ---------------Function---------------Pre--------------- > ---Post------------Context > > + // > > + {"TestVerifyHmacSha256()", > "CryptoPkg.BaseCryptLib.Hmac", TestVerifyHmac, > TestVerifyHmacPreReq, TestVerifyHmacCleanUp, > &mHmacSha256TestCtx}, > > + // These functions have been deprecated but they've > been left commented out for future reference > > + //{"TestVerifyHmacMd5()", > "CryptoPkg.BaseCryptLib.Hmac", TestVerifyHmac, > TestVerifyHmacPreReq, TestVerifyHmacCleanUp, > &mHmacMd5TestCtx}, > > + //{"TestVerifyHmacSha1()", > "CryptoPkg.BaseCryptLib.Hmac", TestVerifyHmac, > TestVerifyHmacPreReq, TestVerifyHmacCleanUp, > &mHmacSha1TestCtx}, > > + > > +}; > > + > > +UINTN mHmacTestNum = ARRAY_SIZE(mHmacTest); > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncry > ptTests.c > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncry > ptTests.c > new file mode 100644 > index 000000000000..404020f96726 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncry > ptTests.c > @@ -0,0 +1,308 @@ > +/** @file > > + This is a unit test for RSA OAEP encrypt. > > + > > + Copyright (c) 2019, Intel Corporation. All rights > reserved.<BR> > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > +**/ > > + > > +#include "TestBaseCryptLib.h" > > + > > +CONST UINT8 RandSeed[] = "This is the random seed for > PRNG verification."; > > + > > +// > > +// Self signed X509 certificate > > +// CN = ca.self > > +// O = Intel > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > SelfTestCert[] = { > > + 0x30, 0x82, 0x03, 0x90, 0x30, 0x82, 0x02, 0x78, 0x02, > 0x09, 0x00, 0xE4, 0xDF, 0x47, 0x80, 0xEF, > > + 0x4B, 0x3C, 0x6D, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, > 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, > > + 0x05, 0x00, 0x30, 0x81, 0x89, 0x31, 0x0B, 0x30, 0x09, > 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, > > + 0x43, 0x4E, 0x31, 0x11, 0x30, 0x0F, 0x06, 0x03, 0x55, > 0x04, 0x08, 0x0C, 0x08, 0x53, 0x68, 0x61, > > + 0x6E, 0x67, 0x48, 0x61, 0x69, 0x31, 0x11, 0x30, 0x0F, > 0x06, 0x03, 0x55, 0x04, 0x07, 0x0C, 0x08, > > + 0x53, 0x68, 0x61, 0x6E, 0x67, 0x48, 0x61, 0x69, 0x31, > 0x0E, 0x30, 0x0C, 0x06, 0x03, 0x55, 0x04, > > + 0x0A, 0x0C, 0x05, 0x49, 0x6E, 0x74, 0x65, 0x6C, 0x31, > 0x0C, 0x30, 0x0A, 0x06, 0x03, 0x55, 0x04, > > + 0x0B, 0x0C, 0x03, 0x46, 0x49, 0x45, 0x31, 0x10, 0x30, > 0x0E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, > > + 0x07, 0x63, 0x61, 0x2E, 0x73, 0x65, 0x6C, 0x66, 0x31, > 0x24, 0x30, 0x22, 0x06, 0x09, 0x2A, 0x86, > > + 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x01, 0x16, 0x15, > 0x7A, 0x68, 0x69, 0x63, 0x68, 0x61, 0x6F, > > + 0x2E, 0x67, 0x61, 0x6F, 0x40, 0x69, 0x6E, 0x74, 0x65, > 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x30, 0x1E, > > + 0x17, 0x0D, 0x31, 0x39, 0x30, 0x33, 0x32, 0x37, 0x30, > 0x35, 0x35, 0x37, 0x30, 0x39, 0x5A, 0x17, > > + 0x0D, 0x32, 0x30, 0x30, 0x33, 0x32, 0x36, 0x30, 0x35, > 0x35, 0x37, 0x30, 0x39, 0x5A, 0x30, 0x81, > > + 0x89, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, > 0x06, 0x13, 0x02, 0x43, 0x4E, 0x31, 0x11, > > + 0x30, 0x0F, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0C, 0x08, > 0x53, 0x68, 0x61, 0x6E, 0x67, 0x48, 0x61, > > + 0x69, 0x31, 0x11, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x04, > 0x07, 0x0C, 0x08, 0x53, 0x68, 0x61, 0x6E, > > + 0x67, 0x48, 0x61, 0x69, 0x31, 0x0E, 0x30, 0x0C, 0x06, > 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x05, 0x49, > > + 0x6E, 0x74, 0x65, 0x6C, 0x31, 0x0C, 0x30, 0x0A, 0x06, > 0x03, 0x55, 0x04, 0x0B, 0x0C, 0x03, 0x46, > > + 0x49, 0x45, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, > 0x04, 0x03, 0x0C, 0x07, 0x63, 0x61, 0x2E, > > + 0x73, 0x65, 0x6C, 0x66, 0x31, 0x24, 0x30, 0x22, 0x06, > 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, > > + 0x01, 0x09, 0x01, 0x16, 0x15, 0x7A, 0x68, 0x69, 0x63, > 0x68, 0x61, 0x6F, 0x2E, 0x67, 0x61, 0x6F, > > + 0x40, 0x69, 0x6E, 0x74, 0x65, 0x6C, 0x2E, 0x63, 0x6F, > 0x6D, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, > > + 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, > 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, > > + 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, > 0x01, 0x00, 0xBC, 0xE4, 0x67, 0xDC, 0xC7, > > + 0xEA, 0x6F, 0x8A, 0xA7, 0xCC, 0xB2, 0x54, 0x47, 0x48, > 0x6A, 0xE2, 0x39, 0xFF, 0xC2, 0x48, 0x58, > > + 0x34, 0x07, 0x03, 0x6D, 0x39, 0xB3, 0x67, 0x46, 0x4C, > 0xBC, 0xA0, 0xFA, 0x4E, 0x64, 0x23, 0x56, > > + 0x47, 0x7B, 0xC9, 0x1A, 0x2A, 0x55, 0x42, 0x54, 0x10, > 0x18, 0x30, 0x92, 0x60, 0x30, 0x5B, 0x9E, > > + 0xC0, 0x65, 0xD2, 0xD4, 0x05, 0x4A, 0xA6, 0x10, 0x66, > 0x04, 0xA9, 0x54, 0x4E, 0xEE, 0x49, 0x39, > > + 0x43, 0x65, 0x1E, 0x2E, 0x28, 0xDE, 0x79, 0x24, 0xA9, > 0x7E, 0xD8, 0x5B, 0xBC, 0x2F, 0x46, 0x6A, > > + 0xB7, 0xB6, 0x0D, 0x17, 0x88, 0x37, 0x52, 0x5C, 0xFE, > 0x93, 0xC0, 0xE2, 0xFD, 0x6A, 0x08, 0x1B, > > + 0xFB, 0xD1, 0x87, 0xBD, 0xBD, 0x58, 0x57, 0x2C, 0x06, > 0x5D, 0xD2, 0x7D, 0x52, 0xE2, 0x49, 0x8E, > > + 0xDC, 0xE5, 0x26, 0xBD, 0x92, 0x60, 0xB0, 0x3F, 0x58, > 0x5E, 0x52, 0xD7, 0x91, 0xDA, 0x93, 0x62, > > + 0x8D, 0x71, 0x80, 0x53, 0xBA, 0x15, 0xC4, 0x1F, 0xF3, > 0xBD, 0xE0, 0xC5, 0xA4, 0xB8, 0xD3, 0x64, > > + 0x12, 0x14, 0x1B, 0x11, 0x6B, 0x7B, 0xC2, 0x92, 0xC7, > 0xE2, 0x94, 0x0B, 0xB8, 0x67, 0x38, 0x48, > > + 0x63, 0x11, 0x74, 0x25, 0x7C, 0x37, 0xC3, 0xB2, 0xAE, > 0xD9, 0xA7, 0x17, 0x9C, 0x4B, 0x9D, 0x6C, > > + 0x27, 0xB0, 0x87, 0x16, 0x6B, 0xF2, 0x96, 0xE5, 0x1D, > 0x37, 0x27, 0xDE, 0xF2, 0x98, 0xB7, 0x81, > > + 0x08, 0xD9, 0x7A, 0xBA, 0x84, 0x14, 0x61, 0x60, 0x48, > 0xCE, 0xCE, 0x51, 0x73, 0xF4, 0xDB, 0xF1, > > + 0x5F, 0x7A, 0x17, 0x71, 0x4F, 0xC1, 0x0B, 0xCE, 0xC7, > 0x31, 0xC1, 0x4E, 0xA3, 0xEE, 0x6F, 0x72, > > + 0x97, 0x90, 0xFB, 0x8B, 0x54, 0x9F, 0x82, 0x5B, 0x48, > 0x5A, 0xF1, 0xAD, 0x8B, 0x3A, 0xCD, 0xCA, > > + 0xB2, 0x8B, 0x7A, 0x53, 0xD4, 0xF7, 0x71, 0x16, 0x75, > 0xA7, 0x35, 0x02, 0x03, 0x01, 0x00, 0x01, > > + 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, > 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x03, > > + 0x82, 0x01, 0x01, 0x00, 0x78, 0x64, 0xCD, 0x6F, 0xC0, > 0xF9, 0xE7, 0xAB, 0x19, 0x0B, 0xA4, 0x92, > > + 0x88, 0xD7, 0xE3, 0xC4, 0x9C, 0xCF, 0xF2, 0x49, 0xFC, > 0xCE, 0x8C, 0xEC, 0x33, 0x3F, 0x24, 0x6F, > > + 0xF7, 0xBC, 0x7C, 0x28, 0xEF, 0xAE, 0xAB, 0x7B, 0xAF, > 0x84, 0xE3, 0x4E, 0x38, 0xAB, 0x66, 0x20, > > + 0x7C, 0xB9, 0xE0, 0x37, 0xFD, 0x84, 0x28, 0x3C, 0xEE, > 0x35, 0xC4, 0x75, 0x04, 0x43, 0xCA, 0x4F, > > + 0x36, 0x60, 0xC4, 0x06, 0x16, 0x54, 0x3C, 0xF9, 0x47, > 0x78, 0xBD, 0xE9, 0x7F, 0xF1, 0xE3, 0x0B, > > + 0xC7, 0x7E, 0x30, 0xA4, 0xCB, 0x3A, 0xC7, 0xCD, 0x50, > 0x9A, 0x6C, 0xC1, 0xE3, 0xF8, 0xF8, 0x16, > > + 0xAA, 0x67, 0x7F, 0x92, 0xEE, 0x1D, 0x47, 0xF2, 0x96, > 0xDF, 0xD7, 0x43, 0x64, 0x78, 0xA7, 0xD9, > > + 0xF6, 0xA1, 0xD9, 0xEB, 0x5B, 0x2E, 0xC6, 0x9E, 0xEA, > 0xD5, 0x04, 0x52, 0xA4, 0x73, 0x97, 0xC8, > > + 0xB3, 0xFD, 0xE1, 0x7E, 0xB1, 0xA4, 0x3F, 0xF4, 0x56, > 0x66, 0x8E, 0x6B, 0xBC, 0xD8, 0xF0, 0x7C, > > + 0xBF, 0x58, 0xA4, 0xE0, 0x45, 0xDC, 0x2B, 0x0B, 0x2C, > 0x40, 0x52, 0x4D, 0x4B, 0xA9, 0x8A, 0x77, > > + 0x87, 0x31, 0xF8, 0x45, 0xD9, 0x60, 0xBB, 0xAD, 0x28, > 0x29, 0x14, 0x0D, 0x0D, 0x8F, 0x0F, 0x34, > > + 0x76, 0x88, 0xF3, 0x5A, 0x65, 0x00, 0x54, 0x22, 0x35, > 0xBF, 0x3A, 0x2B, 0xE9, 0xB0, 0x24, 0xE5, > > + 0xBE, 0xDF, 0x08, 0xA0, 0x02, 0xB2, 0x81, 0x01, 0xE8, > 0x14, 0xBE, 0x6E, 0x7E, 0xBD, 0x60, 0x0C, > > + 0x4A, 0xD8, 0x57, 0xA4, 0x50, 0xD3, 0xD0, 0x59, 0xCE, > 0x57, 0x27, 0xE9, 0xA6, 0x16, 0x15, 0x5F, > > + 0xF2, 0x6C, 0xCC, 0x57, 0x36, 0x20, 0x06, 0xE6, 0xA7, > 0x24, 0x22, 0xB0, 0xB1, 0xC4, 0xBC, 0x2C, > > + 0x5C, 0xCE, 0x92, 0x11, 0xFF, 0x6F, 0x8C, 0x14, 0x7E, > 0xC4, 0x10, 0x02, 0xF6, 0x69, 0x86, 0x6D, > > + 0x5B, 0x64, 0x81, 0x13, > > + }; > > + > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 PrivateKey[] > = { > > + 0x30, 0x82, 0x04, 0xA4, 0x02, 0x01, 0x00, 0x02, 0x82, > 0x01, 0x01, 0x00, 0xBC, 0xE4, 0x67, 0xDC, > > + 0xC7, 0xEA, 0x6F, 0x8A, 0xA7, 0xCC, 0xB2, 0x54, 0x47, > 0x48, 0x6A, 0xE2, 0x39, 0xFF, 0xC2, 0x48, > > + 0x58, 0x34, 0x07, 0x03, 0x6D, 0x39, 0xB3, 0x67, 0x46, > 0x4C, 0xBC, 0xA0, 0xFA, 0x4E, 0x64, 0x23, > > + 0x56, 0x47, 0x7B, 0xC9, 0x1A, 0x2A, 0x55, 0x42, 0x54, > 0x10, 0x18, 0x30, 0x92, 0x60, 0x30, 0x5B, > > + 0x9E, 0xC0, 0x65, 0xD2, 0xD4, 0x05, 0x4A, 0xA6, 0x10, > 0x66, 0x04, 0xA9, 0x54, 0x4E, 0xEE, 0x49, > > + 0x39, 0x43, 0x65, 0x1E, 0x2E, 0x28, 0xDE, 0x79, 0x24, > 0xA9, 0x7E, 0xD8, 0x5B, 0xBC, 0x2F, 0x46, > > + 0x6A, 0xB7, 0xB6, 0x0D, 0x17, 0x88, 0x37, 0x52, 0x5C, > 0xFE, 0x93, 0xC0, 0xE2, 0xFD, 0x6A, 0x08, > > + 0x1B, 0xFB, 0xD1, 0x87, 0xBD, 0xBD, 0x58, 0x57, 0x2C, > 0x06, 0x5D, 0xD2, 0x7D, 0x52, 0xE2, 0x49, > > + 0x8E, 0xDC, 0xE5, 0x26, 0xBD, 0x92, 0x60, 0xB0, 0x3F, > 0x58, 0x5E, 0x52, 0xD7, 0x91, 0xDA, 0x93, > > + 0x62, 0x8D, 0x71, 0x80, 0x53, 0xBA, 0x15, 0xC4, 0x1F, > 0xF3, 0xBD, 0xE0, 0xC5, 0xA4, 0xB8, 0xD3, > > + 0x64, 0x12, 0x14, 0x1B, 0x11, 0x6B, 0x7B, 0xC2, 0x92, > 0xC7, 0xE2, 0x94, 0x0B, 0xB8, 0x67, 0x38, > > + 0x48, 0x63, 0x11, 0x74, 0x25, 0x7C, 0x37, 0xC3, 0xB2, > 0xAE, 0xD9, 0xA7, 0x17, 0x9C, 0x4B, 0x9D, > > + 0x6C, 0x27, 0xB0, 0x87, 0x16, 0x6B, 0xF2, 0x96, 0xE5, > 0x1D, 0x37, 0x27, 0xDE, 0xF2, 0x98, 0xB7, > > + 0x81, 0x08, 0xD9, 0x7A, 0xBA, 0x84, 0x14, 0x61, 0x60, > 0x48, 0xCE, 0xCE, 0x51, 0x73, 0xF4, 0xDB, > > + 0xF1, 0x5F, 0x7A, 0x17, 0x71, 0x4F, 0xC1, 0x0B, 0xCE, > 0xC7, 0x31, 0xC1, 0x4E, 0xA3, 0xEE, 0x6F, > > + 0x72, 0x97, 0x90, 0xFB, 0x8B, 0x54, 0x9F, 0x82, 0x5B, > 0x48, 0x5A, 0xF1, 0xAD, 0x8B, 0x3A, 0xCD, > > + 0xCA, 0xB2, 0x8B, 0x7A, 0x53, 0xD4, 0xF7, 0x71, 0x16, > 0x75, 0xA7, 0x35, 0x02, 0x03, 0x01, 0x00, > > + 0x01, 0x02, 0x82, 0x01, 0x00, 0x13, 0xF7, 0xD1, 0x42, > 0xF5, 0x9F, 0x42, 0xCB, 0x55, 0x91, 0xBE, > > + 0x08, 0x4A, 0xC0, 0xCD, 0x0B, 0xBD, 0x35, 0xDC, 0x43, > 0xE9, 0x8F, 0x16, 0x6E, 0xB6, 0x4D, 0x33, > > + 0x39, 0xE7, 0xA4, 0x95, 0x0C, 0x2F, 0x69, 0xBA, 0x0C, > 0x42, 0x42, 0xAC, 0x43, 0x46, 0x10, 0xD3, > > + 0x92, 0x7F, 0x70, 0x74, 0x1E, 0x2E, 0x5B, 0x1C, 0xC1, > 0x92, 0xB6, 0xA4, 0x0C, 0xF5, 0x7C, 0xD9, > > + 0xB7, 0x54, 0x64, 0x74, 0x79, 0xB1, 0xFF, 0xE6, 0x10, > 0xB7, 0x8C, 0xF8, 0x53, 0x88, 0x6D, 0xA9, > > + 0x97, 0x04, 0xD9, 0x26, 0x1F, 0x99, 0x12, 0xFB, 0xAC, > 0x65, 0xFB, 0xA5, 0xB3, 0x1C, 0x99, 0xB9, > > + 0xBF, 0x6B, 0x35, 0x3E, 0x49, 0x55, 0xB5, 0x94, 0x4F, > 0xE7, 0x25, 0x67, 0xB1, 0x01, 0xCD, 0xD2, > > + 0x58, 0xE4, 0xBE, 0x87, 0x8C, 0x88, 0xD3, 0x0A, 0x38, > 0xDC, 0x71, 0x5D, 0x88, 0x0A, 0xE2, 0x3E, > > + 0x76, 0x63, 0x3B, 0xE4, 0x3C, 0x8F, 0x2F, 0x29, 0x1D, > 0xD1, 0x66, 0x8D, 0xC0, 0x4A, 0x68, 0x15, > > + 0x90, 0x4C, 0x95, 0x61, 0xF4, 0xFD, 0xE8, 0xFA, 0x9C, > 0x6C, 0x00, 0x22, 0x23, 0xD5, 0x17, 0x6E, > > + 0xEE, 0xA8, 0xD8, 0x70, 0xC5, 0x74, 0xEA, 0x09, 0x13, > 0x7F, 0x0C, 0x37, 0x4D, 0x50, 0xCD, 0xE9, > > + 0x16, 0xC2, 0xD5, 0xDE, 0x5E, 0xC3, 0xFC, 0x46, 0x08, > 0xF1, 0x99, 0xC0, 0xB4, 0x28, 0xFD, 0x2B, > > + 0x29, 0xEF, 0x76, 0xD7, 0x04, 0x4F, 0x02, 0x54, 0x16, > 0x54, 0x55, 0x20, 0xEC, 0xBC, 0xBF, 0x85, > > + 0x5F, 0x12, 0xCC, 0xFC, 0x0D, 0xF2, 0xEF, 0xFC, 0x4D, > 0x3E, 0xA2, 0x5E, 0x97, 0xFE, 0x35, 0x10, > > + 0x0F, 0x53, 0x1F, 0x80, 0xD5, 0xC0, 0xB4, 0xE9, 0xE9, > 0x31, 0x4C, 0x89, 0x14, 0x72, 0x39, 0x65, > > + 0x89, 0xEF, 0x7A, 0x51, 0x4A, 0xB9, 0xA9, 0xCC, 0x1B, > 0x52, 0xB0, 0x02, 0x52, 0x65, 0x2F, 0x0B, > > + 0x89, 0x41, 0x70, 0x1E, 0x01, 0x02, 0x81, 0x81, 0x00, > 0xDB, 0xE8, 0x21, 0x9E, 0xDB, 0x58, 0x42, > > + 0x0B, 0x02, 0x35, 0x87, 0xDF, 0x35, 0xF4, 0xC1, 0xEE, > 0xD5, 0x72, 0x2C, 0xDC, 0x4D, 0xC7, 0xDA, > > + 0x6D, 0x18, 0x0F, 0x68, 0x6F, 0xE7, 0xB0, 0x6C, 0xA0, > 0xB2, 0x9E, 0xB8, 0x5E, 0x4A, 0x86, 0x81, > > + 0x97, 0xBD, 0x78, 0xFC, 0x06, 0xD5, 0xBE, 0x98, 0x42, > 0x38, 0x78, 0x78, 0x16, 0xAE, 0x39, 0x56, > > + 0xFB, 0x67, 0x6B, 0xED, 0x7F, 0xB3, 0xC3, 0x7D, 0x95, > 0x86, 0x05, 0x0C, 0xF1, 0x4C, 0xC2, 0x67, > > + 0x94, 0x93, 0x1B, 0xB7, 0x91, 0x0A, 0x80, 0xE2, 0x85, > 0xA7, 0x75, 0x20, 0x61, 0xCD, 0x40, 0x5B, > > + 0x39, 0x13, 0x32, 0xF7, 0xB8, 0xD7, 0x0C, 0x39, 0x4C, > 0x82, 0x4B, 0xA3, 0x9F, 0x5E, 0xB1, 0xB0, > > + 0x38, 0x81, 0x8B, 0x1E, 0xBD, 0x2B, 0xC2, 0x9F, 0x3A, > 0x68, 0x72, 0xC2, 0x90, 0xCB, 0xA2, 0xE2, > > + 0xAC, 0x86, 0xFF, 0xC8, 0xD7, 0xB8, 0x97, 0x0E, 0x69, > 0x02, 0x81, 0x81, 0x00, 0xDB, 0xE5, 0x21, > > + 0x1F, 0x4C, 0x83, 0xD9, 0x7A, 0x56, 0x87, 0x82, 0xF1, > 0x40, 0x1A, 0xD3, 0x5B, 0xC5, 0xB4, 0x4D, > > + 0x18, 0x8A, 0xE3, 0x6B, 0xC9, 0x7E, 0x8F, 0x5D, 0x00, > 0x33, 0x66, 0xEB, 0xAE, 0x8E, 0x54, 0x49, > > + 0xD7, 0xEA, 0xF3, 0xF9, 0xED, 0xD7, 0xEE, 0x2C, 0xC8, > 0xD6, 0x8F, 0x40, 0x0A, 0x53, 0xCB, 0x5D, > > + 0x16, 0xB7, 0xEB, 0x4E, 0xFB, 0x11, 0x18, 0x1B, 0x4B, > 0x6B, 0x43, 0x04, 0xD6, 0x1D, 0x8F, 0x6D, > > + 0x4D, 0x48, 0x8B, 0x6C, 0x82, 0x52, 0xB4, 0x8D, 0x58, > 0x9B, 0x19, 0x8D, 0xE0, 0x0D, 0xFD, 0x15, > > + 0x9D, 0x35, 0xDF, 0x5E, 0xED, 0xDB, 0x8F, 0x8C, 0x44, > 0x11, 0xC9, 0x9A, 0xD9, 0x3F, 0xD4, 0xA5, > > + 0xEE, 0x68, 0x3B, 0x38, 0xD1, 0x66, 0xB0, 0x62, 0x7E, > 0xA5, 0x04, 0xD1, 0x67, 0xA4, 0x1D, 0x93, > > + 0xD6, 0x2A, 0xFB, 0xF6, 0xC1, 0xB2, 0xC4, 0x02, 0x8A, > 0xB2, 0xA8, 0xD0, 0xED, 0x02, 0x81, 0x81, > > + 0x00, 0xD1, 0x1D, 0x98, 0x43, 0x09, 0x10, 0x8F, 0x95, > 0x0A, 0x5F, 0xBF, 0x3A, 0x1A, 0x84, 0x0A, > > + 0x9B, 0x44, 0x6C, 0x53, 0x8E, 0x97, 0x84, 0x72, 0x08, > 0x85, 0xF5, 0xB8, 0xF9, 0x99, 0x58, 0x22, > > + 0xA4, 0x59, 0xD7, 0x27, 0x39, 0xBB, 0x22, 0xD7, 0x3F, > 0x65, 0x95, 0x14, 0x0C, 0xA7, 0xDB, 0x9B, > > + 0xCC, 0x75, 0x08, 0xD2, 0x21, 0xB7, 0x41, 0x9D, 0x9E, > 0x6A, 0x85, 0xAE, 0x8E, 0x5E, 0x72, 0x8B, > > + 0x0C, 0xD2, 0x2A, 0x21, 0x59, 0xA1, 0x05, 0xC9, 0x1B, > 0xF7, 0x1C, 0x47, 0x5E, 0x6C, 0x9F, 0x8D, > > + 0x49, 0x4D, 0xA9, 0xCA, 0xC6, 0x56, 0x39, 0x59, 0xC6, > 0x17, 0xA4, 0xC2, 0xFF, 0x09, 0xB8, 0x7D, > > + 0x10, 0x6D, 0x62, 0xE2, 0x50, 0x9D, 0xEA, 0xD8, 0xC9, > 0x93, 0x1E, 0xA9, 0x77, 0x78, 0x92, 0x95, > > + 0x7A, 0x24, 0x72, 0xE4, 0xE4, 0x6E, 0x51, 0x11, 0xBE, > 0xC0, 0x8D, 0xA1, 0xFE, 0xC9, 0x71, 0x13, > > + 0xE9, 0x02, 0x81, 0x80, 0x38, 0xE5, 0x3F, 0x3D, 0xB6, > 0xF1, 0x82, 0x8A, 0xD9, 0xEA, 0xB4, 0x21, > > + 0xB1, 0xE1, 0x7F, 0x00, 0x86, 0xD6, 0x11, 0x00, 0xA1, > 0xA7, 0x18, 0x53, 0x89, 0x50, 0x94, 0xD2, > > + 0xA1, 0x7A, 0x26, 0xCF, 0x02, 0x7A, 0xA2, 0xA4, 0xA0, > 0x61, 0x42, 0x30, 0x9D, 0x27, 0x3E, 0x25, > > + 0x35, 0x06, 0xD9, 0x9E, 0x12, 0x72, 0x53, 0x02, 0xB6, > 0xD1, 0xC6, 0x9C, 0xC5, 0x9E, 0x84, 0x29, > > + 0x6E, 0x76, 0x67, 0xC0, 0xF2, 0xE3, 0x12, 0x77, 0xE5, > 0xA6, 0x55, 0x8C, 0x1E, 0xD4, 0x22, 0xA2, > > + 0x63, 0x77, 0x28, 0x33, 0x69, 0xCB, 0x2B, 0x15, 0x83, > 0x43, 0xE9, 0x6F, 0x07, 0xD9, 0x4B, 0x84, > > + 0xAD, 0x49, 0x89, 0xAC, 0x5E, 0x8C, 0xA9, 0xE6, 0x56, > 0xC7, 0xC3, 0xFA, 0xC2, 0x64, 0x2F, 0x07, > > + 0xEF, 0xB0, 0xA0, 0x71, 0xFD, 0x8F, 0xBD, 0x99, 0xB3, > 0x83, 0x80, 0x24, 0x3C, 0x19, 0xE5, 0x42, > > + 0x77, 0xD9, 0xA0, 0x3D, 0x02, 0x81, 0x81, 0x00, 0xB7, > 0x35, 0xE9, 0x66, 0x4A, 0xCD, 0x5F, 0x5C, > > + 0x44, 0x9A, 0x7F, 0x23, 0xAE, 0xC2, 0x7F, 0xF0, 0x8D, > 0xE4, 0xDB, 0xCD, 0x1A, 0x8A, 0x40, 0xD7, > > + 0x0A, 0xC4, 0x3E, 0xC5, 0x03, 0xFB, 0x47, 0xAB, 0x72, > 0xDF, 0xD7, 0x68, 0x27, 0x6E, 0x86, 0x94, > > + 0x2A, 0x2A, 0xDA, 0x25, 0x9E, 0xF6, 0x5E, 0xE0, 0x6D, > 0x7C, 0x7D, 0xFE, 0x72, 0xDD, 0xC7, 0xBC, > > + 0x74, 0xC7, 0xAD, 0xEA, 0x44, 0xBE, 0x5C, 0x8A, 0x03, > 0xCD, 0x35, 0x74, 0x6F, 0x4E, 0x92, 0x31, > > + 0xBE, 0x57, 0x9A, 0x02, 0x0C, 0xFC, 0xD1, 0xD5, 0xE7, > 0x3E, 0x53, 0x0C, 0x47, 0x12, 0x39, 0x45, > > + 0x6E, 0x35, 0x24, 0xA6, 0xDA, 0x42, 0x63, 0xC6, 0xBF, > 0xCA, 0xE8, 0x32, 0xFD, 0x61, 0xC0, 0x80, > > + 0x39, 0xD2, 0xB7, 0x0D, 0xF3, 0xA2, 0xF3, 0xE4, 0x49, > 0x26, 0x89, 0xD0, 0xA0, 0x24, 0xC8, 0x27, > > + 0x86, 0x10, 0x09, 0x88, 0x6C, 0x35, 0x60, 0xF2, > > + }; > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyOaepEncrypt ( > > + IN UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + BOOLEAN Status; > > + UINT8 File[4]; > > + UINT8 *OutBuffer; > > + UINTN OutBufferSize; > > + UINT8 *OutBuffer2; > > + UINTN OutBuffer2Size; > > + > > + // Create a file and add content '123' in it > > + File[0] = '1'; > > + File[1] = '2'; > > + File[2] = '3'; > > + File[3] = 0; > > + > > + OutBuffer = NULL; > > + OutBufferSize = 0; > > + OutBuffer2 = NULL; > > + OutBuffer2Size = 0; > > + > > + Status = Pkcs1v2Encrypt ( > > + SelfTestCert, > > + (UINTN)sizeof (SelfTestCert), > > + File, > > + (UINTN)sizeof (File), > > + NULL, > > + 0, > > + &OutBuffer, > > + (UINTN *)&OutBufferSize > > + ); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = Pkcs1v2Encrypt ( > > + SelfTestCert, > > + (UINTN)sizeof (SelfTestCert), > > + File, > > + (UINTN)4, > > + NULL, > > + 0, > > + &OutBuffer2, > > + (UINTN *)&OutBuffer2Size > > + ); > > + UT_ASSERT_TRUE (Status); > > + > > + // TRUE - the two OutBuffers are indentical. That > means the Oaep encrypt result is incorrect. > > + Status = (CompareMem (OutBuffer, OutBuffer2, > OutBufferSize >= OutBuffer2Size ? OutBufferSize : > OutBuffer2Size) == 0); > > + UT_ASSERT_FALSE (Status); > > + > > + if (OutBuffer) { > > + FreePool (OutBuffer); > > + OutBuffer = NULL; > > + OutBufferSize = 0; > > + } > > + > > + if (OutBuffer2) { > > + FreePool (OutBuffer2); > > + OutBuffer2 = NULL; > > + OutBuffer2Size = 0; > > + } > > + > > + Status = Pkcs1v2Encrypt ( > > + SelfTestCert, > > + (UINTN)sizeof (SelfTestCert), > > + File, > > + (UINTN)4, > > + RandSeed, > > + (UINTN)sizeof (RandSeed), > > + &OutBuffer, > > + (UINTN *)&OutBufferSize > > + ); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = Pkcs1v2Encrypt ( > > + SelfTestCert, > > + (UINTN)sizeof (SelfTestCert), > > + File, > > + (UINTN)4, > > + RandSeed, > > + (UINTN)sizeof (RandSeed), > > + &OutBuffer2, > > + (UINTN *)&OutBuffer2Size > > + ); > > + UT_ASSERT_TRUE (Status); > > + > > + // TRUE - the two OutBuffers are indentical. That > means the Oaep encrypt result is incorrect. > > + Status = (CompareMem (OutBuffer, OutBuffer2, > OutBufferSize >= OutBuffer2Size ? OutBufferSize : > OutBuffer2Size) == 0); > > + UT_ASSERT_FALSE (Status); > > + > > + if (OutBuffer) { > > + FreePool (OutBuffer); > > + OutBuffer = NULL; > > + OutBufferSize = 0; > > + } > > + > > + if (OutBuffer2) { > > + FreePool (OutBuffer2); > > + OutBuffer2 = NULL; > > + OutBuffer2Size = 0; > > + } > > + > > + Status = Pkcs1v2Encrypt ( > > + NULL, > > + (UINTN)sizeof (SelfTestCert), > > + File, > > + (UINTN)4, > > + NULL, > > + 0, > > + &OutBuffer, > > + (UINTN *)&OutBufferSize > > + ); > > + UT_ASSERT_FALSE (Status); > > + > > + Status = Pkcs1v2Encrypt ( > > + SelfTestCert, > > + (UINTN)sizeof (SelfTestCert), > > + File, > > + (UINTN)4, > > + NULL, > > + 0, > > + (UINT8 **)NULL, > > + (UINTN *)&OutBufferSize > > + ); > > + UT_ASSERT_FALSE (Status); > > + > > + Status = Pkcs1v2Encrypt ( > > + SelfTestCert, > > + (UINTN)sizeof (SelfTestCert), > > + File, > > + (UINTN)4, > > + NULL, > > + 0, > > + &OutBuffer, > > + (UINTN *)NULL > > + ); > > + UT_ASSERT_FALSE (Status); > > + > > + return UNIT_TEST_PASSED; > > +} > > + > > +TEST_DESC mOaepTest[] = { > > + // > > + // -----Description-------------------------------- > ------Class----------------------Function--------------- > --Pre---Post--Context > > + // > > + {"TestVerifyOaepEncrypt()", > "CryptoPkg.BaseCryptLib.Pkcs1v2Encrypt", > TestVerifyOaepEncrypt, NULL, NULL, NULL}, > > +}; > > + > > +UINTN mOaepTestNum = ARRAY_SIZE(mOaepTest); > > + > > + > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkd > f2Tests.c > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkd > f2Tests.c > new file mode 100644 > index 000000000000..b64248aa5619 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkd > f2Tests.c > @@ -0,0 +1,71 @@ > +/** @file > > + Application for PKCS#5 PBKDF2 Function Validation. > > + > > +Copyright (c) 2016, Intel Corporation. All rights > reserved.<BR> > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include "TestBaseCryptLib.h" > > + > > +// > > +// PBKDF2 HMAC-SHA1 Test Vector from RFC6070 > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *Password = > "password"; // Input Password > > +GLOBAL_REMOVE_IF_UNREFERENCED UINTN PassLen = > 8; // Length of Input Password > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *Salt = > "salt"; // Input Salt > > +GLOBAL_REMOVE_IF_UNREFERENCED UINTN SaltLen = > 4; // Length of Input Salt > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINTN Count = > 2; // InterationCount > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINTN KeyLen = > 20; // Length of derived key > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 DerivedKey[] > = { // Expected output key > > + 0xea, 0x6c, 0x01, 0x4d, 0xc7, 0x2d, 0x6f, 0x8c, 0xcd, > 0x1e, 0xd9, 0x2a, 0xce, 0x1d, 0x41, 0xf0, > > + 0xd8, 0xde, 0x89, 0x57 > > + }; > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyPkcs5Pbkdf2 ( > > + IN UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + BOOLEAN Status; > > + UINT8 *OutKey; > > + > > + OutKey = AllocatePool (KeyLen); > > + > > + // > > + // Verify PKCS#5 PBKDF2 Key Derivation Function > > + // > > + Status = Pkcs5HashPassword ( > > + PassLen, > > + Password, > > + SaltLen, > > + (CONST UINT8 *)Salt, > > + Count, > > + SHA1_DIGEST_SIZE, > > + KeyLen, > > + OutKey > > + ); > > + UT_ASSERT_TRUE (Status); > > + > > + // > > + // Check the output key with the expected key result > > + // > > + UT_ASSERT_MEM_EQUAL (OutKey, DerivedKey, KeyLen); > > + > > + // > > + // Release Resources > > + // > > + FreePool (OutKey); > > + > > + return EFI_SUCCESS; > > +} > > + > > +TEST_DESC mPkcs5Test[] = { > > + // > > + // -----Description------------------------------ > Class----------------------Function-----------------Pre- > --Post--Context > > + // > > + {"TestVerifyPkcs5Pbkdf2()", > "CryptoPkg.BaseCryptLib.Pkcs5", TestVerifyPkcs5Pbkdf2, > NULL, NULL, NULL}, > > +}; > > + > > +UINTN mPkcs5TestNum = ARRAY_SIZE(mPkcs5Test); > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuT > ests.c > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuT > ests.c > new file mode 100644 > index 000000000000..b5ae4f6a89e0 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuT > ests.c > @@ -0,0 +1,524 @@ > +/** @file -- Pkcs7EkuVerify.c > > + * Copyright (c) Microsoft Corporation. > > + * SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > + This is an test code which verifies specified > > + Enhanced Key Usages (EKU)'s are present in the leaf > signer > > + of a PKCS7 formatted signature. > > + > > + > > + A typical signing certificate chain looks like this: > (Could be RSA or ECC). > > + > > + ------------------------------------------ > > + | | // > Root of trust. ECDSA P521 curve > > + | TestEKUParsingRoot | // > SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE > > + | | // > CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE > > + ------------------------------------------ > > + ^ > > + | > > + ------------------------------------------ > > + | | // > Policy CA. Issues subordinate CAs. ECC P384 curve. > > + | TestEKUParsingPolicyCA | // > SHA 256 Key Usage: > > + | | // > CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE > > + ------------------------------------------ > > + ^ > > + | > > + ------------------------------------------ > > + | | // > Issues end-entity (leaf) signers. ECC P256 curve. > > + | TestEKUParsingIssuingCA | // > SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE > > + | | // > Enhanced Key Usage: > > + ------------------------------------------ // > 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing) > > + ^ > > + | > > + -------------------------------------- > > + / TestEKUParsingLeafSigner && / // > Leaf signer, ECC P256 curve. > > + / TestEKUParsingLeafSignerPid12345 / // > SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE > > + / / // > Enhanced Key usages: > > + -------------------------------------- // > 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing) > > + // > 1.3.6.1.4.1.311.76.9.21.1.N, N == Product ID. > > + > > + > > + > > + > > + > > +**/ > > + > > +#include "TestBaseCryptLib.h" > > + > > +#include "Pkcs7EkuTestSignatures.h" > > + > > +EFI_STATUS > > +EFIAPI > > +VerifyEKUsInPkcs7Signature ( > > + IN CONST UINT8 *Pkcs7Signature, > > + IN CONST UINT32 SignatureSize, > > + IN CONST CHAR8 *RequiredEKUs[], > > + IN CONST UINT32 RequiredEKUsSize, > > + IN BOOLEAN RequireAllPresent > > + ); > > + > > +///==================================================== > ============================================ > > +///==================================================== > ============================================ > > +/// > > +/// TEST CASES > > +/// > > +///==================================================== > ============================================ > > +///==================================================== > ============================================ > > + > > +CONST CHAR8 FIRMWARE_SIGNER_EKU[] = > "1.3.6.1.4.1.311.76.9.21.1"; > > + > > + > > +/** > > + TestVerifyEKUsInSignature() > > + > > + Verify that "1.3.6.1.4.1.311.76.9.21.1" (Firmware > signature) is in the > > + leaf signer certificate. > > + > > + > > + @param[in] Framework - Unit-test framework handle. > > + @param[in] Context - Optional context pointer for > this test. > > + > > + @retval UNIT_TEST_PASSED - The required > EKUs were found in the signature. > > + @retval UNIT_TEST_ERROR_TEST_FAILED - Something > failed, check the debug output. > > +**/ > > +static > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyEKUsInSignature ( > > + IN UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + EFI_STATUS Status = EFI_SUCCESS; > > + > > + CONST CHAR8* RequiredEKUs[] = { FIRMWARE_SIGNER_EKU > }; > > + > > + Status = > VerifyEKUsInPkcs7Signature(ProductionECCSignature, > > + > ARRAY_SIZE(ProductionECCSignature), > > + (CONST > CHAR8**)RequiredEKUs, > > + > ARRAY_SIZE(RequiredEKUs), > > + TRUE); > > + UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS); > > + > > + return UNIT_TEST_PASSED; > > +}// TestVerifyEKUsInSignature() > > + > > + > > +/** > > + TestVerifyEKUsWith3CertsInSignature() > > + > > + This PKCS7 signature has 3 certificates in it. > (Policy CA, Issuing CA > > + and leaf signer). It has one firmware signing EKU in > it. > > + "1.3.6.1.4.1.311.76.9.21.1" > > + > > + @param[in] Framework - Unit-test framework handle. > > + @param[in] Context - Optional context pointer for > this test. > > + > > + @retval UNIT_TEST_PASSED - The required > EKUs were found in the signature. > > + @retval UNIT_TEST_ERROR_TEST_FAILED - Something > failed, check the debug output. > > +**/ > > +static > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyEKUsWith3CertsInSignature ( > > + IN UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + EFI_STATUS Status = EFI_SUCCESS; > > + > > + CONST CHAR8* RequiredEKUs[] = { FIRMWARE_SIGNER_EKU > }; > > + > > + Status = > VerifyEKUsInPkcs7Signature(TestSignEKUsWith3CertsInSigna > ture, > > + > ARRAY_SIZE(TestSignEKUsWith3CertsInSignature), > > + (CONST > CHAR8**)RequiredEKUs, > > + > ARRAY_SIZE(RequiredEKUs), > > + TRUE); > > + UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS); > > + > > + return UNIT_TEST_PASSED; > > +}// TestVerifyEKUsWith3CertsInSignature() > > + > > +/** > > + TestVerifyEKUsWith2CertsInSignature() > > + > > + This PKCS7 signature has 2 certificates in it. > (Issuing CA and leaf signer). > > + It has one firmware signing EKU in it. > "1.3.6.1.4.1.311.76.9.21.1" > > + > > + @param[in] Framework - Unit-test framework handle. > > + @param[in] Context - Optional context pointer for > this test. > > + > > + @retval UNIT_TEST_PASSED - The required > EKUs were found in the signature. > > + @retval UNIT_TEST_ERROR_TEST_FAILED - Something > failed, check the debug output. > > +**/ > > +static > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyEKUsWith2CertsInSignature ( > > + IN UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + EFI_STATUS Status = EFI_SUCCESS; > > + > > + CONST CHAR8* RequiredEKUs[] = { FIRMWARE_SIGNER_EKU > }; > > + > > + Status = > VerifyEKUsInPkcs7Signature(TestSignEKUsWith2CertsInSigna > ture, > > + > ARRAY_SIZE(TestSignEKUsWith2CertsInSignature), > > + (CONST > CHAR8**)RequiredEKUs, > > + > ARRAY_SIZE(RequiredEKUs), > > + TRUE); > > + UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS); > > + > > + return UNIT_TEST_PASSED; > > +}// TestVerifyEKUsWith2CertsInSignature() > > + > > + > > +/** > > + TestVerifyEKUsWith1CertInSignature() > > + > > + This PKCS7 signature only has the leaf signer in it. > > + It has one firmware signing EKU in it. > "1.3.6.1.4.1.311.76.9.21.1" > > + > > + @param[in] Framework - Unit-test framework handle. > > + @param[in] Context - Optional context pointer for > this test. > > + > > + @retval UNIT_TEST_PASSED - The required > EKUs were found in the signature. > > + @retval UNIT_TEST_ERROR_TEST_FAILED - Something > failed, check the debug output. > > +**/ > > +static > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyEKUsWith1CertInSignature ( > > + IN UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + EFI_STATUS Status = EFI_SUCCESS; > > + > > + CONST CHAR8* RequiredEKUs[] = { FIRMWARE_SIGNER_EKU > }; > > + > > + Status = > VerifyEKUsInPkcs7Signature(TestSignEKUsWith1CertInSignat > ure, > > + > ARRAY_SIZE(TestSignEKUsWith1CertInSignature), > > + (CONST > CHAR8**)RequiredEKUs, > > + > ARRAY_SIZE(RequiredEKUs), > > + TRUE); > > + UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS); > > + > > + return UNIT_TEST_PASSED; > > +}// TestVerifyEKUsWith1CertInSignature() > > + > > + > > +/** > > + TestVerifyEKUsWithMultipleEKUsInCert() > > + > > + > > + This signature has two EKU's in it: > > + "1.3.6.1.4.1.311.76.9.21.1" > > + "1.3.6.1.4.1.311.76.9.21.2" > > + We verify that both EKU's were present in the leaf > signer. > > + > > + @param[in] Framework - Unit-test framework handle. > > + @param[in] Context - Optional context pointer for > this test. > > + > > + @retval UNIT_TEST_PASSED - The required > EKUs were found in the signature. > > + @retval UNIT_TEST_ERROR_TEST_FAILED - Something > failed, check the debug output. > > +**/ > > +static > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyEKUsWithMultipleEKUsInCert ( > > + IN UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + EFI_STATUS Status = EFI_SUCCESS; > > + > > + CONST CHAR8* RequiredEKUs[] = { > "1.3.6.1.4.1.311.76.9.21.1", > > + > "1.3.6.1.4.1.311.76.9.21.1.2" }; > > + > > + Status = > VerifyEKUsInPkcs7Signature(TestSignedWithMultipleEKUsInC > ert, > > + > ARRAY_SIZE(TestSignedWithMultipleEKUsInCert), > > + (CONST > CHAR8**)RequiredEKUs, > > + > ARRAY_SIZE(RequiredEKUs), > > + TRUE); > > + UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS); > > + > > + return UNIT_TEST_PASSED; > > +}// TestVerifyEKUsWithMultipleEKUsInCert() > > + > > + > > +/** > > + TestEkusNotPresentInSignature() > > + > > + This test verifies that if we send an EKU that is not > in the signature, > > + that we get back an error. > > + > > + @param[in] Framework - Unit-test framework handle. > > + @param[in] Context - Optional context pointer for > this test. > > + > > + @retval UNIT_TEST_PASSED - The required > EKUs were found in the signature. > > + @retval UNIT_TEST_ERROR_TEST_FAILED - Something > failed, check the debug output. > > +**/ > > +static > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestEkusNotPresentInSignature ( > > + IN UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + EFI_STATUS Status = EFI_SUCCESS; > > + > > + // > > + // This EKU is not in the signature. > > + // > > + CONST CHAR8* RequiredEKUs[] = { > "1.3.6.1.4.1.311.76.9.21.3" }; > > + > > + Status = > VerifyEKUsInPkcs7Signature(TestSignedWithMultipleEKUsInC > ert, > > + > ARRAY_SIZE(TestSignedWithMultipleEKUsInCert), > > + (CONST > CHAR8**)RequiredEKUs, > > + > ARRAY_SIZE(RequiredEKUs), > > + TRUE); > > + UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS); > > + > > + return UNIT_TEST_PASSED; > > +}// TestEkusNotPresentInSignature() > > + > > +/** > > + TestEkusNotPresentInSignature() > > + > > + This test signature has two EKU's in it: (Product ID > is 10001) > > + "1.3.6.1.4.1.311.76.9.21.1" > > + "1.3.6.1.4.1.311.76.9.21.1.10001" > > + > > + @param[in] Framework - Unit-test framework handle. > > + @param[in] Context - Optional context pointer for > this test. > > + > > + @retval UNIT_TEST_PASSED - The required > EKUs were found in the signature. > > + @retval UNIT_TEST_ERROR_TEST_FAILED - Something > failed, check the debug output. > > +**/ > > + > > +static > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestProductId10001PresentInSignature( > > + IN UNIT_TEST_CONTEXT Context > > +) > > +{ > > + EFI_STATUS Status = EFI_SUCCESS; > > + > > + // > > + // These EKU's are present in the leaf signer > certificate. > > + // > > + CONST CHAR8* RequiredEKUs[] = { > "1.3.6.1.4.1.311.76.9.21.1", > > + > "1.3.6.1.4.1.311.76.9.21.1.10001" }; > > + > > + Status = > VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001, > > + > ARRAY_SIZE(TestSignedWithProductId10001), > > + (CONST > CHAR8**)RequiredEKUs, > > + > ARRAY_SIZE(RequiredEKUs), > > + TRUE); > > + UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS); > > + > > + return UNIT_TEST_PASSED; > > +}// TestProductId10001PresentInSignature() > > + > > + > > +/** > > + TestOnlyOneEkuInListRequired() > > + > > + This test will check the BOOLEAN RequireAllPresent > parameter in the > > + call to VerifyEKUsInPkcs7Signature() behaves > properly. The signature > > + has two EKU's in it: > > + > > + "1.3.6.1.4.1.311.76.9.21.1" > > + "1.3.6.1.4.1.311.76.9.21.1.10001" > > + > > + but we only pass in one of them, and set > RequireAllPresent to FALSE. > > + > > + @param[in] Framework - Unit-test framework handle. > > + @param[in] Context - Optional context pointer for > this test. > > + > > + @retval UNIT_TEST_PASSED - The required > EKUs were found in the signature. > > + @retval UNIT_TEST_ERROR_TEST_FAILED - Something > failed, check the debug output. > > +**/ > > + > > +static > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestOnlyOneEkuInListRequired( > > + IN UNIT_TEST_CONTEXT Context > > +) > > +{ > > + EFI_STATUS Status = EFI_SUCCESS; > > + > > + // > > + // This will test the flag that specifies it is OK to > succeed if > > + // any one of the EKU's passed in is found. > > + // > > + CONST CHAR8* RequiredEKUs[] = { > "1.3.6.1.4.1.311.76.9.21.1.10001" }; > > + > > + Status = > VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001, > > + > ARRAY_SIZE(TestSignedWithProductId10001), > > + (CONST > CHAR8**)RequiredEKUs, > > + > ARRAY_SIZE(RequiredEKUs), > > + FALSE); > > + UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS); > > + > > + return UNIT_TEST_PASSED; > > +}// TestOnlyOneEkuInListRequired() > > + > > +/** > > + TestNoEKUsInSignature() > > + > > + This test uses a signature that was signed with a > certificate that does > > + not contain any EKUs. > > + > > + > > + @param[in] Framework - Unit-test framework handle. > > + @param[in] Context - Optional context pointer for > this test. > > + > > + @retval UNIT_TEST_PASSED - The required > EKUs were found in the signature. > > + @retval UNIT_TEST_ERROR_TEST_FAILED - Something > failed, check the debug output. > > +**/ > > + > > +static > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestNoEKUsInSignature( > > + IN UNIT_TEST_CONTEXT Context > > +) > > +{ > > + EFI_STATUS Status = EFI_SUCCESS; > > + > > + // > > + // This EKU is not in the certificate, so it should > fail. > > + // > > + CONST CHAR8* RequiredEKUs[] = { > "1.3.6.1.4.1.311.76.9.21.1" }; > > + > > + Status = > VerifyEKUsInPkcs7Signature(TestSignatureWithNoEKUsPresen > t, > > + > ARRAY_SIZE(TestSignatureWithNoEKUsPresent), > > + (CONST > CHAR8**)RequiredEKUs, > > + > ARRAY_SIZE(RequiredEKUs), > > + TRUE); > > + UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS); > > + > > + return UNIT_TEST_PASSED; > > +}// TestNoEKUsInSignature() > > + > > + > > +/** > > + TestInvalidParameters() > > + > > + Passes the API invalid parameters, and ensures that > it does not succeed. > > + > > + @param[in] Framework - Unit-test framework handle. > > + @param[in] Context - Optional context pointer for > this test. > > + > > + @retval UNIT_TEST_PASSED - The required > EKUs were found in the signature. > > + @retval UNIT_TEST_ERROR_TEST_FAILED - Something > failed, check the debug output. > > +**/ > > +static > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestInvalidParameters( > > + IN UNIT_TEST_CONTEXT Context > > +) > > +{ > > + EFI_STATUS Status = EFI_SUCCESS; > > + > > + CONST CHAR8* RequiredEKUs[] = { > "1.3.6.1.4.1.311.76.9.21.1" }; > > + > > + // > > + // Check bad signature. > > + // > > + Status = VerifyEKUsInPkcs7Signature(NULL, > > + 0, > > + (CONST > CHAR8**)RequiredEKUs, > > + > ARRAY_SIZE(RequiredEKUs), > > + TRUE); > > + UT_ASSERT_STATUS_EQUAL (Status, > EFI_INVALID_PARAMETER); > > + > > + // > > + // Check invalid EKU's > > + // > > + Status = > VerifyEKUsInPkcs7Signature(TestSignatureWithNoEKUsPresen > t, > > + > ARRAY_SIZE(TestSignatureWithNoEKUsPresent), > > + (CONST > CHAR8**)NULL, > > + 0, > > + TRUE); > > + UT_ASSERT_STATUS_EQUAL (Status, > EFI_INVALID_PARAMETER); > > + > > + return UNIT_TEST_PASSED; > > +}// TestInvalidParameters() > > + > > + > > +/** > > + TestEKUSubStringFails() > > + > > + Pass the API a sub set and super set of an EKU and > ensure that they > > + don't pass. > > + > > + @param[in] Framework - Unit-test framework handle. > > + @param[in] Context - Optional context pointer for > this test. > > + > > + @retval UNIT_TEST_PASSED - The required > EKUs were found in the signature. > > + @retval UNIT_TEST_ERROR_TEST_FAILED - Something > failed, check the debug output. > > +**/ > > +static > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestEKUSubsetSupersetFails( > > + IN UNIT_TEST_CONTEXT Context > > +) > > +{ > > + EFI_STATUS Status = EFI_SUCCESS; > > + > > + // > > + // This signature has an EKU of: > > + // "1.3.6.1.4.1.311.76.9.21.1.10001" > > + // so ensure that > > + // "1.3.6.1.4.1.311.76.9.21" > > + // does not pass. > > + // > > + CONST CHAR8* RequiredEKUs1[] = { > "1.3.6.1.4.1.311.76.9.21" }; > > + > > + Status = > VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001, > > + > ARRAY_SIZE(TestSignedWithProductId10001), > > + (CONST > CHAR8**)RequiredEKUs1, > > + > ARRAY_SIZE(RequiredEKUs1), > > + TRUE); > > + UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS); > > + > > + // > > + // This signature has an EKU of: > > + // "1.3.6.1.4.1.311.76.9.21.1.10001" > > + // so ensure that a super set > > + // "1.3.6.1.4.1.311.76.9.21.1.10001.1" > > + // does not pass. > > + // > > + CONST CHAR8* RequiredEKUs2[] = { > "1.3.6.1.4.1.311.76.9.21.1.10001.1" }; > > + > > + Status = > VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001, > > + > ARRAY_SIZE(TestSignedWithProductId10001), > > + (CONST > CHAR8**)RequiredEKUs2, > > + > ARRAY_SIZE(RequiredEKUs2), > > + TRUE); > > + UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS); > > + > > + return UNIT_TEST_PASSED; > > +}// TestEKUSubsetSupersetFails() > > + > > +TEST_DESC mPkcs7EkuTest[] = { > > + // > > + // -----Description-------------------------------- > Class----------------------------Function--------------- > ---------------Pre---Post--Context > > + // > > + {"TestVerifyEKUsInSignature()", > "CryptoPkg.BaseCryptLib.Eku", > TestVerifyEKUsInSignature, NULL, NULL, NULL}, > > + {"TestVerifyEKUsWith3CertsInSignature()", > "CryptoPkg.BaseCryptLib.Eku", > TestVerifyEKUsWith3CertsInSignature, NULL, NULL, NULL}, > > + {"TestVerifyEKUsWith2CertsInSignature()", > "CryptoPkg.BaseCryptLib.Eku", > TestVerifyEKUsWith2CertsInSignature, NULL, NULL, NULL}, > > + {"TestVerifyEKUsWith1CertInSignature()", > "CryptoPkg.BaseCryptLib.Eku", > TestVerifyEKUsWith1CertInSignature, NULL, NULL, NULL}, > > + {"TestVerifyEKUsWithMultipleEKUsInCert()", > "CryptoPkg.BaseCryptLib.Eku", > TestVerifyEKUsWithMultipleEKUsInCert, NULL, NULL, NULL}, > > + {"TestEkusNotPresentInSignature()", > "CryptoPkg.BaseCryptLib.Eku", > TestEkusNotPresentInSignature, NULL, NULL, NULL}, > > + {"TestProductId10001PresentInSignature()", > "CryptoPkg.BaseCryptLib.Eku", > TestProductId10001PresentInSignature, NULL, NULL, NULL}, > > + {"TestOnlyOneEkuInListRequired()", > "CryptoPkg.BaseCryptLib.Eku", > TestOnlyOneEkuInListRequired, NULL, NULL, NULL}, > > + {"TestNoEKUsInSignature()", > "CryptoPkg.BaseCryptLib.Eku", TestNoEKUsInSignature, > NULL, NULL, NULL}, > > + {"TestInvalidParameters()", > "CryptoPkg.BaseCryptLib.Eku", TestInvalidParameters, > NULL, NULL, NULL}, > > + {"TestEKUSubsetSupersetFails()", > "CryptoPkg.BaseCryptLib.Eku", > TestEKUSubsetSupersetFails, NULL, NULL, NULL}, > > +}; > > + > > +UINTN mPkcs7EkuTestNum = ARRAY_SIZE(mPkcs7EkuTest); > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests > .c > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests > .c > new file mode 100644 > index 000000000000..cc6b2ca46ba1 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests > .c > @@ -0,0 +1,51 @@ > +/** @file > > + Application for Pseudorandom Number Generator > Validation. > > + > > +Copyright (c) 2010, Intel Corporation. All rights > reserved.<BR> > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include "TestBaseCryptLib.h" > > + > > +#define RANDOM_NUMBER_SIZE 256 > > + > > +CONST UINT8 SeedString[] = "This is the random seed > for PRNG verification."; > > + > > +UINT8 PreviousRandomBuffer[RANDOM_NUMBER_SIZE] = { 0x0 > }; > > + > > +UINT8 RandomBuffer[RANDOM_NUMBER_SIZE] = { 0x0 }; > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyPrngGeneration ( > > + UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + UINTN Index; > > + BOOLEAN Status; > > + > > + Status = RandomSeed (SeedString, sizeof > (SeedString)); > > + UT_ASSERT_TRUE (Status); > > + > > + for (Index = 0; Index < 10; Index ++) { > > + Status = RandomBytes (RandomBuffer, > RANDOM_NUMBER_SIZE); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = (CompareMem (PreviousRandomBuffer, > RandomBuffer, RANDOM_NUMBER_SIZE) == 0); > > + UT_ASSERT_FALSE (Status); > > + > > + CopyMem (PreviousRandomBuffer, RandomBuffer, > RANDOM_NUMBER_SIZE); > > + } > > + > > + return UNIT_TEST_PASSED; > > +} > > + > > +TEST_DESC mPrngTest[] = { > > + // > > + // -----Description-------------------------------- > Class--------------------Function----------------Pre--- > Post--Context > > + // > > + {"TestVerifyPrngGeneration()", > "CryptoPkg.BaseCryptLib.Prng", > TestVerifyPrngGeneration, NULL, NULL, NULL}, > > +}; > > + > > +UINTN mPrngTestNum = ARRAY_SIZE(mPrngTest); > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7T > ests.c > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7T > ests.c > new file mode 100644 > index 000000000000..85a3d6a5a13b > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7T > ests.c > @@ -0,0 +1,415 @@ > +/** @file > > + Application for RSA Key Retrieving (from PEM and > X509) & Signature Validation. > > + > > + Copyright (c) 2010 - 2011, Intel Corporation. All > rights reserved.<BR> > > + Copyright (c) Microsoft Corporation. > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include "TestBaseCryptLib.h" > > + > > + > > +// > > +// Password-protected PEM Key data for RSA Private Key > Retrieving (encryption key is "client"). > > +// (Generated by OpenSSL utility). > > +// $ openssl genrsa -aes256 -out TestKeyPem -passout > pass:client 1024 > > +// password should match PemPass in this file > > +// $ xxd --include TestKeyPem > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TestKeyPem[] > = { > > + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, > 0x49, 0x4e, 0x20, 0x52, > > + 0x53, 0x41, 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, > 0x45, 0x20, 0x4b, > > + 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x50, > 0x72, 0x6f, 0x63, > > + 0x2d, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x34, 0x2c, > 0x45, 0x4e, 0x43, > > + 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x0a, 0x44, 0x45, > 0x4b, 0x2d, 0x49, > > + 0x6e, 0x66, 0x6f, 0x3a, 0x20, 0x41, 0x45, 0x53, 0x2d, > 0x32, 0x35, 0x36, > > + 0x2d, 0x43, 0x42, 0x43, 0x2c, 0x34, 0x42, 0x44, 0x31, > 0x30, 0x45, 0x39, > > + 0x35, 0x42, 0x38, 0x33, 0x39, 0x42, 0x30, 0x44, 0x33, > 0x35, 0x36, 0x31, > > + 0x38, 0x41, 0x44, 0x36, 0x45, 0x46, 0x44, 0x36, 0x34, > 0x32, 0x34, 0x44, > > + 0x36, 0x0a, 0x0a, 0x42, 0x50, 0x39, 0x49, 0x32, 0x42, > 0x30, 0x6c, 0x50, > > + 0x7a, 0x4c, 0x50, 0x50, 0x38, 0x2f, 0x4b, 0x71, 0x35, > 0x34, 0x2f, 0x56, > > + 0x68, 0x75, 0x4b, 0x35, 0x5a, 0x63, 0x72, 0x32, 0x55, > 0x6c, 0x32, 0x75, > > + 0x43, 0x57, 0x4a, 0x62, 0x59, 0x33, 0x50, 0x77, 0x39, > 0x6e, 0x4c, 0x6d, > > + 0x45, 0x41, 0x6a, 0x47, 0x74, 0x4a, 0x68, 0x57, 0x46, > 0x66, 0x50, 0x47, > > + 0x38, 0x62, 0x6d, 0x41, 0x6f, 0x73, 0x56, 0x0a, 0x47, > 0x76, 0x42, 0x30, > > + 0x6d, 0x2b, 0x7a, 0x5a, 0x43, 0x2b, 0x30, 0x6c, 0x57, > 0x6c, 0x72, 0x59, > > + 0x7a, 0x51, 0x4b, 0x6a, 0x57, 0x79, 0x44, 0x6e, 0x4d, > 0x58, 0x72, 0x33, > > + 0x51, 0x39, 0x69, 0x57, 0x32, 0x4b, 0x33, 0x68, 0x4d, > 0x6b, 0x71, 0x51, > > + 0x4c, 0x31, 0x68, 0x65, 0x71, 0x52, 0x66, 0x66, 0x74, > 0x47, 0x57, 0x51, > > + 0x5a, 0x36, 0x78, 0x4e, 0x6a, 0x72, 0x30, 0x7a, 0x6f, > 0x51, 0x59, 0x73, > > + 0x0a, 0x34, 0x76, 0x69, 0x55, 0x46, 0x72, 0x7a, 0x2b, > 0x52, 0x76, 0x4b, > > + 0x43, 0x2f, 0x33, 0x69, 0x71, 0x57, 0x59, 0x78, 0x55, > 0x35, 0x4c, 0x6a, > > + 0x45, 0x74, 0x63, 0x5a, 0x4f, 0x2b, 0x53, 0x6d, 0x39, > 0x42, 0x4c, 0x62, > > + 0x66, 0x58, 0x49, 0x71, 0x56, 0x72, 0x53, 0x6a, 0x54, > 0x79, 0x58, 0x49, > > + 0x39, 0x70, 0x76, 0x78, 0x6f, 0x67, 0x50, 0x39, 0x38, > 0x6b, 0x2b, 0x6c, > > + 0x41, 0x66, 0x37, 0x47, 0x36, 0x0a, 0x75, 0x39, 0x2b, > 0x30, 0x31, 0x4d, > > + 0x47, 0x5a, 0x69, 0x36, 0x6b, 0x53, 0x73, 0x67, 0x48, > 0x57, 0x7a, 0x43, > > + 0x41, 0x49, 0x51, 0x75, 0x38, 0x72, 0x6a, 0x4d, 0x34, > 0x65, 0x74, 0x64, > > + 0x50, 0x62, 0x4a, 0x49, 0x77, 0x34, 0x65, 0x47, 0x6f, > 0x32, 0x45, 0x49, > > + 0x44, 0x45, 0x54, 0x61, 0x52, 0x70, 0x73, 0x76, 0x47, > 0x6a, 0x54, 0x6f, > > + 0x30, 0x51, 0x56, 0x69, 0x79, 0x79, 0x4a, 0x4f, 0x48, > 0x32, 0x0a, 0x61, > > + 0x32, 0x71, 0x69, 0x2f, 0x47, 0x7a, 0x2f, 0x64, 0x48, > 0x61, 0x62, 0x68, > > + 0x4d, 0x4e, 0x35, 0x4e, 0x53, 0x58, 0x56, 0x4d, 0x31, > 0x54, 0x2f, 0x6d, > > + 0x69, 0x6f, 0x74, 0x68, 0x78, 0x59, 0x72, 0x2f, 0x4a, > 0x69, 0x37, 0x6d, > > + 0x4e, 0x45, 0x75, 0x4a, 0x57, 0x38, 0x74, 0x6d, 0x75, > 0x55, 0x4b, 0x58, > > + 0x33, 0x66, 0x63, 0x39, 0x42, 0x39, 0x32, 0x51, 0x6e, > 0x54, 0x68, 0x43, > > + 0x69, 0x49, 0x2f, 0x0a, 0x79, 0x4f, 0x31, 0x32, 0x4c, > 0x46, 0x58, 0x38, > > + 0x74, 0x4b, 0x4a, 0x37, 0x4b, 0x7a, 0x6f, 0x6b, 0x36, > 0x44, 0x74, 0x6d, > > + 0x35, 0x73, 0x41, 0x74, 0x2b, 0x65, 0x4b, 0x76, 0x6f, > 0x61, 0x47, 0x62, > > + 0x75, 0x4a, 0x78, 0x62, 0x52, 0x63, 0x36, 0x63, 0x4d, > 0x58, 0x57, 0x46, > > + 0x36, 0x4d, 0x72, 0x4d, 0x30, 0x53, 0x78, 0x65, 0x4e, > 0x6b, 0x5a, 0x77, > > + 0x5a, 0x36, 0x6c, 0x62, 0x4d, 0x39, 0x63, 0x55, 0x0a, > 0x6c, 0x75, 0x34, > > + 0x4c, 0x56, 0x64, 0x34, 0x73, 0x56, 0x4c, 0x61, 0x76, > 0x68, 0x75, 0x32, > > + 0x58, 0x48, 0x48, 0x53, 0x56, 0x30, 0x32, 0x32, 0x6d, > 0x51, 0x72, 0x73, > > + 0x32, 0x69, 0x68, 0x74, 0x58, 0x44, 0x2b, 0x6c, 0x4d, > 0x63, 0x2f, 0x35, > > + 0x62, 0x54, 0x41, 0x55, 0x6b, 0x4b, 0x4f, 0x42, 0x73, > 0x43, 0x69, 0x4f, > > + 0x4b, 0x42, 0x56, 0x2b, 0x66, 0x70, 0x49, 0x62, 0x2b, > 0x6d, 0x44, 0x33, > > + 0x58, 0x0a, 0x39, 0x37, 0x66, 0x36, 0x54, 0x66, 0x68, > 0x37, 0x4f, 0x4f, > > + 0x6a, 0x74, 0x44, 0x79, 0x31, 0x6f, 0x52, 0x36, 0x70, > 0x68, 0x48, 0x47, > > + 0x6e, 0x73, 0x43, 0x78, 0x72, 0x53, 0x72, 0x64, 0x48, > 0x73, 0x2f, 0x34, > > + 0x33, 0x72, 0x61, 0x65, 0x42, 0x78, 0x59, 0x45, 0x41, > 0x42, 0x4e, 0x59, > > + 0x68, 0x54, 0x47, 0x57, 0x49, 0x4d, 0x4a, 0x6b, 0x50, > 0x63, 0x54, 0x53, > > + 0x73, 0x76, 0x77, 0x46, 0x37, 0x6d, 0x0a, 0x33, 0x6c, > 0x38, 0x6b, 0x44, > > + 0x50, 0x48, 0x43, 0x4e, 0x68, 0x6e, 0x6e, 0x42, 0x69, > 0x7a, 0x36, 0x2f, > > + 0x43, 0x38, 0x56, 0x31, 0x37, 0x78, 0x57, 0x34, 0x50, > 0x2b, 0x79, 0x71, > > + 0x4a, 0x78, 0x58, 0x63, 0x49, 0x53, 0x72, 0x7a, 0x57, > 0x53, 0x55, 0x72, > > + 0x34, 0x74, 0x71, 0x6b, 0x55, 0x58, 0x43, 0x57, 0x4c, > 0x43, 0x66, 0x76, > > + 0x57, 0x7a, 0x4e, 0x65, 0x5a, 0x34, 0x4f, 0x34, 0x34, > 0x54, 0x65, 0x0a, > > + 0x74, 0x31, 0x59, 0x65, 0x36, 0x77, 0x2b, 0x71, 0x4f, > 0x55, 0x38, 0x50, > > + 0x42, 0x68, 0x72, 0x65, 0x4d, 0x38, 0x75, 0x32, 0x32, > 0x42, 0x4f, 0x31, > > + 0x65, 0x2b, 0x44, 0x7a, 0x63, 0x74, 0x6c, 0x67, 0x43, > 0x43, 0x6c, 0x38, > > + 0x79, 0x69, 0x37, 0x6f, 0x43, 0x56, 0x74, 0x66, 0x75, > 0x59, 0x2f, 0x4c, > > + 0x72, 0x42, 0x61, 0x31, 0x74, 0x69, 0x43, 0x41, 0x37, > 0x6c, 0x34, 0x75, > > + 0x58, 0x6b, 0x73, 0x4c, 0x0a, 0x2b, 0x31, 0x51, 0x79, > 0x69, 0x4b, 0x31, > > + 0x6e, 0x43, 0x4f, 0x76, 0x74, 0x30, 0x46, 0x7a, 0x71, > 0x62, 0x71, 0x78, > > + 0x54, 0x37, 0x53, 0x35, 0x4c, 0x56, 0x33, 0x5a, 0x33, > 0x74, 0x34, 0x4a, > > + 0x46, 0x4f, 0x50, 0x62, 0x67, 0x63, 0x7a, 0x4e, 0x6b, > 0x58, 0x55, 0x2b, > > + 0x4f, 0x74, 0x50, 0x6b, 0x6e, 0x45, 0x45, 0x76, 0x67, > 0x57, 0x64, 0x76, > > + 0x31, 0x4f, 0x30, 0x6d, 0x52, 0x4a, 0x50, 0x31, 0x4e, > 0x0a, 0x71, 0x43, > > + 0x32, 0x33, 0x4a, 0x6a, 0x36, 0x38, 0x4c, 0x30, 0x46, > 0x63, 0x46, 0x4c, > > + 0x56, 0x56, 0x59, 0x76, 0x61, 0x44, 0x53, 0x76, 0x54, > 0x45, 0x64, 0x50, > > + 0x54, 0x34, 0x62, 0x2f, 0x7a, 0x66, 0x64, 0x36, 0x51, > 0x52, 0x6b, 0x38, > > + 0x70, 0x4d, 0x36, 0x77, 0x66, 0x61, 0x32, 0x50, 0x63, > 0x75, 0x57, 0x65, > > + 0x79, 0x38, 0x48, 0x38, 0x76, 0x4e, 0x4b, 0x67, 0x2f, > 0x65, 0x76, 0x34, > > + 0x77, 0x37, 0x0a, 0x6b, 0x6f, 0x6f, 0x4e, 0x59, 0x64, > 0x77, 0x59, 0x69, > > + 0x6c, 0x37, 0x41, 0x50, 0x76, 0x42, 0x50, 0x4d, 0x63, > 0x6c, 0x51, 0x76, > > + 0x63, 0x64, 0x71, 0x7a, 0x52, 0x7a, 0x4a, 0x6e, 0x4a, > 0x74, 0x37, 0x70, > > + 0x35, 0x7a, 0x69, 0x2b, 0x2b, 0x4c, 0x43, 0x59, 0x55, > 0x4d, 0x3d, 0x0a, > > + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, > 0x52, 0x53, 0x41, > > + 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x20, > 0x4b, 0x45, 0x59, > > + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a > > + }; > > + > > +// > > +// Password for private key retrieving from encrypted > PEM ("TestKeyPem"). > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *PemPass = > "client"; > > + > > +// > > +// Test CA X509 Certificate for X509 Verification > Routine (Generated by OpenSSL utility). > > +// $ openssl req -x509 -days 10000 -key TestKeyPem -out > TestCACert -outform DER -subj > "/C=US/ST=WA/L=Seattle/O=Tianocore/OU=EDK2/CN=UEFI" > > +// use password from PemPass variable in this file > > +// $ xxd --include TestCACert > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TestCACert[] > = { > > + 0x30, 0x82, 0x02, 0x98, 0x30, 0x82, 0x02, 0x01, 0xa0, > 0x03, 0x02, 0x01, > > + 0x02, 0x02, 0x14, 0x39, 0xde, 0x9e, 0xce, 0x3a, 0x36, > 0x11, 0x38, 0x6f, > > + 0x64, 0xb4, 0x69, 0xa7, 0x93, 0xdd, 0xff, 0xbd, 0x3e, > 0x75, 0x6a, 0x30, > > + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, > 0x01, 0x01, 0x0b, > > + 0x05, 0x00, 0x30, 0x5e, 0x31, 0x0b, 0x30, 0x09, 0x06, > 0x03, 0x55, 0x04, > > + 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, > 0x06, 0x03, 0x55, > > + 0x04, 0x08, 0x0c, 0x02, 0x57, 0x41, 0x31, 0x10, 0x30, > 0x0e, 0x06, 0x03, > > + 0x55, 0x04, 0x07, 0x0c, 0x07, 0x53, 0x65, 0x61, 0x74, > 0x74, 0x6c, 0x65, > > + 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, > 0x0c, 0x09, 0x54, > > + 0x69, 0x61, 0x6e, 0x6f, 0x63, 0x6f, 0x72, 0x65, 0x31, > 0x0d, 0x30, 0x0b, > > + 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x04, 0x45, 0x44, > 0x4b, 0x32, 0x31, > > + 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, > 0x04, 0x55, 0x45, > > + 0x46, 0x49, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x30, 0x30, > 0x36, 0x32, 0x39, > > + 0x32, 0x32, 0x34, 0x37, 0x33, 0x36, 0x5a, 0x17, 0x0d, > 0x34, 0x37, 0x31, > > + 0x31, 0x31, 0x35, 0x32, 0x32, 0x34, 0x37, 0x33, 0x36, > 0x5a, 0x30, 0x5e, > > + 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, > 0x13, 0x02, 0x55, > > + 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, > 0x08, 0x0c, 0x02, > > + 0x57, 0x41, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, > 0x04, 0x07, 0x0c, > > + 0x07, 0x53, 0x65, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x31, > 0x12, 0x30, 0x10, > > + 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x54, 0x69, > 0x61, 0x6e, 0x6f, > > + 0x63, 0x6f, 0x72, 0x65, 0x31, 0x0d, 0x30, 0x0b, 0x06, > 0x03, 0x55, 0x04, > > + 0x0b, 0x0c, 0x04, 0x45, 0x44, 0x4b, 0x32, 0x31, 0x0d, > 0x30, 0x0b, 0x06, > > + 0x03, 0x55, 0x04, 0x03, 0x0c, 0x04, 0x55, 0x45, 0x46, > 0x49, 0x30, 0x81, > > + 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, > 0xf7, 0x0d, 0x01, > > + 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, > 0x81, 0x89, 0x02, > > + 0x81, 0x81, 0x00, 0x9f, 0xef, 0x1b, 0x46, 0x45, 0x55, > 0x33, 0x4b, 0xee, > > + 0x95, 0x14, 0xd3, 0x5a, 0x3e, 0xd9, 0x29, 0xfb, 0xd9, > 0x29, 0x4e, 0x8b, > > + 0xf1, 0xf5, 0x68, 0x7c, 0x58, 0x86, 0x0c, 0xda, 0xd7, > 0xe0, 0xd2, 0x9a, > > + 0xe8, 0x37, 0x16, 0x4d, 0x54, 0x92, 0x18, 0x20, 0x4c, > 0x09, 0xa1, 0xcf, > > + 0xe1, 0xaa, 0x7a, 0x5a, 0x64, 0x7e, 0x5c, 0xeb, 0x4e, > 0x15, 0x8e, 0x40, > > + 0xd1, 0xcb, 0x7d, 0x01, 0x71, 0x15, 0x11, 0xd2, 0xc7, > 0xdb, 0x6b, 0x00, > > + 0xdc, 0x02, 0xcb, 0x5a, 0x6d, 0x2b, 0x2a, 0x75, 0xb6, > 0x3f, 0xec, 0xc1, > > + 0x9d, 0xbf, 0xda, 0xe5, 0x3a, 0x77, 0x4b, 0x21, 0x1c, > 0x99, 0x42, 0x84, > > + 0x5e, 0x27, 0x53, 0x9b, 0xe6, 0xc1, 0xa1, 0x95, 0x58, > 0xba, 0xbe, 0x62, > > + 0x58, 0xd5, 0x09, 0xa8, 0xe6, 0xb6, 0x1b, 0xb1, 0x18, > 0x28, 0x13, 0xc7, > > + 0x89, 0x1c, 0x68, 0xce, 0x15, 0xaf, 0x2e, 0x68, 0xac, > 0x1c, 0xf7, 0x02, > > + 0x03, 0x01, 0x00, 0x01, 0xa3, 0x53, 0x30, 0x51, 0x30, > 0x1d, 0x06, 0x03, > > + 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x50, 0xe5, > 0x05, 0xa3, 0x6e, > > + 0x8f, 0x00, 0xf7, 0x93, 0x30, 0xe5, 0x25, 0x20, 0xdc, > 0x8a, 0xc3, 0xad, > > + 0x14, 0x6d, 0x90, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, > 0x23, 0x04, 0x18, > > + 0x30, 0x16, 0x80, 0x14, 0x50, 0xe5, 0x05, 0xa3, 0x6e, > 0x8f, 0x00, 0xf7, > > + 0x93, 0x30, 0xe5, 0x25, 0x20, 0xdc, 0x8a, 0xc3, 0xad, > 0x14, 0x6d, 0x90, > > + 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, > 0xff, 0x04, 0x05, > > + 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, > 0x2a, 0x86, 0x48, > > + 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, > 0x81, 0x81, 0x00, > > + 0x8e, 0xe4, 0x27, 0x42, 0x16, 0x6e, 0xbd, 0x28, 0x47, > 0x09, 0x99, 0xc1, > > + 0x55, 0x02, 0x82, 0x1a, 0xe1, 0xd0, 0xf3, 0xef, 0x4d, > 0xaf, 0x30, 0x9a, > > + 0x29, 0x4b, 0x74, 0x03, 0x6a, 0x95, 0x28, 0xf1, 0xbe, > 0x62, 0x68, 0x9f, > > + 0x82, 0x59, 0x7a, 0x49, 0x91, 0xb6, 0xaf, 0x6b, 0x23, > 0x30, 0xb4, 0xf4, > > + 0xdd, 0xfa, 0x30, 0x3f, 0xb6, 0xed, 0x74, 0x3f, 0x91, > 0xe8, 0xd7, 0x84, > > + 0x1a, 0xf3, 0xc6, 0x3d, 0xd8, 0x59, 0x8d, 0x68, 0x6e, > 0xb3, 0x66, 0x9e, > > + 0xe8, 0xeb, 0x1a, 0x8b, 0x1e, 0x92, 0x71, 0x73, 0x8c, > 0x4f, 0x63, 0xce, > > + 0x71, 0x7b, 0x97, 0x3b, 0x59, 0xd2, 0x9b, 0xe4, 0xd0, > 0xef, 0x31, 0x9f, > > + 0x0d, 0x61, 0x27, 0x97, 0x9d, 0xe8, 0xe0, 0xcd, 0x8d, > 0xc1, 0x4d, 0xad, > > + 0xf7, 0x3a, 0x8d, 0xb8, 0x86, 0x8c, 0x23, 0x1d, 0x4c, > 0x02, 0x5c, 0x53, > > + 0x46, 0x84, 0xb2, 0x97, 0x0c, 0xd3, 0x35, 0x6b > > +}; > > + > > +// > > +// X509 Cert Data for RSA Public Key Retrieving and > X509 Verification (Generated by OpenSSL utility). > > +// $ openssl req -new -key TestKeyPem -out TestCertCsr > -subj > "/C=US/ST=WA/L=Seattle/O=Tianocore/OU=EDK2CHILD/CN=UEFI" > > +// $ openssl x509 -days 10000 -CA TestCACert.pem -CAkey > TestKeyPem -req -out TestCert -set_serial 3432 --outform > DER -in TestCertCsr > > +// password should be in the PemPass variable > > +// $ xxd --include TestCert > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TestCert[] = > { > > + 0x30, 0x82, 0x02, 0x31, 0x30, 0x82, 0x01, 0x9a, 0x02, > 0x02, 0x0d, 0x68, > > + 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, > 0x0d, 0x01, 0x01, > > + 0x0b, 0x05, 0x00, 0x30, 0x5e, 0x31, 0x0b, 0x30, 0x09, > 0x06, 0x03, 0x55, > > + 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, 0x30, > 0x09, 0x06, 0x03, > > + 0x55, 0x04, 0x08, 0x0c, 0x02, 0x57, 0x41, 0x31, 0x10, > 0x30, 0x0e, 0x06, > > + 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x53, 0x65, 0x61, > 0x74, 0x74, 0x6c, > > + 0x65, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, > 0x0a, 0x0c, 0x09, > > + 0x54, 0x69, 0x61, 0x6e, 0x6f, 0x63, 0x6f, 0x72, 0x65, > 0x31, 0x0d, 0x30, > > + 0x0b, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x04, 0x45, > 0x44, 0x4b, 0x32, > > + 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x03, > 0x0c, 0x04, 0x55, > > + 0x45, 0x46, 0x49, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x30, > 0x30, 0x36, 0x32, > > + 0x39, 0x32, 0x33, 0x31, 0x35, 0x33, 0x36, 0x5a, 0x17, > 0x0d, 0x34, 0x37, > > + 0x31, 0x31, 0x31, 0x35, 0x32, 0x33, 0x31, 0x35, 0x33, > 0x36, 0x5a, 0x30, > > + 0x63, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, > 0x06, 0x13, 0x02, > > + 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, > 0x04, 0x08, 0x0c, > > + 0x02, 0x57, 0x41, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, > 0x55, 0x04, 0x07, > > + 0x0c, 0x07, 0x53, 0x65, 0x61, 0x74, 0x74, 0x6c, 0x65, > 0x31, 0x12, 0x30, > > + 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x54, > 0x69, 0x61, 0x6e, > > + 0x6f, 0x63, 0x6f, 0x72, 0x65, 0x31, 0x12, 0x30, 0x10, > 0x06, 0x03, 0x55, > > + 0x04, 0x0b, 0x0c, 0x09, 0x45, 0x44, 0x4b, 0x32, 0x43, > 0x48, 0x49, 0x4c, > > + 0x44, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, > 0x03, 0x0c, 0x04, > > + 0x55, 0x45, 0x46, 0x49, 0x30, 0x81, 0x9f, 0x30, 0x0d, > 0x06, 0x09, 0x2a, > > + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, > 0x00, 0x03, 0x81, > > + 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, > 0x9f, 0xef, 0x1b, > > + 0x46, 0x45, 0x55, 0x33, 0x4b, 0xee, 0x95, 0x14, 0xd3, > 0x5a, 0x3e, 0xd9, > > + 0x29, 0xfb, 0xd9, 0x29, 0x4e, 0x8b, 0xf1, 0xf5, 0x68, > 0x7c, 0x58, 0x86, > > + 0x0c, 0xda, 0xd7, 0xe0, 0xd2, 0x9a, 0xe8, 0x37, 0x16, > 0x4d, 0x54, 0x92, > > + 0x18, 0x20, 0x4c, 0x09, 0xa1, 0xcf, 0xe1, 0xaa, 0x7a, > 0x5a, 0x64, 0x7e, > > + 0x5c, 0xeb, 0x4e, 0x15, 0x8e, 0x40, 0xd1, 0xcb, 0x7d, > 0x01, 0x71, 0x15, > > + 0x11, 0xd2, 0xc7, 0xdb, 0x6b, 0x00, 0xdc, 0x02, 0xcb, > 0x5a, 0x6d, 0x2b, > > + 0x2a, 0x75, 0xb6, 0x3f, 0xec, 0xc1, 0x9d, 0xbf, 0xda, > 0xe5, 0x3a, 0x77, > > + 0x4b, 0x21, 0x1c, 0x99, 0x42, 0x84, 0x5e, 0x27, 0x53, > 0x9b, 0xe6, 0xc1, > > + 0xa1, 0x95, 0x58, 0xba, 0xbe, 0x62, 0x58, 0xd5, 0x09, > 0xa8, 0xe6, 0xb6, > > + 0x1b, 0xb1, 0x18, 0x28, 0x13, 0xc7, 0x89, 0x1c, 0x68, > 0xce, 0x15, 0xaf, > > + 0x2e, 0x68, 0xac, 0x1c, 0xf7, 0x02, 0x03, 0x01, 0x00, > 0x01, 0x30, 0x0d, > > + 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, > 0x01, 0x0b, 0x05, > > + 0x00, 0x03, 0x81, 0x81, 0x00, 0x0d, 0xa4, 0x18, 0xa2, > 0xb6, 0x09, 0xe1, > > + 0x77, 0x22, 0x97, 0x46, 0x29, 0x1b, 0xd8, 0x67, 0x0a, > 0xc0, 0x91, 0x36, > > + 0x53, 0xe1, 0x4c, 0x73, 0x1b, 0xc1, 0x90, 0x6d, 0x98, > 0x46, 0x7e, 0x65, > > + 0x71, 0x1c, 0xf0, 0x62, 0x9f, 0x9e, 0x62, 0x0b, 0x8b, > 0x73, 0x35, 0x4c, > > + 0x2d, 0xc3, 0x5d, 0x38, 0x22, 0xfe, 0x43, 0x0f, 0xf2, > 0x57, 0x17, 0x75, > > + 0xa8, 0x76, 0x79, 0xab, 0x4e, 0x33, 0xa5, 0x91, 0xbd, > 0x55, 0x5b, 0xc0, > > + 0x7e, 0xfb, 0x1d, 0xc9, 0xf3, 0x5f, 0x12, 0x6f, 0x7c, > 0xdc, 0x24, 0x5a, > > + 0x84, 0x16, 0x28, 0x5b, 0xf9, 0xcc, 0x8b, 0xfe, 0x11, > 0xe6, 0x29, 0xcf, > > + 0xac, 0x90, 0x66, 0xc0, 0x70, 0x25, 0xf8, 0x71, 0xdb, > 0x29, 0xcb, 0x6b, > > + 0x10, 0xa7, 0xbe, 0x3e, 0x9d, 0x61, 0xd8, 0x04, 0xe0, > 0x71, 0x63, 0x83, > > + 0xa3, 0xca, 0x26, 0x6d, 0x7f, 0xf3, 0xaa, 0x8e, 0xb2, > 0x66, 0x98, 0x41, > > + 0xd6 > > +}; > > + > > +// > > +// Message Hash for Signing & Verification Validation. > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 MsgHash[] = { > > + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, > 0x09, > > + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, > 0x09 > > + }; > > + > > +// > > +// Payload for PKCS#7 Signing & Verification > Validation. > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *Payload = > "Payload Data for PKCS#7 Signing"; > > + > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyRsaCertPkcs1SignVerify ( > > + IN UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + BOOLEAN Status; > > + VOID *RsaPrivKey; > > + VOID *RsaPubKey; > > + UINT8 *Signature; > > + UINTN SigSize; > > + UINT8 *Subject; > > + UINTN SubjectSize; > > + RETURN_STATUS ReturnStatus; > > + CHAR8 CommonName[64]; > > + UINTN CommonNameSize; > > + CHAR8 OrgName[64]; > > + UINTN OrgNameSize; > > + > > + // > > + // Retrieve RSA private key from encrypted PEM data. > > + // > > + Status = RsaGetPrivateKeyFromPem (TestKeyPem, sizeof > (TestKeyPem), PemPass, &RsaPrivKey); > > + UT_ASSERT_TRUE (Status); > > + > > + // > > + // Retrieve RSA public key from X509 Certificate. > > + // > > + RsaPubKey = NULL; > > + Status = RsaGetPublicKeyFromX509 (TestCert, sizeof > (TestCert), &RsaPubKey); > > + UT_ASSERT_TRUE (Status); > > + > > + // > > + // Generate RSA PKCS#1 Signature. > > + // > > + SigSize = 0; > > + Status = RsaPkcs1Sign (RsaPrivKey, MsgHash, > SHA1_DIGEST_SIZE, NULL, &SigSize); > > + UT_ASSERT_FALSE (Status); > > + UT_ASSERT_NOT_EQUAL (SigSize, 0); > > + > > + Signature = AllocatePool (SigSize); > > + Status = RsaPkcs1Sign (RsaPrivKey, MsgHash, > SHA1_DIGEST_SIZE, Signature, &SigSize); > > + UT_ASSERT_TRUE (Status); > > + > > + // > > + // Verify RSA PKCS#1-encoded Signature. > > + // > > + Status = RsaPkcs1Verify (RsaPubKey, MsgHash, > SHA1_DIGEST_SIZE, Signature, SigSize); > > + UT_ASSERT_TRUE (Status); > > + > > + // > > + // X509 Certificate Subject Retrieving. > > + // > > + SubjectSize = 0; > > + Status = X509GetSubjectName (TestCert, sizeof > (TestCert), NULL, &SubjectSize); > > + Subject = (UINT8 *)AllocatePool (SubjectSize); > > + Status = X509GetSubjectName (TestCert, sizeof > (TestCert), Subject, &SubjectSize); > > + UT_ASSERT_TRUE (Status); > > + > > + // > > + // Get CommonName from X509 Certificate Subject > > + // > > + CommonNameSize = 64; > > + ZeroMem (CommonName, CommonNameSize); > > + ReturnStatus = X509GetCommonName (TestCert, sizeof > (TestCert), CommonName, &CommonNameSize); > > + UT_ASSERT_NOT_EFI_ERROR (ReturnStatus); > > + > > + UT_ASSERT_EQUAL (CommonNameSize, 5); > > + UT_ASSERT_MEM_EQUAL (CommonName, "UEFI", 5); > > + > > + OrgNameSize = 64; > > + ZeroMem (OrgName, OrgNameSize); > > + ReturnStatus = X509GetOrganizationName (TestCert, > sizeof (TestCert), OrgName, &OrgNameSize); > > + UT_ASSERT_NOT_EFI_ERROR (ReturnStatus); > > + > > + UT_ASSERT_EQUAL (OrgNameSize, 10); > > + UT_ASSERT_MEM_EQUAL (OrgName, "Tianocore", 10); > > + > > + // > > + // X509 Certificate Verification. > > + // > > + Status = X509VerifyCert (TestCert, sizeof (TestCert), > TestCACert, sizeof (TestCACert)); > > + UT_ASSERT_TRUE (Status); > > + > > + // > > + // Release Resources. > > + // > > + RsaFree (RsaPubKey); > > + RsaFree (RsaPrivKey); > > + FreePool (Signature); > > + FreePool (Subject); > > + > > + return UNIT_TEST_PASSED; > > +} > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyPkcs7SignVerify ( > > + IN UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + BOOLEAN Status; > > + UINT8 *P7SignedData; > > + UINTN P7SignedDataSize; > > + UINT8 *SignCert; > > + > > + P7SignedData = NULL; > > + SignCert = NULL; > > + > > + // > > + // Construct Signer Certificate from RAW data. > > + // > > + Status = X509ConstructCertificate (TestCert, sizeof > (TestCert), (UINT8 **) &SignCert); > > + UT_ASSERT_TRUE (Status); > > + UT_ASSERT_NOT_NULL (SignCert); > > + > > + // > > + // Create PKCS#7 signedData on Payload. > > + // Note: Caller should release P7SignedData manually. > > + // > > + Status = Pkcs7Sign ( > > + TestKeyPem, > > + sizeof (TestKeyPem), > > + (CONST UINT8 *) PemPass, > > + (UINT8 *) Payload, > > + AsciiStrLen (Payload), > > + SignCert, > > + NULL, > > + &P7SignedData, > > + &P7SignedDataSize > > + ); > > + UT_ASSERT_TRUE (Status); > > + UT_ASSERT_NOT_EQUAL (P7SignedDataSize, 0); > > + > > + Status = Pkcs7Verify ( > > + P7SignedData, > > + P7SignedDataSize, > > + TestCACert, > > + sizeof (TestCACert), > > + (UINT8 *) Payload, > > + AsciiStrLen (Payload) > > + ); > > + UT_ASSERT_TRUE (Status); > > + > > + if (P7SignedData != NULL) { > > + FreePool (P7SignedData); > > + } > > + if (SignCert != NULL) { > > + X509Free (SignCert); > > + } > > + > > + return UNIT_TEST_PASSED; > > +} > > + > > +TEST_DESC mRsaCertTest[] = { > > + // > > + // -----Description-------------------------------- > ------Class----------------------Function--------------- > --Pre---Post--Context > > + // > > + {"TestVerifyRsaCertPkcs1SignVerify()", > "CryptoPkg.BaseCryptLib.RsaCert", > TestVerifyRsaCertPkcs1SignVerify, NULL, NULL, NULL}, > > +}; > > + > > +UINTN mRsaCertTestNum = ARRAY_SIZE(mRsaCertTest); > > + > > +TEST_DESC mPkcs7Test[] = { > > + // > > + // -----Description-------------------------------- > ------Class----------------------Function--------------- > --Pre---Post--Context > > + // > > + {"TestVerifyPkcs7SignVerify()", > "CryptoPkg.BaseCryptLib.Pkcs7", > TestVerifyPkcs7SignVerify, NULL, NULL, NULL}, > > +}; > > + > > +UINTN mPkcs7TestNum = ARRAY_SIZE(mPkcs7Test); > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests. > c > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests. > c > new file mode 100644 > index 000000000000..7ce20d2e778f > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests. > c > @@ -0,0 +1,310 @@ > +/** @file > > + Application for RSA Primitives Validation. > > + > > +Copyright (c) 2010, Intel Corporation. All rights > reserved.<BR> > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include "TestBaseCryptLib.h" > > + > > +#define RSA_MODULUS_LENGTH 512 > > + > > +// > > +// RSA PKCS#1 Validation Data from OpenSSL > "Fips_rsa_selftest.c" > > +// > > + > > +// > > +// Public Modulus of RSA Key > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 RsaN[] = { > > + 0xBB, 0xF8, 0x2F, 0x09, 0x06, 0x82, 0xCE, 0x9C, 0x23, > 0x38, 0xAC, 0x2B, 0x9D, 0xA8, 0x71, 0xF7, > > + 0x36, 0x8D, 0x07, 0xEE, 0xD4, 0x10, 0x43, 0xA4, 0x40, > 0xD6, 0xB6, 0xF0, 0x74, 0x54, 0xF5, 0x1F, > > + 0xB8, 0xDF, 0xBA, 0xAF, 0x03, 0x5C, 0x02, 0xAB, 0x61, > 0xEA, 0x48, 0xCE, 0xEB, 0x6F, 0xCD, 0x48, > > + 0x76, 0xED, 0x52, 0x0D, 0x60, 0xE1, 0xEC, 0x46, 0x19, > 0x71, 0x9D, 0x8A, 0x5B, 0x8B, 0x80, 0x7F, > > + 0xAF, 0xB8, 0xE0, 0xA3, 0xDF, 0xC7, 0x37, 0x72, 0x3E, > 0xE6, 0xB4, 0xB7, 0xD9, 0x3A, 0x25, 0x84, > > + 0xEE, 0x6A, 0x64, 0x9D, 0x06, 0x09, 0x53, 0x74, 0x88, > 0x34, 0xB2, 0x45, 0x45, 0x98, 0x39, 0x4E, > > + 0xE0, 0xAA, 0xB1, 0x2D, 0x7B, 0x61, 0xA5, 0x1F, 0x52, > 0x7A, 0x9A, 0x41, 0xF6, 0xC1, 0x68, 0x7F, > > + 0xE2, 0x53, 0x72, 0x98, 0xCA, 0x2A, 0x8F, 0x59, 0x46, > 0xF8, 0xE5, 0xFD, 0x09, 0x1D, 0xBD, 0xCB > > + }; > > + > > +// > > +// Public Exponent of RSA Key > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 RsaE[] = { > 0x11 }; > > + > > +// > > +// Private Exponent of RSA Key > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 RsaD[] = { > > + 0xA5, 0xDA, 0xFC, 0x53, 0x41, 0xFA, 0xF2, 0x89, 0xC4, > 0xB9, 0x88, 0xDB, 0x30, 0xC1, 0xCD, 0xF8, > > + 0x3F, 0x31, 0x25, 0x1E, 0x06, 0x68, 0xB4, 0x27, 0x84, > 0x81, 0x38, 0x01, 0x57, 0x96, 0x41, 0xB2, > > + 0x94, 0x10, 0xB3, 0xC7, 0x99, 0x8D, 0x6B, 0xC4, 0x65, > 0x74, 0x5E, 0x5C, 0x39, 0x26, 0x69, 0xD6, > > + 0x87, 0x0D, 0xA2, 0xC0, 0x82, 0xA9, 0x39, 0xE3, 0x7F, > 0xDC, 0xB8, 0x2E, 0xC9, 0x3E, 0xDA, 0xC9, > > + 0x7F, 0xF3, 0xAD, 0x59, 0x50, 0xAC, 0xCF, 0xBC, 0x11, > 0x1C, 0x76, 0xF1, 0xA9, 0x52, 0x94, 0x44, > > + 0xE5, 0x6A, 0xAF, 0x68, 0xC5, 0x6C, 0x09, 0x2C, 0xD3, > 0x8D, 0xC3, 0xBE, 0xF5, 0xD2, 0x0A, 0x93, > > + 0x99, 0x26, 0xED, 0x4F, 0x74, 0xA1, 0x3E, 0xDD, 0xFB, > 0xE1, 0xA1, 0xCE, 0xCC, 0x48, 0x94, 0xAF, > > + 0x94, 0x28, 0xC2, 0xB7, 0xB8, 0x88, 0x3F, 0xE4, 0x46, > 0x3A, 0x4B, 0xC8, 0x5B, 0x1C, 0xB3, 0xC1 > > + }; > > + > > +// > > +// Known Answer Test (KAT) Data for RSA PKCS#1 Signing > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 RsaSignData[] > = "OpenSSL FIPS 140-2 Public Key RSA KAT"; > > + > > +// > > +// Known Signature for the above message, under SHA-1 > Digest > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > RsaPkcs1Signature[] = { > > + 0x71, 0xEE, 0x1A, 0xC0, 0xFE, 0x01, 0x93, 0x54, 0x79, > 0x5C, 0xF2, 0x4C, 0x4A, 0xFD, 0x1A, 0x05, > > + 0x8F, 0x64, 0xB1, 0x6D, 0x61, 0x33, 0x8D, 0x9B, 0xE7, > 0xFD, 0x60, 0xA3, 0x83, 0xB5, 0xA3, 0x51, > > + 0x55, 0x77, 0x90, 0xCF, 0xDC, 0x22, 0x37, 0x8E, 0xD0, > 0xE1, 0xAE, 0x09, 0xE3, 0x3D, 0x1E, 0xF8, > > + 0x80, 0xD1, 0x8B, 0xC2, 0xEC, 0x0A, 0xD7, 0x6B, 0x88, > 0x8B, 0x8B, 0xA1, 0x20, 0x22, 0xBE, 0x59, > > + 0x5B, 0xE0, 0x23, 0x24, 0xA1, 0x49, 0x30, 0xBA, 0xA9, > 0x9E, 0xE8, 0xB1, 0x8A, 0x62, 0x16, 0xBF, > > + 0x4E, 0xCA, 0x2E, 0x4E, 0xBC, 0x29, 0xA8, 0x67, 0x13, > 0xB7, 0x9F, 0x1D, 0x04, 0x44, 0xE5, 0x5F, > > + 0x35, 0x07, 0x11, 0xBC, 0xED, 0x19, 0x37, 0x21, 0xCF, > 0x23, 0x48, 0x1F, 0x72, 0x05, 0xDE, 0xE6, > > + 0xE8, 0x7F, 0x33, 0x8A, 0x76, 0x4B, 0x2F, 0x95, 0xDF, > 0xF1, 0x5F, 0x84, 0x80, 0xD9, 0x46, 0xB4 > > + }; > > + > > +// > > +// Default public key 0x10001 = 65537 > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 > DefaultPublicKey[] = { > > + 0x01, 0x00, 0x01 > > +}; > > + > > +VOID *mRsa; > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyRsaPreReq ( > > + UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + mRsa = RsaNew (); > > + > > + if (mRsa == NULL) { > > + return UNIT_TEST_ERROR_TEST_FAILED; > > + } > > + > > + return UNIT_TEST_PASSED; > > +} > > + > > +VOID > > +EFIAPI > > +TestVerifyRsaCleanUp ( > > + UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + if (mRsa != NULL) { > > + RsaFree (mRsa); > > + mRsa = NULL; > > + } > > +} > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyRsaSetGetKeyComponents ( > > + IN UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + BOOLEAN Status; > > + UINTN KeySize; > > + UINT8 *KeyBuffer; > > + > > + // > > + // Set/Get RSA Key Components > > + // > > + > > + // > > + // Set/Get RSA Key N > > + // > > + Status = RsaSetKey (mRsa, RsaKeyN, RsaN, sizeof > (RsaN)); > > + UT_ASSERT_TRUE (Status); > > + > > + KeySize = 0; > > + Status = RsaGetKey (mRsa, RsaKeyN, NULL, &KeySize); > > + UT_ASSERT_FALSE (Status); > > + UT_ASSERT_EQUAL (KeySize, sizeof (RsaN)); > > + > > + KeyBuffer = AllocatePool (KeySize); > > + Status = RsaGetKey (mRsa, RsaKeyN, KeyBuffer, > &KeySize); > > + UT_ASSERT_TRUE (Status); > > + UT_ASSERT_EQUAL (KeySize, sizeof (RsaN)); > > + > > + UT_ASSERT_MEM_EQUAL (KeyBuffer, RsaN, KeySize); > > + > > + FreePool (KeyBuffer); > > + > > + // > > + // Set/Get RSA Key E > > + // > > + Status = RsaSetKey (mRsa, RsaKeyE, RsaE, sizeof > (RsaE)); > > + UT_ASSERT_TRUE (Status); > > + > > + KeySize = 0; > > + Status = RsaGetKey (mRsa, RsaKeyE, NULL, &KeySize); > > + UT_ASSERT_FALSE (Status); > > + UT_ASSERT_EQUAL (KeySize, sizeof (RsaE)); > > + > > + KeyBuffer = AllocatePool (KeySize); > > + Status = RsaGetKey (mRsa, RsaKeyE, KeyBuffer, > &KeySize); > > + UT_ASSERT_TRUE (Status); > > + UT_ASSERT_EQUAL (KeySize, sizeof (RsaE)); > > + > > + UT_ASSERT_MEM_EQUAL (KeyBuffer, RsaE, KeySize); > > + > > + FreePool (KeyBuffer); > > + > > + // > > + // Clear/Get RSA Key Components > > + // > > + > > + // > > + // Clear/Get RSA Key N > > + // > > + Status = RsaSetKey (mRsa, RsaKeyN, NULL, 0); > > + UT_ASSERT_TRUE (Status); > > + > > + KeySize = 1; > > + Status = RsaGetKey (mRsa, RsaKeyN, NULL, &KeySize); > > + UT_ASSERT_TRUE (Status); > > + UT_ASSERT_EQUAL (KeySize, 0); > > + > > + // > > + // Clear/Get RSA Key E > > + // > > + Status = RsaSetKey (mRsa, RsaKeyE, NULL, 0); > > + UT_ASSERT_TRUE (Status); > > + > > + KeySize = 1; > > + Status = RsaGetKey (mRsa, RsaKeyE, NULL, &KeySize); > > + UT_ASSERT_TRUE (Status); > > + UT_ASSERT_EQUAL (KeySize, 0); > > + > > + return UNIT_TEST_PASSED; > > +} > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyRsaGenerateKeyComponents ( > > + IN UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + BOOLEAN Status; > > + UINTN KeySize; > > + UINT8 *KeyBuffer; > > + > > + // > > + // Generate RSA Key Components > > + // > > + > > + Status = RsaGenerateKey (mRsa, RSA_MODULUS_LENGTH, > NULL, 0); > > + UT_ASSERT_TRUE (Status); > > + > > + KeySize = RSA_MODULUS_LENGTH / 8; > > + KeyBuffer = AllocatePool (KeySize); > > + Status = RsaGetKey (mRsa, RsaKeyE, KeyBuffer, > &KeySize); > > + UT_ASSERT_TRUE (Status); > > + UT_ASSERT_EQUAL (KeySize, 3); > > + UT_ASSERT_MEM_EQUAL (KeyBuffer, DefaultPublicKey, 3); > > + > > + KeySize = RSA_MODULUS_LENGTH / 8; > > + Status = RsaGetKey (mRsa, RsaKeyN, KeyBuffer, > &KeySize); > > + UT_ASSERT_TRUE (Status); > > + UT_ASSERT_EQUAL (KeySize, RSA_MODULUS_LENGTH / 8); > > + > > + Status = RsaCheckKey (mRsa); > > + UT_ASSERT_TRUE (Status); > > + > > + // > > + // Check invalid RSA key components > > + // > > + Status = RsaSetKey (mRsa, RsaKeyN, RsaN, sizeof > (RsaN)); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = RsaCheckKey (mRsa); > > + UT_ASSERT_FALSE (Status); > > + > > + Status = RsaSetKey (mRsa, RsaKeyN, KeyBuffer, > KeySize); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = RsaCheckKey (mRsa); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = RsaSetKey (mRsa, RsaKeyE, RsaE, sizeof > (RsaE)); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = RsaCheckKey (mRsa); > > + UT_ASSERT_FALSE (Status); > > + > > + FreePool (KeyBuffer); > > + > > + return UNIT_TEST_PASSED; > > +} > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyRsaPkcs1SignVerify ( > > + IN UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + UINT8 HashValue[SHA1_DIGEST_SIZE]; > > + UINTN HashSize; > > + UINT8 *Signature; > > + UINTN SigSize; > > + BOOLEAN Status; > > + > > + // > > + // SHA-1 Digest Message for PKCS#1 Signature > > + // > > + HashSize = SHA1_DIGEST_SIZE; > > + ZeroMem (HashValue, HashSize); > > + > > + Status = Sha1HashAll (RsaSignData, AsciiStrLen > (RsaSignData), HashValue); > > + UT_ASSERT_TRUE (Status); > > + > > + // > > + // Sign RSA PKCS#1-encoded Signature > > + // > > + > > + Status = RsaSetKey (mRsa, RsaKeyN, RsaN, sizeof > (RsaN)); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = RsaSetKey (mRsa, RsaKeyE, RsaE, sizeof > (RsaE)); > > + UT_ASSERT_TRUE (Status); > > + > > + Status = RsaSetKey (mRsa, RsaKeyD, RsaD, sizeof > (RsaD)); > > + UT_ASSERT_TRUE (Status); > > + > > + SigSize = 0; > > + Status = RsaPkcs1Sign (mRsa, HashValue, HashSize, > NULL, &SigSize); > > + UT_ASSERT_FALSE (Status); > > + UT_ASSERT_NOT_EQUAL (SigSize, 0); > > + > > + Signature = AllocatePool (SigSize); > > + Status = RsaPkcs1Sign (mRsa, HashValue, HashSize, > Signature, &SigSize); > > + UT_ASSERT_TRUE (Status); > > + UT_ASSERT_EQUAL (SigSize, sizeof > (RsaPkcs1Signature)); > > + > > + UT_ASSERT_MEM_EQUAL (Signature, RsaPkcs1Signature, > SigSize); > > + > > + // > > + // Verify RSA PKCS#1-encoded Signature > > + // > > + Status = RsaPkcs1Verify (mRsa, HashValue, HashSize, > Signature, SigSize); > > + UT_ASSERT_TRUE (Status); > > + > > + return UNIT_TEST_PASSED; > > +} > > + > > +TEST_DESC mRsaTest[] = { > > + // > > + // -----Description-------------------------------- > ------Class----------------------Function--------------- > ------------------Pre---------------------Post--------- > Context > > + // > > + {"TestVerifyRsaSetGetKeyComponents()", > "CryptoPkg.BaseCryptLib.Rsa", > TestVerifyRsaSetGetKeyComponents, > TestVerifyRsaPreReq, TestVerifyRsaCleanUp, NULL}, > > + {"TestVerifyRsaGenerateKeyComponents()", > "CryptoPkg.BaseCryptLib.Rsa", > TestVerifyRsaGenerateKeyComponents, > TestVerifyRsaPreReq, TestVerifyRsaCleanUp, NULL}, > > + {"TestVerifyRsaPkcs1SignVerify()", > "CryptoPkg.BaseCryptLib.Rsa", > TestVerifyRsaPkcs1SignVerify, > TestVerifyRsaPreReq, TestVerifyRsaCleanUp, NULL}, > > +}; > > + > > +UINTN mRsaTestNum = ARRAY_SIZE(mRsaTest); > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c > new file mode 100644 > index 000000000000..2a891ef8bcb0 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c > @@ -0,0 +1,335 @@ > +/** @file > > + Sample Implementation for RFC3161 Time Stamping > Verification. > > + > > +Copyright (c) 2014, Intel Corporation. All rights > reserved.<BR> > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include "TestBaseCryptLib.h" > > + > > +// > > +// Sample Authenticode Data with RFC3161 time stamping > signature. > > +// The data retrieved from one signed sample UEFI > image, which is generated by MSFT's signtool > > +// utility in conjunction with RFC3161 timestamping, as > the following command: > > +// signtool sign /ac <xxx.cer> / f <xxx.pfx> /p > <pass> /fd <digestAlg> > > +// /tr http://timestamp.comodoca.com/rfc3161 > sample.efi > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 > AuthenticodeWithTS[] = { > > + 0x30, 0x82, 0x0c, 0x00, 0x06, 0x09, 0x2a, 0x86, 0x48, > 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0, > > + 0x82, 0x0b, 0xf1, 0x30, 0x82, 0x0b, 0xed, 0x02, 0x01, > 0x01, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x09, > > + 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, > 0x05, 0x00, 0x30, 0x78, 0x06, 0x0a, 0x2b, > > + 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x04, > 0xa0, 0x6a, 0x30, 0x68, 0x30, 0x33, 0x06, > > + 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, > 0x01, 0x0f, 0x30, 0x25, 0x03, 0x01, 0x00, > > + 0xa0, 0x20, 0xa2, 0x1e, 0x80, 0x1c, 0x00, 0x3c, 0x00, > 0x3c, 0x00, 0x3c, 0x00, 0x4f, 0x00, 0x62, > > + 0x00, 0x73, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x65, 0x00, > 0x74, 0x00, 0x65, 0x00, 0x3e, 0x00, 0x3e, > > + 0x00, 0x3e, 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, > 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, > > + 0x01, 0x05, 0x00, 0x04, 0x20, 0x1e, 0x9e, 0x74, 0x31, > 0xe1, 0x3e, 0x51, 0x46, 0xab, 0xce, 0x10, > > + 0x0d, 0x7c, 0x38, 0x66, 0x34, 0xd4, 0xdd, 0x04, 0xa5, > 0xe7, 0x75, 0x40, 0xdd, 0x99, 0x73, 0xf3, > > + 0x2a, 0x54, 0x3e, 0xa8, 0x18, 0xa0, 0x82, 0x01, 0xee, > 0x30, 0x82, 0x01, 0xea, 0x30, 0x82, 0x01, > > + 0x57, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x2c, > 0x65, 0xcf, 0xcf, 0xdd, 0x61, 0x7b, 0xa4, > > + 0x41, 0xad, 0x26, 0x1b, 0x63, 0xce, 0x91, 0x0f, 0x30, > 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, > > + 0x1d, 0x05, 0x00, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, > 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x08, > > + 0x54, 0x65, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x30, > 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x37, > > + 0x32, 0x38, 0x30, 0x37, 0x33, 0x38, 0x35, 0x39, 0x5a, > 0x17, 0x0d, 0x33, 0x39, 0x31, 0x32, 0x33, > > + 0x31, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, > 0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, > > + 0x55, 0x04, 0x03, 0x13, 0x07, 0x54, 0x65, 0x73, 0x74, > 0x53, 0x75, 0x62, 0x30, 0x81, 0x9f, 0x30, > > + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, > 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, > > + 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, > 0x94, 0xa6, 0x02, 0x15, 0x87, 0xd6, 0xbf, > > + 0x71, 0xe8, 0xc6, 0x68, 0xf6, 0x9f, 0x66, 0x09, 0x6c, > 0xe7, 0x39, 0x52, 0xf4, 0x4e, 0xaf, 0xf5, > > + 0xe0, 0xba, 0x0f, 0xfd, 0xe6, 0x77, 0xa9, 0x71, 0x5b, > 0x5c, 0x92, 0x50, 0x1d, 0xfd, 0x9b, 0x6e, > > + 0x52, 0x92, 0x9e, 0x3a, 0x75, 0x86, 0x41, 0x2a, 0x41, > 0x30, 0x1b, 0x67, 0x66, 0x91, 0xde, 0x71, > > + 0x84, 0xe0, 0x90, 0xc3, 0x50, 0x36, 0x78, 0xb5, 0xa0, > 0x1e, 0x72, 0xde, 0xe7, 0x66, 0x42, 0x4f, > > + 0x59, 0x5e, 0x3d, 0xf3, 0x85, 0x82, 0x0b, 0xa8, 0x26, > 0x2d, 0xd9, 0xe3, 0x14, 0xda, 0x9d, 0x2e, > > + 0x3f, 0x53, 0x4d, 0x8d, 0x10, 0xbf, 0xa4, 0x7c, 0xe5, > 0xaf, 0x3a, 0xa6, 0xaf, 0x49, 0x64, 0xb0, > > + 0x60, 0x17, 0x87, 0x71, 0x77, 0x59, 0x52, 0xe5, 0x5a, > 0xed, 0x96, 0x7d, 0x7e, 0x5d, 0xc1, 0xef, > > + 0x6b, 0xfb, 0x80, 0xc5, 0x2b, 0x10, 0xfe, 0xe7, 0xd3, > 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x48, > > + 0x30, 0x46, 0x30, 0x44, 0x06, 0x03, 0x55, 0x1d, 0x01, > 0x04, 0x3d, 0x30, 0x3b, 0x80, 0x10, 0x19, > > + 0x8d, 0x48, 0xa1, 0xb9, 0xf3, 0x5e, 0x3c, 0x13, 0xb4, > 0x08, 0xb6, 0xd9, 0xf3, 0x4f, 0x0a, 0xa1, > > + 0x15, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, > 0x55, 0x04, 0x03, 0x13, 0x08, 0x54, 0x65, > > + 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x82, 0x10, 0x27, > 0xcb, 0x16, 0x33, 0x8b, 0xed, 0x4d, 0xa8, > > + 0x47, 0xf0, 0x86, 0x47, 0x10, 0xef, 0x15, 0xd9, 0x30, > 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, > > + 0x1d, 0x05, 0x00, 0x03, 0x81, 0x81, 0x00, 0x51, 0x94, > 0xed, 0x7a, 0x5c, 0x0b, 0x34, 0x16, 0x9c, > > + 0xf4, 0x5f, 0x88, 0x16, 0xa8, 0x4b, 0x13, 0xfc, 0xa4, > 0x0a, 0xc7, 0xd9, 0x20, 0xb1, 0x93, 0xc5, > > + 0x81, 0x4f, 0x35, 0x3a, 0x89, 0x10, 0x04, 0xc4, 0xcc, > 0x10, 0x34, 0xc3, 0x15, 0x57, 0x06, 0x97, > > + 0xee, 0x06, 0x2f, 0xf3, 0x24, 0xa1, 0xe6, 0x3a, 0x89, > 0x4d, 0xb4, 0x7b, 0x12, 0x87, 0x90, 0x8c, > > + 0xfc, 0x5b, 0xb0, 0xf0, 0xdd, 0xaa, 0x3a, 0x24, 0x6d, > 0x55, 0x47, 0x8a, 0xf2, 0x61, 0x08, 0x7a, > > + 0x59, 0x5f, 0x6e, 0x7b, 0xcb, 0x34, 0xbe, 0xb6, 0x5d, > 0xcb, 0x60, 0xae, 0xc4, 0xda, 0x62, 0xbb, > > + 0x7f, 0x17, 0x1e, 0x73, 0xd1, 0x4e, 0x9f, 0x6e, 0xd3, > 0xc8, 0x35, 0x58, 0x30, 0xd2, 0x89, 0xe5, > > + 0x22, 0x5e, 0x86, 0xac, 0x7a, 0x56, 0xd6, 0x70, 0xdb, > 0x54, 0x10, 0x6c, 0xd3, 0xd5, 0x38, 0xfb, > > + 0x69, 0xcb, 0x4f, 0x36, 0x83, 0xc2, 0xe8, 0x31, 0x82, > 0x09, 0x69, 0x30, 0x82, 0x09, 0x65, 0x02, > > + 0x01, 0x01, 0x30, 0x27, 0x30, 0x13, 0x31, 0x11, 0x30, > 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, > > + 0x08, 0x54, 0x65, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x74, > 0x02, 0x10, 0x2c, 0x65, 0xcf, 0xcf, 0xdd, > > + 0x61, 0x7b, 0xa4, 0x41, 0xad, 0x26, 0x1b, 0x63, 0xce, > 0x91, 0x0f, 0x30, 0x0d, 0x06, 0x09, 0x60, > > + 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, > 0x00, 0xa0, 0x5e, 0x30, 0x10, 0x06, 0x0a, > > + 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, > 0x0c, 0x31, 0x02, 0x30, 0x00, 0x30, 0x19, > > + 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, > 0x09, 0x03, 0x31, 0x0c, 0x06, 0x0a, 0x2b, > > + 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x04, > 0x30, 0x2f, 0x06, 0x09, 0x2a, 0x86, 0x48, > > + 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x22, 0x04, > 0x20, 0x97, 0x6e, 0x29, 0x47, 0xc4, 0x03, > > + 0x68, 0x70, 0x1c, 0x99, 0x2c, 0x61, 0xb0, 0xbc, 0xde, > 0x77, 0xe1, 0xa1, 0xeb, 0x4c, 0x1c, 0xac, > > + 0x4c, 0x64, 0xf6, 0x43, 0x96, 0x94, 0x0b, 0xc0, 0xbb, > 0x03, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, > > + 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, > 0x04, 0x81, 0x80, 0x85, 0x93, 0xad, 0x93, > > + 0x92, 0x9e, 0xa4, 0x94, 0x30, 0x02, 0xe1, 0xc8, 0xcd, > 0x37, 0xb2, 0xe1, 0xcb, 0xb2, 0x0f, 0x1c, > > + 0x67, 0xd1, 0xc9, 0xeb, 0x4d, 0x68, 0x85, 0x97, 0x5a, > 0xa6, 0x0c, 0x03, 0xc7, 0x86, 0xae, 0xb3, > > + 0x35, 0xb4, 0x1d, 0x0e, 0x95, 0x5f, 0xed, 0x37, 0x13, > 0x6b, 0x1e, 0x94, 0x80, 0xf1, 0xac, 0x55, > > + 0x73, 0xd1, 0x31, 0xf9, 0xad, 0x13, 0x7b, 0x26, 0xbf, > 0xe7, 0x55, 0x7b, 0xb2, 0xf9, 0x21, 0x42, > > + 0x23, 0x64, 0xe6, 0x45, 0x03, 0x67, 0xcb, 0x42, 0xd3, > 0x71, 0x3f, 0xd5, 0x29, 0x17, 0x4b, 0x49, > > + 0x45, 0x0e, 0x8b, 0xba, 0x1f, 0x15, 0x5a, 0x7f, 0x7b, > 0x5e, 0x9b, 0x22, 0x46, 0xa7, 0x9c, 0x0d, > > + 0x25, 0x9c, 0x76, 0x25, 0x02, 0xc8, 0x15, 0x00, 0x51, > 0xe6, 0x73, 0x39, 0xac, 0x8d, 0x41, 0x7b, > > + 0xc8, 0x42, 0xc9, 0xdb, 0x1b, 0x16, 0x13, 0xf6, 0x44, > 0x32, 0xef, 0x17, 0xa1, 0x82, 0x08, 0x34, > > + 0x30, 0x82, 0x08, 0x30, 0x06, 0x0a, 0x2b, 0x06, 0x01, > 0x04, 0x01, 0x82, 0x37, 0x03, 0x03, 0x01, > > + 0x31, 0x82, 0x08, 0x20, > > + 0x30, 0x82, 0x08, 0x1c, 0x06, 0x09, 0x2a, 0x86, 0x48, > 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0, > > + 0x82, 0x08, 0x0d, 0x30, 0x82, 0x08, 0x09, 0x02, 0x01, > 0x03, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x05, > > + 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x30, 0x81, > 0xf6, 0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86, > > + 0xf7, 0x0d, 0x01, 0x09, 0x10, 0x01, 0x04, 0xa0, 0x81, > 0xe6, 0x04, 0x81, 0xe3, 0x30, 0x81, 0xe0, > > + 0x02, 0x01, 0x01, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, > 0x01, 0xb2, 0x31, 0x02, 0x01, 0x01, 0x30, > > + 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, > 0x1a, 0x05, 0x00, 0x04, 0x14, 0xcd, 0x06, > > + 0xf0, 0xbd, 0x8b, 0xcd, 0x5c, 0x2e, 0x5a, 0x7c, 0x42, > 0x56, 0x2c, 0x20, 0x4a, 0x15, 0xcb, 0x1d, > > + 0x8b, 0x0e, 0x02, 0x15, 0x00, 0xb6, 0xff, 0x47, 0x05, > 0xb6, 0x2d, 0x15, 0xac, 0x3f, 0x5d, 0xd9, > > + 0xcf, 0x9d, 0x54, 0x35, 0x56, 0x7c, 0xc1, 0x6e, 0x8b, > 0x18, 0x0f, 0x32, 0x30, 0x31, 0x34, 0x30, > > + 0x37, 0x32, 0x38, 0x30, 0x38, 0x35, 0x30, 0x30, 0x33, > 0x5a, 0xa0, 0x81, 0x83, 0xa4, 0x81, 0x80, > > + 0x30, 0x7e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, > 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, > > + 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, > 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, > > + 0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, > 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, 0x0e, > > + 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x53, 0x61, > 0x6c, 0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a, > > + 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x11, > 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, > > + 0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, > 0x64, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, > > + 0x55, 0x04, 0x03, 0x13, 0x1b, 0x43, 0x4f, 0x4d, 0x4f, > 0x44, 0x4f, 0x20, 0x54, 0x69, 0x6d, 0x65, > > + 0x20, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, > 0x20, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, > > + 0xa0, 0x82, 0x04, 0x97, 0x30, 0x82, 0x04, 0x93, 0x30, > 0x82, 0x03, 0x7b, 0xa0, 0x03, 0x02, 0x01, > > + 0x02, 0x02, 0x10, 0x47, 0x8a, 0x8e, 0xfb, 0x59, 0xe1, > 0xd8, 0x3f, 0x0c, 0xe1, 0x42, 0xd2, 0xa2, > > + 0x87, 0x07, 0xbe, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, > 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, > > + 0x05, 0x00, 0x30, 0x81, 0x95, 0x31, 0x0b, 0x30, 0x09, > 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, > > + 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, > 0x04, 0x08, 0x13, 0x02, 0x55, 0x54, 0x31, > > + 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, > 0x0e, 0x53, 0x61, 0x6c, 0x74, 0x20, 0x4c, > > + 0x61, 0x6b, 0x65, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31, > 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, > > + 0x0a, 0x13, 0x15, 0x54, 0x68, 0x65, 0x20, 0x55, 0x53, > 0x45, 0x52, 0x54, 0x52, 0x55, 0x53, 0x54, > > + 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x31, > 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, > > + 0x0b, 0x13, 0x18, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, > 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x75, 0x73, > > + 0x65, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x63, > 0x6f, 0x6d, 0x31, 0x1d, 0x30, 0x1b, 0x06, > > + 0x03, 0x55, 0x04, 0x03, 0x13, 0x14, 0x55, 0x54, 0x4e, > 0x2d, 0x55, 0x53, 0x45, 0x52, 0x46, 0x69, > > + 0x72, 0x73, 0x74, 0x2d, 0x4f, 0x62, 0x6a, 0x65, 0x63, > 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, > > + 0x30, 0x35, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, > 0x30, 0x5a, 0x17, 0x0d, 0x31, 0x35, 0x30, > > + 0x35, 0x31, 0x30, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, > 0x5a, 0x30, 0x7e, 0x31, 0x0b, 0x30, 0x09, > > + 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, > 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, > > + 0x04, 0x08, 0x13, 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, > 0x65, 0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63, > > + 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, > 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, > > + 0x07, 0x53, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x64, 0x31, > 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, > > + 0x0a, 0x13, 0x11, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, > 0x20, 0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d, > > + 0x69, 0x74, 0x65, 0x64, 0x31, 0x24, 0x30, 0x22, 0x06, > 0x03, 0x55, 0x04, 0x03, 0x13, 0x1b, 0x43, > > + 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x54, 0x69, 0x6d, > 0x65, 0x20, 0x53, 0x74, 0x61, 0x6d, 0x70, > > + 0x69, 0x6e, 0x67, 0x20, 0x53, 0x69, 0x67, 0x6e, 0x65, > 0x72, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, > > + 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, > 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, > > + 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, > 0x01, 0x00, 0xbc, 0x35, 0xa0, 0x36, 0x70, > > + 0x22, 0x81, 0x11, 0xc3, 0xb2, 0x83, 0xb9, 0xd3, 0x28, > 0xc6, 0x36, 0xcd, 0x25, 0x6b, 0xa9, 0x7b, > > + 0xb2, 0x1c, 0xf6, 0x9b, 0x51, 0x9c, 0xef, 0x35, 0xf4, > 0xed, 0x08, 0x8e, 0x5e, 0x38, 0x08, 0xf8, > > + 0x77, 0x3c, 0x0a, 0x42, 0xe0, 0xf3, 0x70, 0xdc, 0xa3, > 0xd7, 0xca, 0xf5, 0x4c, 0x0b, 0xcf, 0xff, > > + 0x22, 0x9c, 0x0a, 0x7e, 0x68, 0xd6, 0x09, 0xa2, 0x2a, > 0x84, 0x7b, 0xa6, 0x9d, 0xb4, 0xa9, 0xc1, > > + 0x33, 0xe2, 0xef, 0x1f, 0x17, 0x48, 0xca, 0x3a, 0xcd, > 0x46, 0xe6, 0xc5, 0xaa, 0x77, 0xbd, 0xe3, > > + 0x77, 0x9a, 0xfa, 0x47, 0x53, 0x40, 0x28, 0x59, 0x43, > 0x93, 0xf1, 0xa4, 0x81, 0xea, 0xef, 0x80, > > + 0xb5, 0x4f, 0xa7, 0x08, 0xce, 0xba, 0x6e, 0xbc, 0xca, > 0x76, 0x0c, 0x97, 0x64, 0x59, 0x86, 0x24, > > + 0xbb, 0x3d, 0x82, 0x90, 0xa8, 0x55, 0xb1, 0x92, 0xd3, > 0xa0, 0xa7, 0x05, 0xac, 0x9f, 0x53, 0x25, > > + 0x08, 0x10, 0x47, 0x99, 0xcd, 0x98, 0xde, 0x68, 0xe5, > 0xb4, 0x50, 0x78, 0xa3, 0xaf, 0x01, 0xcc, > > + 0x59, 0x43, 0x58, 0xe4, 0x76, 0x6e, 0x7e, 0xac, 0xc7, > 0xe2, 0x9e, 0x1f, 0x4f, 0xb0, 0x47, 0x2d, > > + 0xc8, 0x0c, 0xa3, 0x49, 0x27, 0x80, 0x75, 0x8c, 0xbb, > 0x06, 0x91, 0x65, 0x0f, 0x90, 0x9b, 0xf4, > > + 0xba, 0xd1, 0x81, 0xc8, 0x5c, 0x6a, 0xec, 0x14, 0xe9, > 0x25, 0x09, 0xbf, 0x23, 0x16, 0xf4, 0x95, > > + 0x46, 0x40, 0x40, 0x21, 0xbb, 0x83, 0x96, 0xfd, 0x86, > 0x1f, 0x7a, 0xc8, 0x0d, 0x10, 0x8e, 0xa2, > > + 0xf8, 0x19, 0x07, 0x58, 0x7f, 0x9f, 0xbd, 0x37, 0x02, > 0x60, 0xf2, 0xa4, 0xe9, 0x9d, 0x44, 0x3f, > > + 0x30, 0x05, 0xe4, 0xa7, 0x70, 0x99, 0x51, 0x9a, 0xe8, > 0x17, 0xf1, 0x55, 0xca, 0xb2, 0x61, 0x89, > > + 0x65, 0x46, 0xa7, 0x6a, 0xf2, 0x58, 0x46, 0x7e, 0xaa, > 0xa0, 0x07, 0x02, 0x03, 0x01, 0x00, 0x01, > > + 0xa3, 0x81, 0xf4, 0x30, 0x81, 0xf1, 0x30, 0x1f, 0x06, > 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, > > + 0x16, 0x80, 0x14, 0xda, 0xed, 0x64, 0x74, 0x14, 0x9c, > 0x14, 0x3c, 0xab, 0xdd, 0x99, 0xa9, 0xbd, > > + 0x5b, 0x28, 0x4d, 0x8b, 0x3c, 0xc9, 0xd8, 0x30, 0x1d, > 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, > > + 0x04, 0x14, 0x2e, 0x2d, 0xb0, 0x0a, 0x44, 0x4a, 0xd3, > 0x87, 0xc0, 0x02, 0x07, 0xce, 0x97, 0x7d, > > + 0x50, 0x62, 0x20, 0xfd, 0x0f, 0x83, 0x30, 0x0e, 0x06, > 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, > > + 0x04, 0x04, 0x03, 0x02, 0x06, 0xc0, 0x30, 0x0c, 0x06, > 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, > > + 0x04, 0x02, 0x30, 0x00, 0x30, 0x16, 0x06, 0x03, 0x55, > 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x0c, > > + 0x30, 0x0a, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, > 0x07, 0x03, 0x08, 0x30, 0x42, 0x06, 0x03, > > + 0x55, 0x1d, 0x1f, 0x04, 0x3b, 0x30, 0x39, 0x30, 0x37, > 0xa0, 0x35, 0xa0, 0x33, 0x86, 0x31, 0x68, > > + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, > 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72, > > + 0x75, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x55, > 0x54, 0x4e, 0x2d, 0x55, 0x53, 0x45, 0x52, > > + 0x46, 0x69, 0x72, 0x73, 0x74, 0x2d, 0x4f, 0x62, 0x6a, > 0x65, 0x63, 0x74, 0x2e, 0x63, 0x72, 0x6c, > > + 0x30, 0x35, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, > 0x07, 0x01, 0x01, 0x04, 0x29, 0x30, 0x27, > > + 0x30, 0x25, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, > 0x07, 0x30, 0x01, 0x86, 0x19, 0x68, 0x74, > > + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x63, 0x73, 0x70, > 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72, > > + 0x75, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x0d, > 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, > > + 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, > 0x01, 0x00, 0xc8, 0xfb, 0x63, 0xf8, 0x0b, > > + 0x75, 0x75, 0x2c, 0x3a, 0xf1, 0xf2, 0x13, 0xa7, 0x2d, > 0xb6, 0xa3, 0x1a, 0x9c, 0xad, 0x01, 0x07, > > + 0xd3, 0x34, 0x8e, 0x77, 0xe0, 0xc2, 0x6e, 0xae, 0x02, > 0x5d, 0x48, 0x4f, 0xa4, 0xd2, 0x21, 0xb6, > > + 0x36, 0xfd, 0x2a, 0x35, 0x43, 0x7c, 0x6b, 0xdf, 0x80, > 0x87, 0x0b, 0x15, 0xf0, 0x76, 0x32, 0x00, > > + 0xb4, 0xce, 0xb5, 0x67, 0xa4, 0x2f, 0x2f, 0x20, 0x1b, > 0x9c, 0x54, 0x9e, 0x83, 0x3f, 0x1f, 0x5f, > > + 0x14, 0x95, 0x62, 0x82, 0x0f, 0x22, 0x41, 0x22, 0x1f, > 0x70, 0xb3, 0xf3, 0xf7, 0x42, 0xde, 0x6c, > > + 0x51, 0xcd, 0x4b, 0xf8, 0x21, 0xac, 0x9b, 0x3b, 0x8c, > 0xb1, 0xe5, 0xe6, 0x28, 0x8f, 0xce, 0x2a, > > + 0x8a, 0xf9, 0xaa, 0x52, 0x4d, 0x8c, 0x5b, 0x77, 0xba, > 0x4d, 0x5a, 0x58, 0xdb, 0xbb, 0x6a, 0x04, > > + 0xcc, 0x52, 0x1e, 0x9d, 0xe2, 0x28, 0x37, 0x0e, 0xbb, > 0xe7, 0x0e, 0x91, 0xc7, 0xf8, 0xdb, 0xf1, > > + 0x81, 0x98, 0xeb, 0xcd, 0x37, 0xb3, 0x0e, 0xab, 0x65, > 0xd3, 0x62, 0xec, 0x3a, 0xa5, 0x76, 0xeb, > > + 0x13, 0xa8, 0x35, 0x93, 0xc9, 0x2e, 0x0a, 0x01, 0xec, > 0xc0, 0xe8, 0xcc, 0x3d, 0x7e, 0xb6, 0xeb, > > + 0xe2, 0xc1, 0xec, 0xd3, 0x14, 0x92, 0x82, 0x66, 0x87, > 0x50, 0xdc, 0xfd, 0x50, 0x97, 0xac, 0xb3, > > + 0x4a, 0x76, 0x73, 0x06, 0xc4, 0x86, 0x11, 0x3a, 0xb3, > 0x5f, 0x43, 0x04, 0x52, 0x6f, 0xea, 0xb3, > > + 0xd0, 0x74, 0x36, 0x4c, 0xca, 0xf1, 0x1b, 0x79, 0x84, > 0x37, 0x70, 0x63, 0xad, 0x74, 0xb9, 0xaa, > > + 0x0e, 0xf3, 0x98, 0xb0, 0x86, 0x08, 0xeb, 0xdb, 0xe0, > 0x1f, 0x8c, 0x10, 0xf2, 0x39, 0x64, 0x9b, > > + 0xae, 0x4f, 0x0a, 0x2c, 0x92, 0x8a, 0x4f, 0x18, 0xb5, > 0x91, 0xe5, 0x8d, 0x1a, 0x93, 0x5f, 0x1f, > > + 0xae, 0xf1, 0xa6, 0xf0, 0x2e, 0x97, 0xd0, 0xd2, 0xf6, > 0x2b, 0x3c, 0x31, 0x82, 0x02, 0x61, 0x30, > > + 0x82, 0x02, 0x5d, 0x02, 0x01, 0x01, 0x30, 0x81, 0xaa, > 0x30, 0x81, 0x95, 0x31, 0x0b, 0x30, 0x09, > > + 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, > 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, > > + 0x04, 0x08, 0x13, 0x02, 0x55, 0x54, 0x31, 0x17, 0x30, > 0x15, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, > > + 0x0e, 0x53, 0x61, 0x6c, 0x74, 0x20, 0x4c, 0x61, 0x6b, > 0x65, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31, > > + 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, > 0x15, 0x54, 0x68, 0x65, 0x20, 0x55, 0x53, > > + 0x45, 0x52, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20, 0x4e, > 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x31, > > + 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, > 0x18, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, > > + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x75, 0x73, 0x65, 0x72, > 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x63, > > + 0x6f, 0x6d, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, > 0x04, 0x03, 0x13, 0x14, 0x55, 0x54, 0x4e, > > + 0x2d, 0x55, 0x53, 0x45, 0x52, 0x46, 0x69, 0x72, 0x73, > 0x74, 0x2d, 0x4f, 0x62, 0x6a, 0x65, 0x63, > > + 0x74, 0x02, 0x10, 0x47, 0x8a, 0x8e, 0xfb, 0x59, 0xe1, > 0xd8, 0x3f, 0x0c, 0xe1, 0x42, 0xd2, 0xa2, > > + 0x87, 0x07, 0xbe, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, > 0x03, 0x02, 0x1a, 0x05, 0x00, 0xa0, 0x81, > > + 0x8c, 0x30, 0x1a, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, > 0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0d, > > + 0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, > 0x09, 0x10, 0x01, 0x04, 0x30, 0x1c, 0x06, > > + 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, > 0x05, 0x31, 0x0f, 0x17, 0x0d, 0x31, 0x34, > > + 0x30, 0x37, 0x32, 0x38, 0x30, 0x38, 0x35, 0x30, 0x30, > 0x33, 0x5a, 0x30, 0x23, 0x06, 0x09, 0x2a, > > + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, > 0x16, 0x04, 0x14, 0x7a, 0xad, 0x35, 0xdc, > > + 0x5b, 0xd6, 0x00, 0xd7, 0x44, 0xac, 0x80, 0x8f, 0x4f, > 0xb6, 0xb4, 0x03, 0x62, 0x34, 0x53, 0xdc, > > + 0x30, 0x2b, 0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86, 0xf7, > 0x0d, 0x01, 0x09, 0x10, 0x02, 0x0c, 0x31, > > + 0x1c, 0x30, 0x1a, 0x30, 0x18, 0x30, 0x16, 0x04, 0x14, > 0x3d, 0xbb, 0x6d, 0xb5, 0x08, 0x5c, 0x6d, > > + 0xd5, 0xa1, 0xca, 0x7f, 0x9c, 0xf8, 0x4e, 0xcb, 0x1a, > 0x39, 0x10, 0xca, 0xc8, 0x30, 0x0d, 0x06, > > + 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, > 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, > > + 0x73, 0x64, 0xb9, 0xa3, 0x54, 0x6f, 0x50, 0x97, 0x01, > 0xa7, 0xf6, 0x0d, 0xb8, 0xce, 0x4b, 0xaa, > > + 0x43, 0xa2, 0x8f, 0xa3, 0xea, 0x93, 0xf2, 0xa3, 0xd0, > 0x46, 0xde, 0xdd, 0x45, 0xe5, 0x94, 0x5a, > > + 0x45, 0xc2, 0x13, 0x1b, 0x90, 0x9b, 0xcf, 0x73, 0xcd, > 0x28, 0x70, 0xf0, 0xf4, 0x54, 0xb5, 0x2d, > > + 0x31, 0xf9, 0xf3, 0x2d, 0x38, 0x78, 0xfe, 0x68, 0xea, > 0x3c, 0xc0, 0xbe, 0x0b, 0x5a, 0x91, 0x49, > > + 0x63, 0xeb, 0x26, 0x32, 0x5b, 0x86, 0xcf, 0xe5, 0x8a, > 0xa5, 0x9d, 0xe6, 0x4b, 0x57, 0x91, 0x8f, > > + 0x3c, 0xdc, 0xa6, 0x53, 0xd8, 0xdb, 0x8a, 0xfd, 0x3e, > 0x7e, 0x19, 0x6f, 0x27, 0x72, 0x95, 0xc2, > > + 0x79, 0x73, 0xdf, 0xfb, 0x08, 0x5c, 0x5b, 0xc8, 0xb7, > 0x94, 0x75, 0x88, 0x7a, 0x9a, 0x85, 0x9f, > > + 0x1b, 0xa3, 0x98, 0x30, 0x91, 0xee, 0xc0, 0x52, 0xd2, > 0x75, 0x9c, 0xcb, 0x45, 0x0d, 0x94, 0x43, > > + 0x67, 0x7a, 0x49, 0x1c, 0xb1, 0x89, 0x9d, 0x6e, 0xfa, > 0x87, 0xd2, 0x4d, 0x6e, 0x74, 0x90, 0xf5, > > + 0x80, 0x8c, 0x92, 0xda, 0xd9, 0xa1, 0x48, 0x20, 0x31, > 0x02, 0x79, 0xde, 0xe3, 0xbd, 0x09, 0x04, > > + 0xa8, 0xd4, 0x99, 0xd7, 0x3b, 0xea, 0xf8, 0xdf, 0xb3, > 0xb9, 0xd7, 0xa3, 0x36, 0xa1, 0xdb, 0xd3, > > + 0xec, 0x65, 0x8c, 0xb8, 0x8f, 0xfb, 0xd6, 0xef, 0x9c, > 0x32, 0x3e, 0xab, 0x20, 0x74, 0xb9, 0x65, > > + 0x4c, 0xc6, 0x15, 0x2f, 0x31, 0x2a, 0x34, 0x3e, 0x84, > 0x09, 0xb4, 0x75, 0xbc, 0xbe, 0xaf, 0xb3, > > + 0x9e, 0x85, 0xf1, 0xbb, 0x99, 0x1a, 0x07, 0xbd, 0x20, > 0xa6, 0xed, 0xcf, 0xd1, 0xa6, 0x9a, 0x22, > > + 0xb2, 0x6d, 0x75, 0xf4, 0x23, 0x58, 0x13, 0x78, 0x73, > 0x1a, 0xb2, 0x84, 0xde, 0xad, 0xe8, 0x6d, > > + 0xe6, 0xe7, 0x5c, 0xb6, 0xe6, 0x5b, 0x10, 0x37, 0x1f, > 0xe3, 0x6e, 0xbd, 0x83, 0xd7, 0x51, 0xb1, > > + 0x00, 0x00, 0x00, 0x00, 0x0a > > + }; > > + > > +// > > +// The Comodo Time Stamping Signer Certificate Used for > the verification of TimeStamp signature. > > +// > > +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 TSTrustedCert[] = { > > + 0x30, 0x82, 0x04, 0x93, 0x30, 0x82, 0x03, 0x7b, 0xa0, > 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x47, > > + 0x8a, 0x8e, 0xfb, 0x59, 0xe1, 0xd8, 0x3f, 0x0c, 0xe1, > 0x42, 0xd2, 0xa2, 0x87, 0x07, 0xbe, 0x30, > > + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, > 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x81, > > + 0x95, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, > 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, > > + 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x02, > 0x55, 0x54, 0x31, 0x17, 0x30, 0x15, 0x06, > > + 0x03, 0x55, 0x04, 0x07, 0x13, 0x0e, 0x53, 0x61, 0x6c, > 0x74, 0x20, 0x4c, 0x61, 0x6b, 0x65, 0x20, > > + 0x43, 0x69, 0x74, 0x79, 0x31, 0x1e, 0x30, 0x1c, 0x06, > 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x54, > > + 0x68, 0x65, 0x20, 0x55, 0x53, 0x45, 0x52, 0x54, 0x52, > 0x55, 0x53, 0x54, 0x20, 0x4e, 0x65, 0x74, > > + 0x77, 0x6f, 0x72, 0x6b, 0x31, 0x21, 0x30, 0x1f, 0x06, > 0x03, 0x55, 0x04, 0x0b, 0x13, 0x18, 0x68, > > + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, > 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72, > > + 0x75, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x1d, > 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, > > + 0x13, 0x14, 0x55, 0x54, 0x4e, 0x2d, 0x55, 0x53, 0x45, > 0x52, 0x46, 0x69, 0x72, 0x73, 0x74, 0x2d, > > + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x30, 0x1e, 0x17, > 0x0d, 0x31, 0x30, 0x30, 0x35, 0x31, 0x30, > > + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, > 0x31, 0x35, 0x30, 0x35, 0x31, 0x30, 0x32, > > + 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x7e, 0x31, > 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, > > + 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1b, 0x30, 0x19, > 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x12, > > + 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x4d, > 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x74, > > + 0x65, 0x72, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, > 0x04, 0x07, 0x13, 0x07, 0x53, 0x61, 0x6c, > > + 0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a, 0x30, 0x18, 0x06, > 0x03, 0x55, 0x04, 0x0a, 0x13, 0x11, 0x43, > > + 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x43, 0x41, 0x20, > 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, > > + 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, > 0x13, 0x1b, 0x43, 0x4f, 0x4d, 0x4f, 0x44, > > + 0x4f, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x53, 0x74, > 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x20, > > + 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x30, 0x82, 0x01, > 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, > > + 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, > 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, > > + 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xbc, 0x35, > 0xa0, 0x36, 0x70, 0x22, 0x81, 0x11, 0xc3, > > + 0xb2, 0x83, 0xb9, 0xd3, 0x28, 0xc6, 0x36, 0xcd, 0x25, > 0x6b, 0xa9, 0x7b, 0xb2, 0x1c, 0xf6, 0x9b, > > + 0x51, 0x9c, 0xef, 0x35, 0xf4, 0xed, 0x08, 0x8e, 0x5e, > 0x38, 0x08, 0xf8, 0x77, 0x3c, 0x0a, 0x42, > > + 0xe0, 0xf3, 0x70, 0xdc, 0xa3, 0xd7, 0xca, 0xf5, 0x4c, > 0x0b, 0xcf, 0xff, 0x22, 0x9c, 0x0a, 0x7e, > > + 0x68, 0xd6, 0x09, 0xa2, 0x2a, 0x84, 0x7b, 0xa6, 0x9d, > 0xb4, 0xa9, 0xc1, 0x33, 0xe2, 0xef, 0x1f, > > + 0x17, 0x48, 0xca, 0x3a, 0xcd, 0x46, 0xe6, 0xc5, 0xaa, > 0x77, 0xbd, 0xe3, 0x77, 0x9a, 0xfa, 0x47, > > + 0x53, 0x40, 0x28, 0x59, 0x43, 0x93, 0xf1, 0xa4, 0x81, > 0xea, 0xef, 0x80, 0xb5, 0x4f, 0xa7, 0x08, > > + 0xce, 0xba, 0x6e, 0xbc, 0xca, 0x76, 0x0c, 0x97, 0x64, > 0x59, 0x86, 0x24, 0xbb, 0x3d, 0x82, 0x90, > > + 0xa8, 0x55, 0xb1, 0x92, 0xd3, 0xa0, 0xa7, 0x05, 0xac, > 0x9f, 0x53, 0x25, 0x08, 0x10, 0x47, 0x99, > > + 0xcd, 0x98, 0xde, 0x68, 0xe5, 0xb4, 0x50, 0x78, 0xa3, > 0xaf, 0x01, 0xcc, 0x59, 0x43, 0x58, 0xe4, > > + 0x76, 0x6e, 0x7e, 0xac, 0xc7, 0xe2, 0x9e, 0x1f, 0x4f, > 0xb0, 0x47, 0x2d, 0xc8, 0x0c, 0xa3, 0x49, > > + 0x27, 0x80, 0x75, 0x8c, 0xbb, 0x06, 0x91, 0x65, 0x0f, > 0x90, 0x9b, 0xf4, 0xba, 0xd1, 0x81, 0xc8, > > + 0x5c, 0x6a, 0xec, 0x14, 0xe9, 0x25, 0x09, 0xbf, 0x23, > 0x16, 0xf4, 0x95, 0x46, 0x40, 0x40, 0x21, > > + 0xbb, 0x83, 0x96, 0xfd, 0x86, 0x1f, 0x7a, 0xc8, 0x0d, > 0x10, 0x8e, 0xa2, 0xf8, 0x19, 0x07, 0x58, > > + 0x7f, 0x9f, 0xbd, 0x37, 0x02, 0x60, 0xf2, 0xa4, 0xe9, > 0x9d, 0x44, 0x3f, 0x30, 0x05, 0xe4, 0xa7, > > + 0x70, 0x99, 0x51, 0x9a, 0xe8, 0x17, 0xf1, 0x55, 0xca, > 0xb2, 0x61, 0x89, 0x65, 0x46, 0xa7, 0x6a, > > + 0xf2, 0x58, 0x46, 0x7e, 0xaa, 0xa0, 0x07, 0x02, 0x03, > 0x01, 0x00, 0x01, 0xa3, 0x81, 0xf4, 0x30, > > + 0x81, 0xf1, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, > 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xda, > > + 0xed, 0x64, 0x74, 0x14, 0x9c, 0x14, 0x3c, 0xab, 0xdd, > 0x99, 0xa9, 0xbd, 0x5b, 0x28, 0x4d, 0x8b, > > + 0x3c, 0xc9, 0xd8, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, > 0x0e, 0x04, 0x16, 0x04, 0x14, 0x2e, 0x2d, > > + 0xb0, 0x0a, 0x44, 0x4a, 0xd3, 0x87, 0xc0, 0x02, 0x07, > 0xce, 0x97, 0x7d, 0x50, 0x62, 0x20, 0xfd, > > + 0x0f, 0x83, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, > 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, > > + 0x06, 0xc0, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, > 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00, > > + 0x30, 0x16, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x01, 0x01, > 0xff, 0x04, 0x0c, 0x30, 0x0a, 0x06, 0x08, > > + 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x08, 0x30, > 0x42, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, > > + 0x3b, 0x30, 0x39, 0x30, 0x37, 0xa0, 0x35, 0xa0, 0x33, > 0x86, 0x31, 0x68, 0x74, 0x74, 0x70, 0x3a, > > + 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x75, 0x73, 0x65, > 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, > > + 0x63, 0x6f, 0x6d, 0x2f, 0x55, 0x54, 0x4e, 0x2d, 0x55, > 0x53, 0x45, 0x52, 0x46, 0x69, 0x72, 0x73, > > + 0x74, 0x2d, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, > 0x63, 0x72, 0x6c, 0x30, 0x35, 0x06, 0x08, > > + 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, > 0x29, 0x30, 0x27, 0x30, 0x25, 0x06, 0x08, > > + 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x01, 0x86, > 0x19, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, > > + 0x2f, 0x6f, 0x63, 0x73, 0x70, 0x2e, 0x75, 0x73, 0x65, > 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, > > + 0x63, 0x6f, 0x6d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, > 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, > > + 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xc8, 0xfb, > 0x63, 0xf8, 0x0b, 0x75, 0x75, 0x2c, 0x3a, > > + 0xf1, 0xf2, 0x13, 0xa7, 0x2d, 0xb6, 0xa3, 0x1a, 0x9c, > 0xad, 0x01, 0x07, 0xd3, 0x34, 0x8e, 0x77, > > + 0xe0, 0xc2, 0x6e, 0xae, 0x02, 0x5d, 0x48, 0x4f, 0xa4, > 0xd2, 0x21, 0xb6, 0x36, 0xfd, 0x2a, 0x35, > > + 0x43, 0x7c, 0x6b, 0xdf, 0x80, 0x87, 0x0b, 0x15, 0xf0, > 0x76, 0x32, 0x00, 0xb4, 0xce, 0xb5, 0x67, > > + 0xa4, 0x2f, 0x2f, 0x20, 0x1b, 0x9c, 0x54, 0x9e, 0x83, > 0x3f, 0x1f, 0x5f, 0x14, 0x95, 0x62, 0x82, > > + 0x0f, 0x22, 0x41, 0x22, 0x1f, 0x70, 0xb3, 0xf3, 0xf7, > 0x42, 0xde, 0x6c, 0x51, 0xcd, 0x4b, 0xf8, > > + 0x21, 0xac, 0x9b, 0x3b, 0x8c, 0xb1, 0xe5, 0xe6, 0x28, > 0x8f, 0xce, 0x2a, 0x8a, 0xf9, 0xaa, 0x52, > > + 0x4d, 0x8c, 0x5b, 0x77, 0xba, 0x4d, 0x5a, 0x58, 0xdb, > 0xbb, 0x6a, 0x04, 0xcc, 0x52, 0x1e, 0x9d, > > + 0xe2, 0x28, 0x37, 0x0e, 0xbb, 0xe7, 0x0e, 0x91, 0xc7, > 0xf8, 0xdb, 0xf1, 0x81, 0x98, 0xeb, 0xcd, > > + 0x37, 0xb3, 0x0e, 0xab, 0x65, 0xd3, 0x62, 0xec, 0x3a, > 0xa5, 0x76, 0xeb, 0x13, 0xa8, 0x35, 0x93, > > + 0xc9, 0x2e, 0x0a, 0x01, 0xec, 0xc0, 0xe8, 0xcc, 0x3d, > 0x7e, 0xb6, 0xeb, 0xe2, 0xc1, 0xec, 0xd3, > > + 0x14, 0x92, 0x82, 0x66, 0x87, 0x50, 0xdc, 0xfd, 0x50, > 0x97, 0xac, 0xb3, 0x4a, 0x76, 0x73, 0x06, > > + 0xc4, 0x86, 0x11, 0x3a, 0xb3, 0x5f, 0x43, 0x04, 0x52, > 0x6f, 0xea, 0xb3, 0xd0, 0x74, 0x36, 0x4c, > > + 0xca, 0xf1, 0x1b, 0x79, 0x84, 0x37, 0x70, 0x63, 0xad, > 0x74, 0xb9, 0xaa, 0x0e, 0xf3, 0x98, 0xb0, > > + 0x86, 0x08, 0xeb, 0xdb, 0xe0, 0x1f, 0x8c, 0x10, 0xf2, > 0x39, 0x64, 0x9b, 0xae, 0x4f, 0x0a, 0x2c, > > + 0x92, 0x8a, 0x4f, 0x18, 0xb5, 0x91, 0xe5, 0x8d, 0x1a, > 0x93, 0x5f, 0x1f, 0xae, 0xf1, 0xa6, 0xf0, > > + 0x2e, 0x97, 0xd0, 0xd2, 0xf6, 0x2b, 0x3c, 0x0a > > + }; > > + > > +UNIT_TEST_STATUS > > +EFIAPI > > +TestVerifyImageTimestampVerify ( > > + IN UNIT_TEST_CONTEXT Context > > + ) > > +{ > > + BOOLEAN Status; > > + EFI_TIME SigningTime; > > + > > + Status = FALSE; > > + > > + // > > + // Verify RFC3161 Timestamp CounterSignature. > > + // > > + Status = ImageTimestampVerify ( > > + AuthenticodeWithTS, > > + sizeof (AuthenticodeWithTS), > > + TSTrustedCert, > > + sizeof (TSTrustedCert), > > + &SigningTime > > + ); > > + UT_ASSERT_TRUE (Status); > > + > > + UT_ASSERT_EQUAL (SigningTime.Year, 2014); > > + UT_ASSERT_EQUAL (SigningTime.Month, 7); > > + UT_ASSERT_EQUAL (SigningTime.Day, 28); > > + UT_ASSERT_EQUAL (SigningTime.Hour, 8); > > + UT_ASSERT_EQUAL (SigningTime.Minute, 50); > > + UT_ASSERT_EQUAL (SigningTime.Second, 3); > > + > > + return Status; > > +} > > + > > +TEST_DESC mImageTimestampTest[] = { > > + // > > + // -----Description-------------------------------- > ------Class----------------------------Function--------- > --------Pre---Post--Context > > + // > > + {"TestVerifyImageTimestampVerify()", > "CryptoPkg.BaseCryptLib.ImageTimestamp", > TestVerifyImageTimestampVerify, NULL, NULL, NULL}, > > +}; > > + > > +UINTN mImageTimestampTestNum = > ARRAY_SIZE(mImageTimestampTest); > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestM > ain.c > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestM > ain.c > new file mode 100644 > index 000000000000..88a3f96305c3 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestM > ain.c > @@ -0,0 +1,81 @@ > +/** @file > > + This is a sample to demostrate the usage of the Unit > Test Library that > > + supports the PEI, DXE, SMM, UEFI SHell, and host > execution environments. > > + > > + Copyright (c) Microsoft Corporation.<BR> > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > +#include "TestBaseCryptLib.h" > > + > > + > > +/** > > + Initialize the unit test framework, suite, and unit > tests for the > > + sample unit tests and run the unit tests. > > + > > + @retval EFI_SUCCESS All test cases were > dispatched. > > + @retval EFI_OUT_OF_RESOURCES There are not enough > resources available to > > + initialize the unit > tests. > > +**/ > > +EFI_STATUS > > +EFIAPI > > +UefiTestMain ( > > + VOID > > + ) > > +{ > > + EFI_STATUS Status; > > + UNIT_TEST_FRAMEWORK_HANDLE Framework; > > + > > + DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_NAME, > UNIT_TEST_VERSION )); > > + CreateUnitTest(UNIT_TEST_NAME, UNIT_TEST_VERSION, > &Framework); > > + > > + // > > + // Execute the tests. > > + // > > + Status = RunAllTestSuites (Framework); > > + > > + if (Framework) { > > + FreeUnitTestFramework (Framework); > > + } > > + > > + return Status; > > +} > > + > > +/** > > + Standard PEIM entry point for target based unit test > execution from PEI. > > +**/ > > +EFI_STATUS > > +EFIAPI > > +PeiEntryPoint ( > > + IN EFI_PEI_FILE_HANDLE FileHandle, > > + IN CONST EFI_PEI_SERVICES **PeiServices > > + ) > > +{ > > + return UefiTestMain (); > > +} > > + > > +/** > > + Standard UEFI entry point for target based unit test > execution from DXE, SMM, > > + UEFI Shell. > > +**/ > > +EFI_STATUS > > +EFIAPI > > +DxeEntryPoint ( > > + IN EFI_HANDLE ImageHandle, > > + IN EFI_SYSTEM_TABLE *SystemTable > > + ) > > +{ > > + return UefiTestMain (); > > +} > > + > > +/** > > + Standard POSIX C entry point for host based unit test > execution. > > +**/ > > +int > > +main ( > > + int argc, > > + char *argv[] > > + ) > > +{ > > + return UefiTestMain (); > > +} > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestM > ainBCOP.c > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestM > ainBCOP.c > new file mode 100644 > index 000000000000..69bd1142e396 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestM > ainBCOP.c > @@ -0,0 +1,58 @@ > +/** @file > > + This is a sample to demostrate the usage of the Unit > Test Library that > > + supports the PEI, DXE, SMM, UEFI SHell, and host > execution environments. > > + > > + Copyright (c) Microsoft Corporation.<BR> > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > +#include "TestBaseCryptLib.h" > > + > > + > > +/** > > + Initialize the unit test framework, suite, and unit > tests for the > > + sample unit tests and run the unit tests. > > + > > + @retval EFI_SUCCESS All test cases were > dispatched. > > + @retval EFI_OUT_OF_RESOURCES There are not enough > resources available to > > + initialize the unit > tests. > > +**/ > > +EFI_STATUS > > +EFIAPI > > +UefiTestMain ( > > + VOID > > + ) > > +{ > > + EFI_STATUS Status; > > + UNIT_TEST_FRAMEWORK_HANDLE Framework; > > + > > + DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_NAME, > UNIT_TEST_VERSION )); > > + CreateUnitTest(UNIT_TEST_NAME, UNIT_TEST_VERSION, > &Framework); > > + > > + // > > + // Execute the tests. > > + // > > + Status = RunAllTestSuites (Framework); > > + if (Framework) { > > + FreeUnitTestFramework (Framework); > > + } > > + > > + return Status; > > +} > > + > > +/** > > + Standard POSIX C entry point for host based unit test > execution. > > +**/ > > +int > > +main ( > > + int argc, > > + char *argv[] > > + ) > > +{ > > + EFI_STATUS Status; > > + // Install the BaseCryptLib protocol > > + // Run the tests > > + Status = UefiTestMain (); > > + // Uninstall it > > + return Status; > > +} > > diff --git a/CryptoPkg/CryptoPkg.ci.yaml > b/CryptoPkg/CryptoPkg.ci.yaml > index f54ebfb22e70..0228e63d6617 100644 > --- a/CryptoPkg/CryptoPkg.ci.yaml > +++ b/CryptoPkg/CryptoPkg.ci.yaml > @@ -8,6 +8,10 @@ > "CompilerPlugin": { > > "DscPath": "CryptoPkg.dsc" > > }, > > + ## options defined > .pytool/Plugin/HostUnitTestCompilerPlugin > > + "HostUnitTestCompilerPlugin": { > > + "DscPath": > "Test/UnitTest/CryptoPkgHostUnitTest.dsc" > > + }, > > "CharEncodingCheck": { > > "IgnoreFiles": [] > > }, > > diff --git a/CryptoPkg/CryptoPkg.dsc > b/CryptoPkg/CryptoPkg.dsc > index 1af78468a19c..28295ec80ec6 100644 > --- a/CryptoPkg/CryptoPkg.dsc > +++ b/CryptoPkg/CryptoPkg.dsc > @@ -223,6 +223,32 @@ > # generated for it, but the binary will not be > put into any firmware volume. > > # > > > ######################################################## > ########################################### > > +[Components] > > + CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf > > + > CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib. > inf > > + > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCry > ptLibUefiShell.inf { > > + <LibraryClasses> > > + > PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPo > int.inf > > + > UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint > /UefiDriverEntryPoint.inf > > + > UefiApplicationEntryPoint|MdePkg/Library/UefiApplication > EntryPoint/UefiApplicationEntryPoint.inf > > + > > + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf > > + > BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib > .inf > > + > DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNul > l.inf > > + > MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationL > ib/UefiMemoryAllocationLib.inf > > + > PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf > > + > PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServices > Lib.inf > > + > PerformanceLib|MdePkg/Library/BasePerformanceLibNull/Bas > ePerformanceLibNull.inf > > + > PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf > > + > UefiBootServicesTableLib|MdePkg/Library/UefiBootServices > TableLib/UefiBootServicesTableLib.inf > > + > > + > UnitTestLib|UnitTestFrameworkPkg/Library/UnitTestLib/Uni > tTestLib.inf > > + > UnitTestPersistenceLib|UnitTestFrameworkPkg/Library/Unit > TestPersistenceLibNull/UnitTestPersistenceLibNull.inf > > + > UnitTestResultReportLib|UnitTestFrameworkPkg/Library/Uni > tTestResultReportLib/UnitTestResultReportLibDebugLib.inf > > + <LibraryClasses.common.UEFI_APPLICATION> > > + > UnitTestResultReportLib|UnitTestFrameworkPkg/Library/Uni > tTestResultReportLib/UnitTestResultReportLibConOut.inf > > + } > > + > > !if $(CRYPTO_SERVICES) == PACKAGE > > [Components] > > CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf > > diff --git > a/CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLi > b.inf > b/CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLi > b.inf > new file mode 100644 > index 000000000000..47515f06687e > --- /dev/null > +++ > b/CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLi > b.inf > @@ -0,0 +1,90 @@ > +## @file > > +# Cryptographic Library Instance for host based unit > tests > > +# > > +# Copyright (c) 2009 - 2019, Intel Corporation. All > rights reserved.<BR> > > +# Copyright (c) Microsoft Corporation. > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +# > > +## > > + > > +[Defines] > > + INF_VERSION = 0x00010005 > > + BASE_NAME = BaseCryptLib > > + FILE_GUID = c97d34aa-caf8-42cd- > 8261-8705f46304b3 > > + MODULE_TYPE = DXE_DRIVER > > + VERSION_STRING = 1.0 > > + LIBRARY_CLASS = > BaseCryptLib|DXE_DRIVER DXE_CORE UEFI_APPLICATION > UEFI_DRIVER > > + > > +# > > +# The following information is for reference only and > not required by the build tools. > > +# > > +# VALID_ARCHITECTURES = IA32 X64 ARM AARCH64 > > +# > > + > > +[Sources] > > + InternalCryptLib.h > > + Hash/CryptMd5.c > > + Hash/CryptSha1.c > > + Hash/CryptSha256.c > > + Hash/CryptSha512.c > > + Hash/CryptSm3.c > > + Hmac/CryptHmacSha256.c > > + Kdf/CryptHkdf.c > > + Cipher/CryptAes.c > > + Pk/CryptRsaBasic.c > > + Pk/CryptRsaExt.c > > + Pk/CryptPkcs1Oaep.c > > + Pk/CryptPkcs5Pbkdf2.c > > + Pk/CryptPkcs7Sign.c > > + Pk/CryptPkcs7VerifyCommon.c > > + Pk/CryptPkcs7VerifyBase.c > > + Pk/CryptPkcs7VerifyEku.c > > + Pk/CryptDh.c > > + Pk/CryptX509.c > > + Pk/CryptAuthenticode.c > > + Pk/CryptTs.c > > + Pem/CryptPem.c > > + > > + SysCall/UnitTestHostCrtWrapper.c > > + > > +[Sources.Ia32] > > + Rand/CryptRandTsc.c > > + > > +[Sources.X64] > > + Rand/CryptRandTsc.c > > + > > +[Sources.ARM] > > + Rand/CryptRand.c > > + > > +[Sources.AARCH64] > > + Rand/CryptRand.c > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + CryptoPkg/CryptoPkg.dec > > + > > +[LibraryClasses] > > + BaseLib > > + BaseMemoryLib > > + MemoryAllocationLib > > + DebugLib > > + OpensslLib > > + > > +# > > +# Remove these [BuildOptions] after this library is > cleaned up > > +# > > +[BuildOptions] > > + # > > + # suppress the following warnings so we do not break > the build with warnings-as-errors: > > + # C4090: 'function' : different 'const' qualifiers > > + # C4018: '>': signed/unsigned mismatch > > + MSFT:*_*_*_CC_FLAGS = /wd4090 /wd4018 > > + > > + # -JCryptoPkg/Include : To disable the use of the > system includes provided by RVCT > > + # --diag_remark=1 : Reduce severity of "#1-D: > last line of file ends without a newline" > > + RVCT:*_*_ARM_CC_FLAGS = -JCryptoPkg/Include -- > diag_remark=1 > > + > > + GCC:*_CLANG35_*_CC_FLAGS = -std=c99 > > + GCC:*_CLANG38_*_CC_FLAGS = -std=c99 > > + > > + XCODE:*_*_*_CC_FLAGS = -std=c99 > > diff --git > a/CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc > b/CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc > new file mode 100644 > index 000000000000..d8605176e697 > --- /dev/null > +++ b/CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc > @@ -0,0 +1,35 @@ > +## @file > > +# CryptoPkg DSC file used to build host-based unit > tests. > > +# > > +# Copyright (c) Microsoft Corporation.<BR> > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +# > > +## > > + > > +[Defines] > > + PLATFORM_NAME = CryptoPkgHostTest > > + PLATFORM_GUID = C7F97D6D-54AC-45A9-8197- > CC99B20CC7EC > > + PLATFORM_VERSION = 0.1 > > + DSC_SPECIFICATION = 0x00010005 > > + OUTPUT_DIRECTORY = Build/CryptoPkg/HostTest > > + SUPPORTED_ARCHITECTURES = IA32|X64 > > + BUILD_TARGETS = NOOPT > > + SKUID_IDENTIFIER = DEFAULT > > + > > +!include > UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc > > + > > +[LibraryClasses] > > + > OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf > > + > BaseCryptLib|CryptoPkg/Library/BaseCryptLib/UnitTestHost > BaseCryptLib.inf > > + > > +[LibraryClasses.AARCH64, LibraryClasses.ARM] > > + > RngLib|MdePkg/Library/BaseRngLibNull/BaseRngLibNull.inf > > + > > +[LibraryClasses.X64, LibraryClasses.IA32] > > + RngLib|MdePkg/Library/BaseRngLib/BaseRngLib.inf > > + > > +[Components] > > + # > > + # Build HOST_APPLICATION that tests the > SampleUnitTest > > + # > > + > CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCry > ptLibHost.inf > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuT > estSignatures.h > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuT > estSignatures.h > new file mode 100644 > index 000000000000..9f5f813ef8b1 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuT > estSignatures.h > @@ -0,0 +1,789 @@ > +/*++ > > + > > +Copyright (C) Microsoft Corporation. All Rights > Reserved. > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +Module Name: > > + AllTestSignatures.h > > + > > +Abstract: > > + This file has test signatures in byte array format > for Unit-Testing the > > + Enhanced Key Usage (EKU) parsing function. > > + > > + EFI_STATUS > > + EFIAPI > > + VerifyEKUsInPkcs7Signature ( > > + IN CONST UINT8 *Pkcs7Signature, > > + IN CONST UINT32 SignatureSize, > > + IN CONST CHAR8 *RequiredEKUs[], > > + IN CONST UINT32 RequiredEKUsSize, > > + IN BOOLEAN RequireAllPresent > > + ); > > + > > + Note: These byte arrays were created by running > BinToH.exe on the P7B > > + signature files. > > +--*/ > > + > > + > > +// > > +// This is the ProductionECCSignature.p7b in byte array > format. It has one > > +// EKU in it. (Firmware signing) > > +// "1.3.6.1.4.1.311.76.9.21.1" > > +// > > +CONST UINT8 ProductionECCSignature[] = > > +{ > > + 0x30, 0x82, 0x04, 0xC0, 0x02, 0x01, 0x01, 0x31, 0x0F, > 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, > > + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, > 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, > > + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x03, 0x80, > 0x30, 0x82, 0x03, 0x7C, 0x30, 0x82, 0x03, > > + 0x22, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x13, 0x33, > 0x00, 0x00, 0x00, 0x03, 0x7E, 0x2E, 0x8F, > > + 0xBD, 0xA5, 0xC9, 0x2C, 0x13, 0x00, 0x00, 0x00, 0x00, > 0x00, 0x03, 0x30, 0x0A, 0x06, 0x08, 0x2A, > > + 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x81, > 0x8F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, > > + 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, > 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, > > + 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, > 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, > > + 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, > 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, > > + 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, > 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, > > + 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, > 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x39, > > + 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x30, > 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, > > + 0x66, 0x74, 0x20, 0x45, 0x43, 0x43, 0x20, 0x53, 0x75, > 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x41, > > + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x79, 0x20, > 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, > > + 0x65, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x38, > 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, > > + 0x37, 0x31, 0x32, 0x31, 0x38, 0x33, 0x37, 0x30, 0x37, > 0x5A, 0x17, 0x0D, 0x31, 0x39, 0x30, 0x37, > > + 0x31, 0x32, 0x31, 0x38, 0x33, 0x37, 0x30, 0x37, 0x5A, > 0x30, 0x3A, 0x31, 0x38, 0x30, 0x36, 0x06, > > + 0x03, 0x55, 0x04, 0x03, 0x13, 0x2F, 0x4D, 0x69, 0x63, > 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, > > + 0x45, 0x43, 0x43, 0x20, 0x53, 0x75, 0x72, 0x66, 0x61, > 0x63, 0x65, 0x20, 0x41, 0x63, 0x63, 0x65, > > + 0x73, 0x73, 0x6F, 0x72, 0x79, 0x20, 0x46, 0x69, 0x72, > 0x6D, 0x77, 0x61, 0x72, 0x65, 0x20, 0x53, > > + 0x69, 0x67, 0x6E, 0x65, 0x72, 0x30, 0x59, 0x30, 0x13, > 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, > > + 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, > 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, > > + 0x7D, 0xDF, 0xDE, 0xFA, 0xEE, 0xA5, 0x66, 0x33, 0xAA, > 0xCC, 0xA4, 0x18, 0x65, 0x9E, 0x3A, 0xC6, > > + 0x4B, 0xCB, 0xD5, 0x78, 0x94, 0x14, 0xEE, 0xAA, 0xF3, > 0x9D, 0xCB, 0x38, 0x6C, 0x5D, 0xFE, 0x3F, > > + 0x8A, 0xA9, 0x8D, 0x04, 0xD2, 0xFE, 0xAA, 0x38, 0xF3, > 0xD6, 0x4A, 0x7E, 0xCF, 0x12, 0x95, 0xCF, > > + 0xAD, 0x92, 0x33, 0xF7, 0x38, 0x83, 0xC5, 0xFD, 0xCF, > 0xD0, 0x96, 0x08, 0xCA, 0x62, 0x7D, 0x22, > > + 0xA3, 0x82, 0x01, 0xAF, 0x30, 0x82, 0x01, 0xAB, 0x30, > 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, > > + 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, > 0x16, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, > > + 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, > 0x01, 0x82, 0x37, 0x4C, 0x09, 0x15, 0x01, > > + 0x30, 0x0C, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, > 0xFF, 0x04, 0x02, 0x30, 0x00, 0x30, 0x1D, > > + 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, > 0xE7, 0xD1, 0xD4, 0x74, 0x71, 0xF4, 0xC9, > > + 0x35, 0x04, 0xA7, 0x9A, 0x1E, 0x0C, 0xDD, 0xF4, 0x8D, > 0x5C, 0x1E, 0xF2, 0x29, 0x30, 0x37, 0x06, > > + 0x03, 0x55, 0x1D, 0x11, 0x04, 0x30, 0x30, 0x2E, 0xA4, > 0x2C, 0x30, 0x2A, 0x31, 0x10, 0x30, 0x0E, > > + 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x07, 0x53, 0x75, > 0x72, 0x66, 0x61, 0x63, 0x65, 0x31, 0x16, > > + 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x05, 0x13, 0x0D, > 0x34, 0x34, 0x30, 0x38, 0x31, 0x31, 0x2B, > > + 0x34, 0x34, 0x30, 0x38, 0x36, 0x32, 0x30, 0x1F, 0x06, > 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, > > + 0x16, 0x80, 0x14, 0x6F, 0x3A, 0xCC, 0x1B, 0x2F, 0x17, > 0x5C, 0xED, 0xEB, 0xC8, 0xBF, 0x93, 0xA7, > > + 0xB5, 0x93, 0xD1, 0x4D, 0x40, 0xAA, 0x03, 0x30, 0x75, > 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x6E, > > + 0x30, 0x6C, 0x30, 0x6A, 0xA0, 0x68, 0xA0, 0x66, 0x86, > 0x64, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, > > + 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, > 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, > > + 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x6F, 0x70, 0x73, > 0x2F, 0x63, 0x72, 0x6C, 0x2F, 0x4D, 0x69, > > + 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x25, 0x32, > 0x30, 0x45, 0x43, 0x43, 0x25, 0x32, 0x30, > > + 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x25, 0x32, > 0x30, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, > > + 0x6F, 0x72, 0x79, 0x25, 0x32, 0x30, 0x46, 0x69, 0x72, > 0x6D, 0x77, 0x61, 0x72, 0x65, 0x25, 0x32, > > + 0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x32, 0x30, 0x31, > 0x38, 0x2E, 0x63, 0x72, 0x6C, 0x30, 0x81, > > + 0x82, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, > 0x01, 0x01, 0x04, 0x76, 0x30, 0x74, 0x30, > > + 0x72, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, > 0x30, 0x02, 0x86, 0x66, 0x68, 0x74, 0x74, > > + 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, > 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, > > + 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, > 0x6F, 0x70, 0x73, 0x2F, 0x63, 0x65, 0x72, > > + 0x74, 0x73, 0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, > 0x6F, 0x66, 0x74, 0x25, 0x32, 0x30, 0x45, > > + 0x43, 0x43, 0x25, 0x32, 0x30, 0x53, 0x75, 0x72, 0x66, > 0x61, 0x63, 0x65, 0x25, 0x32, 0x30, 0x41, > > + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x79, 0x25, > 0x32, 0x30, 0x46, 0x69, 0x72, 0x6D, 0x77, > > + 0x61, 0x72, 0x65, 0x25, 0x32, 0x30, 0x43, 0x41, 0x25, > 0x32, 0x30, 0x32, 0x30, 0x31, 0x38, 0x2E, > > + 0x63, 0x72, 0x74, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, > 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, > > + 0x48, 0x00, 0x30, 0x45, 0x02, 0x20, 0x3D, 0xCF, 0xEF, > 0xB8, 0xF0, 0x87, 0xEE, 0x7E, 0x80, 0x71, > > + 0x04, 0x77, 0x68, 0xDC, 0x66, 0x2F, 0x09, 0xA7, 0xF0, > 0x76, 0x57, 0x7C, 0x12, 0x5A, 0xE4, 0x80, > > + 0x5A, 0xA0, 0xF2, 0x2C, 0x45, 0x1B, 0x02, 0x21, 0x00, > 0xEB, 0x5F, 0x89, 0xD5, 0xEB, 0x03, 0x46, > > + 0x9E, 0x08, 0x95, 0x2A, 0x39, 0x30, 0x5D, 0x49, 0xB6, > 0x24, 0xCE, 0x78, 0x1B, 0xB8, 0x1D, 0x0F, > > + 0xD1, 0x24, 0xD0, 0xA9, 0x18, 0x0F, 0x45, 0x4F, 0xF6, > 0x31, 0x82, 0x01, 0x17, 0x30, 0x82, 0x01, > > + 0x13, 0x02, 0x01, 0x01, 0x30, 0x81, 0xA7, 0x30, 0x81, > 0x8F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, > > + 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, > 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, > > + 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, > 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, > > + 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, > 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, > > + 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, > 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, > > + 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, > 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x39, > > + 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x30, > 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, > > + 0x66, 0x74, 0x20, 0x45, 0x43, 0x43, 0x20, 0x53, 0x75, > 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x41, > > + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x79, 0x20, > 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, > > + 0x65, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x38, > 0x02, 0x13, 0x33, 0x00, 0x00, 0x00, 0x03, > > + 0x7E, 0x2E, 0x8F, 0xBD, 0xA5, 0xC9, 0x2C, 0x13, 0x00, > 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x0D, > > + 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, > 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, > > + 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x05, > 0x00, 0x04, 0x48, 0x30, 0x46, 0x02, 0x21, > > + 0x00, 0x85, 0xC7, 0x25, 0x5C, 0xF8, 0x5A, 0x13, 0xB7, > 0xB6, 0x3A, 0xF1, 0x04, 0x72, 0xAC, 0xB3, > > + 0xF8, 0xC3, 0xE0, 0xE3, 0xD7, 0x98, 0x1B, 0xCF, 0x04, > 0xA8, 0x0C, 0x7B, 0xBB, 0x7D, 0x40, 0xC2, > > + 0x99, 0x02, 0x21, 0x00, 0xA3, 0x83, 0x12, 0xE4, 0xB6, > 0x3C, 0xC9, 0x3F, 0x05, 0xCF, 0x70, 0x57, > > + 0x54, 0x74, 0x0E, 0xEC, 0x14, 0xAD, 0x2C, 0x66, 0x9D, > 0x72, 0x73, 0x62, 0x41, 0xA6, 0xC7, 0x90, > > + 0x05, 0x35, 0xF5, 0x80, > > +}; > > + > > +// > > +// This is the > TestSignedWithMultipleCerts.bin.Signature.p7b in byte > array > > +// format. It has two certs in it, and the leaf has an > EKU of > > +// "1.3.6.1.4.1.311.76.9.21.1" > > +// > > +CONST UINT8 TestSignedMultipleCerts[] = > > +{ > > + 0x30, 0x82, 0x04, 0x90, 0x02, 0x01, 0x01, 0x31, 0x0F, > 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, > > + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, > 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, > > + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x03, 0xC2, > 0x30, 0x82, 0x01, 0xC5, 0x30, 0x82, 0x01, > > + 0x6A, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x16, > 0x2F, 0xD8, 0x2B, 0x8A, 0x98, 0x6A, 0x8A, > > + 0x43, 0xC2, 0x22, 0xA5, 0x47, 0xA1, 0x18, 0xDD, 0x30, > 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > > + 0x3D, 0x04, 0x03, 0x02, 0x30, 0x26, 0x31, 0x24, 0x30, > 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, > > + 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, > 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, > > + 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, > 0x72, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, > > + 0x31, 0x38, 0x30, 0x37, 0x31, 0x38, 0x32, 0x33, 0x31, > 0x36, 0x31, 0x32, 0x5A, 0x17, 0x0D, 0x33, > > + 0x38, 0x30, 0x37, 0x31, 0x38, 0x32, 0x33, 0x32, 0x36, > 0x31, 0x32, 0x5A, 0x30, 0x28, 0x31, 0x26, > > + 0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1D, > 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, > > + 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, 0x77, > 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, > > + 0x65, 0x72, 0x4C, 0x65, 0x61, 0x66, 0x30, 0x59, 0x30, > 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, > > + 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, > > + 0x04, 0x2E, 0x4C, 0x85, 0xFD, 0x86, 0x85, 0x4C, 0x55, > 0x96, 0x17, 0xE3, 0x0C, 0xC1, 0xCB, 0xD9, > > + 0x95, 0xCF, 0xC7, 0xEA, 0x57, 0x02, 0x5C, 0x4F, 0x92, > 0x7C, 0x35, 0xBF, 0x2B, 0x3D, 0xBA, 0x14, > > + 0xE5, 0x39, 0x9D, 0x9B, 0x64, 0x4A, 0x25, 0x29, 0xD5, > 0x61, 0xDA, 0xFD, 0x51, 0x24, 0xB3, 0xE2, > > + 0x4E, 0x00, 0x59, 0xDF, 0xB4, 0x96, 0x42, 0x59, 0xA4, > 0xBC, 0xA7, 0x64, 0x8F, 0x3A, 0x17, 0x33, > > + 0x55, 0xA3, 0x78, 0x30, 0x76, 0x30, 0x0E, 0x06, 0x03, > 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, > > + 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03, > 0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, > > + 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, > 0x4C, 0x09, 0x15, 0x01, 0x30, 0x0C, 0x06, > > + 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x02, > 0x30, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55, > > + 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x63, > 0x69, 0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, > > + 0xEA, 0x55, 0x95, 0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, > 0xA9, 0x2D, 0x2F, 0x30, 0x1D, 0x06, 0x03, > > + 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xD6, 0x4A, > 0xF8, 0x77, 0x21, 0x34, 0xEC, 0xC0, 0xAE, > > + 0x4D, 0x8F, 0x17, 0x86, 0xFF, 0xEA, 0xE3, 0x83, 0x42, > 0x32, 0x83, 0x30, 0x0A, 0x06, 0x08, 0x2A, > > + 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x49, > 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x9A, > > + 0xAB, 0xE3, 0x6F, 0xD7, 0xB3, 0x0F, 0x83, 0x8A, 0xA1, > 0x64, 0x70, 0xC1, 0xAC, 0x54, 0xE2, 0x59, > > + 0x7C, 0x8B, 0x11, 0x8F, 0x76, 0xB1, 0x9C, 0x5F, 0xDA, > 0x7D, 0x04, 0x3C, 0x73, 0xB5, 0xCF, 0x02, > > + 0x21, 0x00, 0xB3, 0x31, 0xC1, 0x48, 0x3C, 0xEE, 0xA1, > 0x6D, 0xA9, 0xF7, 0xF5, 0x9F, 0xD3, 0x6F, > > + 0x7D, 0x6F, 0xAB, 0x76, 0x12, 0xEE, 0x01, 0x4D, 0xFC, > 0xE6, 0x87, 0xEA, 0xAB, 0x09, 0x98, 0xD8, > > + 0x97, 0x6F, 0x30, 0x82, 0x01, 0xF5, 0x30, 0x82, 0x01, > 0x58, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, > > + 0x10, 0x4D, 0x88, 0xBF, 0x04, 0xDF, 0x10, 0x57, 0xBA, > 0x43, 0x53, 0x6C, 0xFD, 0xA5, 0x90, 0xA7, > > + 0x6F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > 0x3D, 0x04, 0x03, 0x02, 0x30, 0x28, 0x31, > > + 0x26, 0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, > 0x1D, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, > > + 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, > 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, > > + 0x6E, 0x65, 0x72, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E, > 0x17, 0x0D, 0x31, 0x38, 0x30, 0x31, 0x31, > > + 0x36, 0x32, 0x33, 0x32, 0x31, 0x31, 0x33, 0x5A, 0x17, > 0x0D, 0x33, 0x38, 0x30, 0x31, 0x31, 0x36, > > + 0x32, 0x33, 0x33, 0x31, 0x31, 0x33, 0x5A, 0x30, 0x26, > 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, > > + 0x04, 0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, > 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, > > + 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, > 0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, > > + 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, > 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, > > + 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, > 0x04, 0x0E, 0x58, 0xA3, 0xDB, 0xD3, 0x9C, > > + 0x21, 0xFC, 0x63, 0x6F, 0xBD, 0xB9, 0xA7, 0x8A, 0xB3, > 0xBF, 0x40, 0x87, 0x43, 0x06, 0x53, 0x91, > > + 0x54, 0x31, 0x11, 0x0D, 0x3B, 0x50, 0x32, 0xEA, 0x11, > 0xA3, 0x3D, 0x77, 0x08, 0x9E, 0xBC, 0x06, > > + 0x5C, 0x21, 0x48, 0x9D, 0x9B, 0x7C, 0x45, 0xFD, 0x4B, > 0xD7, 0x0C, 0x04, 0xD4, 0xE0, 0x0C, 0xB7, > > + 0x6C, 0xBF, 0x22, 0xE1, 0x00, 0x99, 0x75, 0x39, 0x27, > 0x59, 0xA3, 0x66, 0x30, 0x64, 0x30, 0x0E, > > + 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, > 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x12, > > + 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, > 0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, > > + 0x01, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, > 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x6D, > > + 0x8B, 0x24, 0xBF, 0x20, 0x9D, 0x54, 0xAF, 0x04, 0x5B, > 0x84, 0x91, 0x96, 0xAE, 0x99, 0xC1, 0x23, > > + 0x1C, 0x0E, 0xAC, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, > 0x0E, 0x04, 0x16, 0x04, 0x14, 0x63, 0x69, > > + 0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95, > 0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9, > > + 0x2D, 0x2F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, > 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x81, > > + 0x8A, 0x00, 0x30, 0x81, 0x86, 0x02, 0x41, 0x2A, 0xD4, > 0xFC, 0x35, 0x28, 0x73, 0x9F, 0xB3, 0x8A, > > + 0xE3, 0x13, 0x7F, 0xCA, 0x36, 0x88, 0x1E, 0xD0, 0x95, > 0xDC, 0xE9, 0x8A, 0x9D, 0xC0, 0x27, 0x8C, > > + 0xD8, 0x57, 0x57, 0x5F, 0xDC, 0x13, 0x53, 0x68, 0xED, > 0x2F, 0x4D, 0x6A, 0x77, 0xA2, 0x55, 0x48, > > + 0xCB, 0x24, 0x55, 0x3A, 0x30, 0x32, 0xE5, 0x5C, 0xDF, > 0x96, 0xF1, 0x15, 0xD4, 0xE7, 0xCD, 0x6A, > > + 0x26, 0xBD, 0x7B, 0x92, 0x50, 0x74, 0xE4, 0x56, 0x02, > 0x41, 0x46, 0x33, 0x61, 0x30, 0xFF, 0xA8, > > + 0x53, 0x31, 0x38, 0xCA, 0x6B, 0x77, 0x88, 0x36, 0x9A, > 0x0B, 0x57, 0xC3, 0xD1, 0xB2, 0xA7, 0x40, > > + 0x53, 0x6A, 0xD1, 0x6C, 0x8A, 0x8B, 0x3C, 0x29, 0xC1, > 0x2B, 0x82, 0x61, 0x2F, 0x1A, 0x9F, 0x2C, > > + 0x9A, 0x81, 0xD0, 0x2B, 0x3E, 0x0D, 0x99, 0xB7, 0xD4, > 0x7E, 0xA7, 0xEA, 0x0C, 0x8E, 0x13, 0x0E, > > + 0x53, 0x65, 0x48, 0x17, 0xE5, 0xFA, 0x91, 0x79, 0x98, > 0xC7, 0xA1, 0x31, 0x81, 0xA6, 0x30, 0x81, > > + 0xA3, 0x02, 0x01, 0x01, 0x30, 0x3A, 0x30, 0x26, 0x31, > 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, > > + 0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, > 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, > > + 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, > 0x6E, 0x65, 0x72, 0x43, 0x41, 0x02, 0x10, > > + 0x16, 0x2F, 0xD8, 0x2B, 0x8A, 0x98, 0x6A, 0x8A, 0x43, > 0xC2, 0x22, 0xA5, 0x47, 0xA1, 0x18, 0xDD, > > + 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, > 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, > > + 0x0B, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, > 0x01, 0x05, 0x00, 0x04, 0x46, 0x30, 0x44, > > + 0x02, 0x20, 0x40, 0xD4, 0xD4, 0xAF, 0x89, 0xFA, 0x83, > 0x44, 0x7B, 0x59, 0xB4, 0x2B, 0x99, 0xF0, > > + 0xD4, 0xB0, 0x75, 0x2E, 0x56, 0xAA, 0x0A, 0xDA, 0xCC, > 0x82, 0xD5, 0xBC, 0x8D, 0xC4, 0x00, 0xF6, > > + 0x46, 0xA4, 0x02, 0x20, 0x6F, 0xA7, 0xE1, 0x32, 0xB2, > 0xF2, 0x5A, 0x69, 0xC5, 0x45, 0xB6, 0x35, > > + 0x04, 0x05, 0x9B, 0xAC, 0x44, 0xB4, 0xA0, 0xE1, 0x25, > 0x92, 0xE8, 0x3E, 0x8F, 0x85, 0xA3, 0xBE, > > + 0x34, 0xFE, 0x78, 0x31, > > +}; > > + > > +// > > +// This is the > TestSignedWithMultipleEKUsInCert.bin.Signature.p7b > signature in > > +// byte array format. It has two EKU's in it: > > +// "1.3.6.1.4.1.311.76.9.21.1" > > +// "1.3.6.1.4.1.311.76.9.21.2" > > +// > > +CONST UINT8 TestSignedWithMultipleEKUsInCert[] = > > +{ > > + 0x30, 0x82, 0x06, 0x2C, 0x02, 0x01, 0x01, 0x31, 0x0F, > 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, > > + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, > 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, > > + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x04, 0x9E, > 0x30, 0x82, 0x01, 0xF5, 0x30, 0x82, 0x01, > > + 0x58, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x4D, > 0x88, 0xBF, 0x04, 0xDF, 0x10, 0x57, 0xBA, > > + 0x43, 0x53, 0x6C, 0xFD, 0xA5, 0x90, 0xA7, 0x6F, 0x30, > 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > > + 0x3D, 0x04, 0x03, 0x02, 0x30, 0x28, 0x31, 0x26, 0x30, > 0x24, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, > > + 0x1D, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, > 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, > > + 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, > 0x72, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E, > > + 0x17, 0x0D, 0x31, 0x38, 0x30, 0x31, 0x31, 0x36, 0x32, > 0x33, 0x32, 0x31, 0x31, 0x33, 0x5A, 0x17, > > + 0x0D, 0x33, 0x38, 0x30, 0x31, 0x31, 0x36, 0x32, 0x33, > 0x33, 0x31, 0x31, 0x33, 0x5A, 0x30, 0x26, > > + 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, > 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, > > + 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, > 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, > > + 0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x59, 0x30, > 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, > > + 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, > > + 0x04, 0x0E, 0x58, 0xA3, 0xDB, 0xD3, 0x9C, 0x21, 0xFC, > 0x63, 0x6F, 0xBD, 0xB9, 0xA7, 0x8A, 0xB3, > > + 0xBF, 0x40, 0x87, 0x43, 0x06, 0x53, 0x91, 0x54, 0x31, > 0x11, 0x0D, 0x3B, 0x50, 0x32, 0xEA, 0x11, > > + 0xA3, 0x3D, 0x77, 0x08, 0x9E, 0xBC, 0x06, 0x5C, 0x21, > 0x48, 0x9D, 0x9B, 0x7C, 0x45, 0xFD, 0x4B, > > + 0xD7, 0x0C, 0x04, 0xD4, 0xE0, 0x0C, 0xB7, 0x6C, 0xBF, > 0x22, 0xE1, 0x00, 0x99, 0x75, 0x39, 0x27, > > + 0x59, 0xA3, 0x66, 0x30, 0x64, 0x30, 0x0E, 0x06, 0x03, > 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, > > + 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x12, 0x06, 0x03, > 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, > > + 0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, > 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, > > + 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x6D, 0x8B, 0x24, > 0xBF, 0x20, 0x9D, 0x54, 0xAF, 0x04, 0x5B, > > + 0x84, 0x91, 0x96, 0xAE, 0x99, 0xC1, 0x23, 0x1C, 0x0E, > 0xAC, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, > > + 0x0E, 0x04, 0x16, 0x04, 0x14, 0x63, 0x69, 0x95, 0xE3, > 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95, > > + 0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9, 0x2D, 0x2F, > 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, > > + 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x81, 0x8A, 0x00, > 0x30, 0x81, 0x86, 0x02, 0x41, 0x2A, 0xD4, > > + 0xFC, 0x35, 0x28, 0x73, 0x9F, 0xB3, 0x8A, 0xE3, 0x13, > 0x7F, 0xCA, 0x36, 0x88, 0x1E, 0xD0, 0x95, > > + 0xDC, 0xE9, 0x8A, 0x9D, 0xC0, 0x27, 0x8C, 0xD8, 0x57, > 0x57, 0x5F, 0xDC, 0x13, 0x53, 0x68, 0xED, > > + 0x2F, 0x4D, 0x6A, 0x77, 0xA2, 0x55, 0x48, 0xCB, 0x24, > 0x55, 0x3A, 0x30, 0x32, 0xE5, 0x5C, 0xDF, > > + 0x96, 0xF1, 0x15, 0xD4, 0xE7, 0xCD, 0x6A, 0x26, 0xBD, > 0x7B, 0x92, 0x50, 0x74, 0xE4, 0x56, 0x02, > > + 0x41, 0x46, 0x33, 0x61, 0x30, 0xFF, 0xA8, 0x53, 0x31, > 0x38, 0xCA, 0x6B, 0x77, 0x88, 0x36, 0x9A, > > + 0x0B, 0x57, 0xC3, 0xD1, 0xB2, 0xA7, 0x40, 0x53, 0x6A, > 0xD1, 0x6C, 0x8A, 0x8B, 0x3C, 0x29, 0xC1, > > + 0x2B, 0x82, 0x61, 0x2F, 0x1A, 0x9F, 0x2C, 0x9A, 0x81, > 0xD0, 0x2B, 0x3E, 0x0D, 0x99, 0xB7, 0xD4, > > + 0x7E, 0xA7, 0xEA, 0x0C, 0x8E, 0x13, 0x0E, 0x53, 0x65, > 0x48, 0x17, 0xE5, 0xFA, 0x91, 0x79, 0x98, > > + 0xC7, 0xA1, 0x30, 0x82, 0x02, 0xA1, 0x30, 0x82, 0x02, > 0x47, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, > > + 0x10, 0x29, 0xBB, 0x52, 0x25, 0xED, 0x34, 0xB7, 0xBA, > 0x40, 0xF8, 0xC3, 0x14, 0xB5, 0xC8, 0x86, > > + 0x9E, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > 0x3D, 0x04, 0x03, 0x02, 0x30, 0x26, 0x31, > > + 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, > 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, > > + 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, > 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, > > + 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, > 0x31, 0x38, 0x30, 0x37, 0x32, 0x37, 0x32, > > + 0x30, 0x33, 0x34, 0x31, 0x31, 0x5A, 0x17, 0x0D, 0x32, > 0x33, 0x30, 0x37, 0x32, 0x37, 0x32, 0x30, > > + 0x34, 0x34, 0x31, 0x31, 0x5A, 0x30, 0x3A, 0x31, 0x38, > 0x30, 0x36, 0x06, 0x03, 0x55, 0x04, 0x03, > > + 0x0C, 0x2F, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x72, > 0x66, 0x61, 0x63, 0x65, 0x46, 0x69, 0x72, > > + 0x6D, 0x77, 0x61, 0x72, 0x65, 0x4C, 0x65, 0x61, 0x66, > 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x4D, > > + 0x75, 0x6C, 0x74, 0x69, 0x70, 0x6C, 0x65, 0x45, 0x4B, > 0x55, 0x73, 0x49, 0x6E, 0x43, 0x65, 0x72, > > + 0x74, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, > 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, > > + 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, > 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, > > + 0x01, 0x00, 0xD0, 0x61, 0xA5, 0xCD, 0x49, 0x4B, 0x5C, > 0x88, 0x89, 0x09, 0xCA, 0xE7, 0xEB, 0x58, > > + 0x91, 0x8F, 0x59, 0xBE, 0xE8, 0x16, 0xC0, 0xEF, 0x75, > 0xE5, 0x18, 0x88, 0xE8, 0xCE, 0xFA, 0xD2, > > + 0xB0, 0x77, 0xC1, 0xD2, 0xF2, 0x9E, 0x65, 0xE8, 0xDB, > 0x6B, 0x8C, 0x93, 0xE5, 0x39, 0x1D, 0xF9, > > + 0x37, 0x2A, 0x52, 0x7F, 0xC3, 0x93, 0xD7, 0x9F, 0x03, > 0x83, 0xBC, 0x6E, 0xC6, 0x83, 0x64, 0x15, > > + 0x1A, 0x5C, 0x74, 0x41, 0x40, 0x21, 0xC9, 0x25, 0xF0, > 0x14, 0xA3, 0x29, 0x97, 0x29, 0x8C, 0x5D, > > + 0xED, 0xE9, 0x8D, 0x66, 0xCC, 0xD1, 0xD1, 0xE0, 0x08, > 0x52, 0xA5, 0x93, 0x07, 0xCB, 0xF8, 0x95, > > + 0x2C, 0x8D, 0x29, 0x84, 0x10, 0x5F, 0x57, 0x52, 0x10, > 0x75, 0x35, 0x8A, 0x84, 0xE3, 0xAE, 0x10, > > + 0x57, 0x29, 0xE9, 0xEB, 0x6E, 0xD2, 0xC7, 0x6D, 0x35, > 0x43, 0x67, 0x82, 0xE3, 0x98, 0x29, 0x9C, > > + 0x59, 0x77, 0xA0, 0x00, 0x27, 0xB2, 0x5D, 0xB9, 0x84, > 0x31, 0x89, 0x2F, 0x77, 0xC5, 0xB9, 0x23, > > + 0xE0, 0x14, 0x94, 0x6F, 0x33, 0xD5, 0x3B, 0x58, 0xFB, > 0xD6, 0xB6, 0xE5, 0xD4, 0x09, 0x3D, 0xB2, > > + 0xE7, 0x87, 0xC6, 0xEA, 0x73, 0x61, 0x6D, 0xDA, 0xFA, > 0x95, 0x2B, 0x2B, 0x8A, 0xEC, 0x7E, 0x68, > > + 0x0F, 0x98, 0x16, 0x08, 0xFF, 0xB2, 0xC1, 0xBF, 0xAB, > 0x3D, 0xB0, 0xC2, 0xD5, 0x16, 0xAE, 0x71, > > + 0x54, 0x48, 0xD1, 0x52, 0x72, 0xFD, 0x42, 0x09, 0x66, > 0xAF, 0x50, 0xDE, 0x4C, 0x3C, 0x6A, 0xBC, > > + 0x1F, 0xC5, 0x0A, 0xA0, 0xC5, 0x9A, 0xF1, 0xB2, 0xB2, > 0x3F, 0x14, 0xE1, 0x93, 0x07, 0xF0, 0x00, > > + 0x04, 0xEF, 0x16, 0x76, 0x18, 0x10, 0x65, 0x63, 0x42, > 0x42, 0x12, 0xD0, 0x65, 0xF5, 0xA2, 0xCF, > > + 0x90, 0xBE, 0x65, 0x57, 0x25, 0x8C, 0xAC, 0x5E, 0x05, > 0x31, 0x91, 0x9E, 0x4D, 0x18, 0xBC, 0x15, > > + 0x30, 0x7B, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x78, > 0x30, 0x76, 0x30, 0x0E, 0x06, 0x03, 0x55, > > + 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, > 0x01, 0x86, 0x30, 0x24, 0x06, 0x03, 0x55, > > + 0x1D, 0x25, 0x04, 0x1D, 0x30, 0x1B, 0x06, 0x0B, 0x2B, > 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x4C, > > + 0x09, 0x15, 0x01, 0x06, 0x0C, 0x2B, 0x06, 0x01, 0x04, > 0x01, 0x82, 0x37, 0x4C, 0x09, 0x15, 0x01, > > + 0x02, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, > 0x18, 0x30, 0x16, 0x80, 0x14, 0x63, 0x69, > > + 0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95, > 0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9, > > + 0x2D, 0x2F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, > 0x04, 0x16, 0x04, 0x14, 0xC0, 0xDC, 0xCB, > > + 0x76, 0x52, 0x84, 0x91, 0xF5, 0x37, 0x0D, 0x85, 0xB6, > 0x45, 0x23, 0xFA, 0xA0, 0xAD, 0xC1, 0x1D, > > + 0x92, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > 0x3D, 0x04, 0x03, 0x02, 0x03, 0x48, 0x00, > > + 0x30, 0x45, 0x02, 0x21, 0x00, 0xF4, 0xB0, 0x8A, 0x91, > 0x96, 0x61, 0xDF, 0xC3, 0x54, 0xA5, 0xB3, > > + 0x1A, 0x3C, 0x28, 0x06, 0xC0, 0xA1, 0xF5, 0x72, 0xD1, > 0x02, 0x5C, 0x69, 0xB6, 0x6C, 0xA8, 0xDC, > > + 0x6B, 0x78, 0xD9, 0x0C, 0x9A, 0x02, 0x20, 0x37, 0x2C, > 0x61, 0x9E, 0x6E, 0x5F, 0xC6, 0xFA, 0x92, > > + 0x52, 0xB0, 0x4E, 0x52, 0xC7, 0xF1, 0xE9, 0x0F, 0xB6, > 0xD5, 0x08, 0x10, 0x41, 0x3A, 0x61, 0xFD, > > + 0xC5, 0x70, 0x87, 0xBB, 0x49, 0x82, 0xEA, 0x31, 0x82, > 0x01, 0x65, 0x30, 0x82, 0x01, 0x61, 0x02, > > + 0x01, 0x01, 0x30, 0x3A, 0x30, 0x26, 0x31, 0x24, 0x30, > 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, > > + 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, > 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, > > + 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, > 0x72, 0x43, 0x41, 0x02, 0x10, 0x29, 0xBB, > > + 0x52, 0x25, 0xED, 0x34, 0xB7, 0xBA, 0x40, 0xF8, 0xC3, > 0x14, 0xB5, 0xC8, 0x86, 0x9E, 0x30, 0x0D, > > + 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, > 0x02, 0x01, 0x05, 0x00, 0x30, 0x0D, 0x06, > > + 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, > 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, > > + 0xBB, 0x51, 0xDD, 0x8F, 0xB4, 0x99, 0x37, 0x13, 0x94, > 0x6F, 0x09, 0x05, 0xBA, 0x5B, 0x8D, 0x86, > > + 0x9A, 0xB0, 0x51, 0xEB, 0x6B, 0x10, 0xD7, 0xD1, 0x95, > 0x4A, 0x4D, 0x23, 0xA3, 0x37, 0x82, 0xDF, > > + 0x1F, 0x24, 0xE4, 0x62, 0x4F, 0xD4, 0x52, 0x73, 0xF8, > 0x39, 0x2B, 0x46, 0xF4, 0x61, 0xCE, 0xF1, > > + 0x64, 0xD7, 0x60, 0xC9, 0xCC, 0xCA, 0x8D, 0x94, 0xA5, > 0x67, 0x68, 0x2B, 0xE4, 0xB0, 0xD7, 0x64, > > + 0xC8, 0xF3, 0x9C, 0x98, 0x2C, 0x0A, 0x69, 0x56, 0xD6, > 0x59, 0xDF, 0x4D, 0x38, 0xE7, 0xD4, 0x63, > > + 0x2B, 0x74, 0xA1, 0xA3, 0xF9, 0xE1, 0x1A, 0x12, 0x2B, > 0x04, 0x46, 0x11, 0xA8, 0x26, 0x00, 0x15, > > + 0x4F, 0x14, 0x7F, 0xB1, 0xB4, 0x25, 0x0C, 0x87, 0xB0, > 0x56, 0x8C, 0xBE, 0x0D, 0xFA, 0x66, 0x6F, > > + 0x8A, 0xCB, 0x0A, 0x88, 0x3B, 0xF6, 0x52, 0xCD, 0xBB, > 0xA2, 0xA9, 0xAD, 0xAD, 0x09, 0x0D, 0xDA, > > + 0x79, 0x8A, 0xAE, 0xE5, 0x9D, 0xCE, 0x5C, 0x60, 0x99, > 0x67, 0x26, 0xC4, 0xAF, 0xD4, 0x01, 0xB1, > > + 0x6D, 0xD1, 0x8C, 0x4D, 0x1D, 0xBD, 0xAB, 0x42, 0x2C, > 0xF2, 0xD8, 0x07, 0x3F, 0xDC, 0x5E, 0x68, > > + 0x4C, 0xD9, 0xDB, 0xC0, 0x93, 0xBB, 0x8E, 0xA0, 0xA2, > 0x09, 0x5F, 0x03, 0x58, 0x48, 0x54, 0xF6, > > + 0xF0, 0xDA, 0x7A, 0x7F, 0xC4, 0xD2, 0x9F, 0x64, 0xF5, > 0x85, 0x86, 0x48, 0xDF, 0x7F, 0x86, 0x14, > > + 0x7C, 0x62, 0x77, 0x1D, 0x22, 0xE5, 0x34, 0x42, 0xE4, > 0x49, 0x38, 0xB4, 0xE4, 0x22, 0xFB, 0x5F, > > + 0xB5, 0xEA, 0xBA, 0x90, 0x51, 0xC0, 0xC6, 0x94, 0x09, > 0xE4, 0xB7, 0x15, 0x3F, 0x07, 0x23, 0xE8, > > + 0x46, 0x93, 0xA5, 0x7B, 0x7A, 0x91, 0xDA, 0x8E, 0x7C, > 0xAF, 0xBD, 0x41, 0xB9, 0xDE, 0x85, 0x04, > > + 0xBC, 0x08, 0x6C, 0x08, 0x56, 0x16, 0xDB, 0xB5, 0xEE, > 0x65, 0x76, 0xE9, 0x78, 0xD3, 0xDD, 0xD8, > > + > > +}; > > + > > +// > > +// This is the TestSignedWithProductId10001.bin.p7b in > byte array format. > > +// It has two EKU's in it: (Product ID is 10001) > > +// "1.3.6.1.4.1.311.76.9.21.1" > > +// "1.3.6.1.4.1.311.76.9.21.1.10001" > > +// > > +CONST UINT8 TestSignedWithProductId10001[] = > > +{ > > + 0x30, 0x82, 0x06, 0x1E, 0x02, 0x01, 0x01, 0x31, 0x0F, > 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, > > + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, > 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, > > + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x04, 0x90, > 0x30, 0x82, 0x01, 0xF5, 0x30, 0x82, 0x01, > > + 0x58, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x4D, > 0x88, 0xBF, 0x04, 0xDF, 0x10, 0x57, 0xBA, > > + 0x43, 0x53, 0x6C, 0xFD, 0xA5, 0x90, 0xA7, 0x6F, 0x30, > 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > > + 0x3D, 0x04, 0x03, 0x02, 0x30, 0x28, 0x31, 0x26, 0x30, > 0x24, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, > > + 0x1D, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, > 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, > > + 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, > 0x72, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E, > > + 0x17, 0x0D, 0x31, 0x38, 0x30, 0x31, 0x31, 0x36, 0x32, > 0x33, 0x32, 0x31, 0x31, 0x33, 0x5A, 0x17, > > + 0x0D, 0x33, 0x38, 0x30, 0x31, 0x31, 0x36, 0x32, 0x33, > 0x33, 0x31, 0x31, 0x33, 0x5A, 0x30, 0x26, > > + 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, > 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, > > + 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, > 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, > > + 0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x59, 0x30, > 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, > > + 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, > > + 0x04, 0x0E, 0x58, 0xA3, 0xDB, 0xD3, 0x9C, 0x21, 0xFC, > 0x63, 0x6F, 0xBD, 0xB9, 0xA7, 0x8A, 0xB3, > > + 0xBF, 0x40, 0x87, 0x43, 0x06, 0x53, 0x91, 0x54, 0x31, > 0x11, 0x0D, 0x3B, 0x50, 0x32, 0xEA, 0x11, > > + 0xA3, 0x3D, 0x77, 0x08, 0x9E, 0xBC, 0x06, 0x5C, 0x21, > 0x48, 0x9D, 0x9B, 0x7C, 0x45, 0xFD, 0x4B, > > + 0xD7, 0x0C, 0x04, 0xD4, 0xE0, 0x0C, 0xB7, 0x6C, 0xBF, > 0x22, 0xE1, 0x00, 0x99, 0x75, 0x39, 0x27, > > + 0x59, 0xA3, 0x66, 0x30, 0x64, 0x30, 0x0E, 0x06, 0x03, > 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, > > + 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x12, 0x06, 0x03, > 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, > > + 0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, > 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, > > + 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x6D, 0x8B, 0x24, > 0xBF, 0x20, 0x9D, 0x54, 0xAF, 0x04, 0x5B, > > + 0x84, 0x91, 0x96, 0xAE, 0x99, 0xC1, 0x23, 0x1C, 0x0E, > 0xAC, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, > > + 0x0E, 0x04, 0x16, 0x04, 0x14, 0x63, 0x69, 0x95, 0xE3, > 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95, > > + 0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9, 0x2D, 0x2F, > 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, > > + 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x81, 0x8A, 0x00, > 0x30, 0x81, 0x86, 0x02, 0x41, 0x2A, 0xD4, > > + 0xFC, 0x35, 0x28, 0x73, 0x9F, 0xB3, 0x8A, 0xE3, 0x13, > 0x7F, 0xCA, 0x36, 0x88, 0x1E, 0xD0, 0x95, > > + 0xDC, 0xE9, 0x8A, 0x9D, 0xC0, 0x27, 0x8C, 0xD8, 0x57, > 0x57, 0x5F, 0xDC, 0x13, 0x53, 0x68, 0xED, > > + 0x2F, 0x4D, 0x6A, 0x77, 0xA2, 0x55, 0x48, 0xCB, 0x24, > 0x55, 0x3A, 0x30, 0x32, 0xE5, 0x5C, 0xDF, > > + 0x96, 0xF1, 0x15, 0xD4, 0xE7, 0xCD, 0x6A, 0x26, 0xBD, > 0x7B, 0x92, 0x50, 0x74, 0xE4, 0x56, 0x02, > > + 0x41, 0x46, 0x33, 0x61, 0x30, 0xFF, 0xA8, 0x53, 0x31, > 0x38, 0xCA, 0x6B, 0x77, 0x88, 0x36, 0x9A, > > + 0x0B, 0x57, 0xC3, 0xD1, 0xB2, 0xA7, 0x40, 0x53, 0x6A, > 0xD1, 0x6C, 0x8A, 0x8B, 0x3C, 0x29, 0xC1, > > + 0x2B, 0x82, 0x61, 0x2F, 0x1A, 0x9F, 0x2C, 0x9A, 0x81, > 0xD0, 0x2B, 0x3E, 0x0D, 0x99, 0xB7, 0xD4, > > + 0x7E, 0xA7, 0xEA, 0x0C, 0x8E, 0x13, 0x0E, 0x53, 0x65, > 0x48, 0x17, 0xE5, 0xFA, 0x91, 0x79, 0x98, > > + 0xC7, 0xA1, 0x30, 0x82, 0x02, 0x93, 0x30, 0x82, 0x02, > 0x39, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, > > + 0x10, 0x1F, 0x65, 0xF1, 0x29, 0x3B, 0x89, 0x6A, 0xBF, > 0x43, 0xAF, 0xC7, 0x30, 0x36, 0xD1, 0x0D, > > + 0x2B, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > 0x3D, 0x04, 0x03, 0x02, 0x30, 0x26, 0x31, > > + 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, > 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, > > + 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, > 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, > > + 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, > 0x31, 0x38, 0x30, 0x38, 0x30, 0x32, 0x31, > > + 0x36, 0x34, 0x32, 0x32, 0x33, 0x5A, 0x17, 0x0D, 0x32, > 0x33, 0x30, 0x38, 0x30, 0x32, 0x31, 0x36, > > + 0x35, 0x32, 0x32, 0x33, 0x5A, 0x30, 0x2B, 0x31, 0x29, > 0x30, 0x27, 0x06, 0x03, 0x55, 0x04, 0x03, > > + 0x0C, 0x20, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, > 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, > > + 0x67, 0x6E, 0x65, 0x72, 0x50, 0x72, 0x6F, 0x64, 0x75, > 0x63, 0x74, 0x49, 0x44, 0x31, 0x30, 0x30, > > + 0x30, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, > 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, > > + 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, > 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, > > + 0x01, 0x01, 0x00, 0x8C, 0x26, 0x35, 0xBC, 0x18, 0x06, > 0x44, 0x65, 0xF6, 0x55, 0x29, 0x78, 0x26, > > + 0xCA, 0x57, 0xD0, 0x4C, 0x31, 0x84, 0x5B, 0x64, 0xDE, > 0x8E, 0x34, 0x84, 0x45, 0x12, 0xE8, 0x5A, > > + 0x86, 0x4B, 0x5A, 0x61, 0x4C, 0xD8, 0xE2, 0x7D, 0x3B, > 0xBD, 0x25, 0x58, 0x30, 0x1D, 0x5E, 0x65, > > + 0x50, 0xC3, 0x07, 0xF2, 0x50, 0xE1, 0x48, 0x2A, 0xD9, > 0x70, 0x5F, 0xF3, 0x2B, 0xF1, 0x1F, 0x21, > > + 0x06, 0x62, 0x81, 0xE9, 0x8E, 0xDA, 0xDC, 0x69, 0xA3, > 0x6E, 0x2F, 0xD2, 0x3A, 0x79, 0x01, 0xAF, > > + 0xA1, 0x2A, 0x28, 0xDD, 0x32, 0x4E, 0xCE, 0x40, 0xB8, > 0x41, 0xA4, 0x7D, 0x3D, 0x70, 0x3F, 0xC4, > > + 0xDA, 0x61, 0x18, 0xBF, 0xFC, 0xAB, 0x16, 0xE3, 0x65, > 0x3F, 0x6D, 0x76, 0x37, 0xAD, 0x1F, 0x11, > > + 0x05, 0x0F, 0xC2, 0x56, 0xD1, 0x45, 0xBD, 0x25, 0xCC, > 0x19, 0xC4, 0x2A, 0x03, 0xED, 0x3B, 0x05, > > + 0xA7, 0x87, 0x30, 0xE6, 0x84, 0x11, 0x88, 0xD0, 0x91, > 0x4E, 0x52, 0xB5, 0x97, 0xDF, 0x57, 0xEF, > > + 0x5E, 0x72, 0x68, 0x49, 0x85, 0xC8, 0x7F, 0xA7, 0x5F, > 0x7B, 0xE7, 0xCE, 0xA1, 0x53, 0xBA, 0xF8, > > + 0xA9, 0xDF, 0x8C, 0x8C, 0x72, 0xD2, 0xA9, 0x7A, 0xF5, > 0x07, 0x4A, 0x75, 0x1A, 0x0F, 0x50, 0x9E, > > + 0xEA, 0x4C, 0xFC, 0xC7, 0x74, 0xE2, 0x4D, 0xD1, 0x01, > 0xC4, 0xB6, 0xCA, 0xA5, 0xCC, 0x23, 0xFA, > > + 0xDE, 0xF2, 0x9C, 0x8B, 0xA6, 0x32, 0x8D, 0xED, 0x97, > 0xCC, 0x50, 0xB0, 0xB6, 0x1C, 0x89, 0x64, > > + 0xFC, 0xD7, 0xD0, 0x19, 0x01, 0x50, 0xD9, 0xBC, 0x78, > 0xB1, 0x76, 0x6D, 0x01, 0xF8, 0xEC, 0x68, > > + 0x97, 0x20, 0x32, 0xD0, 0x57, 0x76, 0x93, 0x73, 0xC9, > 0x2B, 0x68, 0x9D, 0x5E, 0xE1, 0x70, 0xDD, > > + 0x6F, 0x3A, 0x09, 0x20, 0x63, 0xE9, 0xD9, 0x30, 0x05, > 0x14, 0x4A, 0x76, 0xA7, 0x3E, 0x61, 0xCD, > > + 0x2F, 0x6D, 0xE3, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, > 0x79, 0x30, 0x77, 0x30, 0x0E, 0x06, 0x03, > > + 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, > 0x02, 0x01, 0x86, 0x30, 0x25, 0x06, 0x03, > > + 0x55, 0x1D, 0x25, 0x04, 0x1E, 0x30, 0x1C, 0x06, 0x0B, > 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, > > + 0x4C, 0x09, 0x15, 0x01, 0x06, 0x0D, 0x2B, 0x06, 0x01, > 0x04, 0x01, 0x82, 0x37, 0x4C, 0x09, 0x15, > > + 0x01, 0xCE, 0x11, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, > 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, > > + 0x63, 0x69, 0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, 0xEA, > 0x55, 0x95, 0x54, 0x07, 0xC4, 0xC5, 0x2A, > > + 0xD2, 0xA9, 0x2D, 0x2F, 0x30, 0x1D, 0x06, 0x03, 0x55, > 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x09, > > + 0x10, 0xEE, 0x7B, 0xB0, 0x56, 0xB0, 0xCE, 0x42, 0x83, > 0x84, 0x90, 0x70, 0xAF, 0x8D, 0x58, 0x1B, > > + 0x77, 0x43, 0x0E, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, > 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, > > + 0x48, 0x00, 0x30, 0x45, 0x02, 0x21, 0x00, 0xEE, 0x2A, > 0x00, 0x7E, 0xC6, 0x4E, 0x6F, 0x22, 0xCC, > > + 0x16, 0xEA, 0xAC, 0x90, 0x3D, 0xD7, 0x6E, 0xAA, 0xBF, > 0x7E, 0xC7, 0x45, 0x3F, 0x36, 0x22, 0x81, > > + 0xC6, 0x38, 0xD3, 0x1E, 0xDF, 0x5F, 0x2C, 0x02, 0x20, > 0x21, 0xEC, 0xCF, 0x78, 0x1D, 0xDB, 0x4F, > > + 0x50, 0xE8, 0xD6, 0x07, 0xB0, 0x6A, 0xE9, 0x1E, 0xBF, > 0x9C, 0xE8, 0xB9, 0xF7, 0xC6, 0xEA, 0x04, > > + 0x7B, 0x5E, 0xD8, 0x67, 0xAB, 0xD2, 0xDE, 0x77, 0xB9, > 0x31, 0x82, 0x01, 0x65, 0x30, 0x82, 0x01, > > + 0x61, 0x02, 0x01, 0x01, 0x30, 0x3A, 0x30, 0x26, 0x31, > 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, > > + 0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, > 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, > > + 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, > 0x6E, 0x65, 0x72, 0x43, 0x41, 0x02, 0x10, > > + 0x1F, 0x65, 0xF1, 0x29, 0x3B, 0x89, 0x6A, 0xBF, 0x43, > 0xAF, 0xC7, 0x30, 0x36, 0xD1, 0x0D, 0x2B, > > + 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, > 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, > > + 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, > 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, > > + 0x01, 0x00, 0x1F, 0x7F, 0x30, 0xDC, 0xD4, 0x12, 0x9D, > 0x0B, 0x71, 0x30, 0x69, 0x91, 0xCC, 0x8A, > > + 0xFB, 0xF6, 0x54, 0x14, 0x4C, 0x0B, 0x78, 0xCE, 0xD3, > 0xC6, 0xCE, 0x3E, 0xAC, 0xCC, 0x0F, 0xCE, > > + 0x3A, 0xFC, 0x63, 0x96, 0xD2, 0x7B, 0xDB, 0xF7, 0xE7, > 0x6D, 0x64, 0x52, 0x5C, 0x5D, 0x19, 0xBF, > > + 0xE3, 0x04, 0x71, 0x8A, 0xD1, 0x2A, 0xB6, 0x5A, 0x8C, > 0xFC, 0xE2, 0x51, 0x27, 0x64, 0x9B, 0xA8, > > + 0x84, 0x69, 0x60, 0x4E, 0x56, 0x83, 0x91, 0x4F, 0xEB, > 0x5A, 0xB7, 0x73, 0xE1, 0xAC, 0x24, 0xD2, > > + 0x60, 0xD8, 0x58, 0x21, 0x51, 0x7B, 0x87, 0x93, 0x5B, > 0x5F, 0x91, 0x4B, 0x8C, 0xFE, 0xA5, 0x16, > > + 0x2E, 0x33, 0x4D, 0xBB, 0x0C, 0x95, 0x5C, 0xC3, 0x9C, > 0x3D, 0xBB, 0x58, 0x17, 0x39, 0x1E, 0x10, > > + 0x47, 0xCD, 0xEE, 0xD3, 0xE7, 0x73, 0x44, 0x7D, 0x35, > 0xD9, 0x9F, 0xC3, 0xAC, 0x11, 0x2E, 0x29, > > + 0x54, 0x80, 0x8F, 0x19, 0xDC, 0xC3, 0x11, 0x3D, 0x75, > 0xF0, 0x3B, 0x34, 0x63, 0xB1, 0x59, 0x1D, > > + 0x4B, 0x66, 0xBE, 0xB8, 0xAC, 0x36, 0x71, 0x63, 0xD4, > 0x41, 0xCF, 0x24, 0x2A, 0x3F, 0xC5, 0x25, > > + 0xD2, 0x45, 0x9B, 0xD3, 0x77, 0xD8, 0xD8, 0x1A, 0xC6, > 0xAE, 0xE3, 0xF5, 0xC5, 0xEB, 0xF3, 0x92, > > + 0x27, 0x3C, 0x3F, 0x48, 0x96, 0xF2, 0xB4, 0x66, 0x0A, > 0xFB, 0xBF, 0x76, 0xDC, 0x1E, 0xC5, 0xC6, > > + 0x4D, 0xA1, 0x5C, 0x13, 0x22, 0xF8, 0x89, 0xE2, 0x15, > 0x43, 0x84, 0xEF, 0xC8, 0x30, 0xE5, 0xF0, > > + 0xBA, 0x51, 0x96, 0x3E, 0xF9, 0xCB, 0x41, 0xE6, 0x36, > 0xD4, 0xE3, 0xDA, 0x71, 0xC8, 0x5E, 0x43, > > + 0x7A, 0xBE, 0x8E, 0xC0, 0xA5, 0xEF, 0x66, 0xFD, 0x63, > 0xD3, 0xF1, 0xBF, 0x66, 0x4F, 0x35, 0x24, > > + 0x66, 0xC9, 0xCD, 0x1E, 0x3D, 0x71, 0x19, 0x84, 0x1A, > 0x9D, 0xA5, 0x56, 0xF4, 0xF9, 0xE0, 0x88, > > + 0x7C, 0x52, > > +}; > > + > > +// > > +// This is TestSignEKUsWith1CertInSignature.bin.p7b in > byte array format. > > +// It has one EKU in it: > > +// "1.3.6.1.4.1.311.76.9.21.1" > > +// > > +CONST UINT8 TestSignEKUsWith1CertInSignature[] = > > +{ > > + 0x30, 0x82, 0x02, 0x7D, 0x02, 0x01, 0x01, 0x31, 0x0F, > 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, > > + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, > 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, > > + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x01, 0xB2, > 0x30, 0x82, 0x01, 0xAE, 0x30, 0x82, 0x01, > > + 0x53, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x3E, > 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96, > > + 0x41, 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30, > 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > > + 0x3D, 0x04, 0x03, 0x02, 0x30, 0x22, 0x31, 0x20, 0x30, > 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, > > + 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, > 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49, > > + 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30, > 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, > > + 0x31, 0x35, 0x31, 0x37, 0x33, 0x35, 0x35, 0x30, 0x5A, > 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31, > > + 0x35, 0x31, 0x37, 0x34, 0x35, 0x35, 0x30, 0x5A, 0x30, > 0x23, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03, > > + 0x55, 0x04, 0x03, 0x0C, 0x18, 0x54, 0x65, 0x73, 0x74, > 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, > > + 0x69, 0x6E, 0x67, 0x4C, 0x65, 0x61, 0x66, 0x53, 0x69, > 0x67, 0x6E, 0x65, 0x72, 0x30, 0x59, 0x30, > > + 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, > 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > > + 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xF6, > 0xEA, 0x5E, 0x14, 0x20, 0x6D, 0x11, 0xC0, > > + 0xFD, 0xF9, 0xB9, 0xB5, 0x8F, 0xBB, 0x3E, 0x8B, 0xE8, > 0x21, 0x21, 0x3A, 0xC2, 0xBA, 0x37, 0x24, > > + 0x61, 0x14, 0x7E, 0xA8, 0x86, 0x0A, 0x5C, 0xD3, 0x5F, > 0xA8, 0xDC, 0x3A, 0x06, 0x30, 0x53, 0xFC, > > + 0x85, 0xBC, 0x60, 0x5C, 0x28, 0x07, 0xCA, 0x12, 0x40, > 0xE8, 0x97, 0x6A, 0x63, 0x30, 0xF7, 0x37, > > + 0x25, 0x76, 0x4D, 0xA9, 0x1A, 0x8C, 0x36, 0xAA, 0xA3, > 0x6A, 0x30, 0x68, 0x30, 0x0E, 0x06, 0x03, > > + 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, > 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03, > > + 0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, > 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, > > + 0x4C, 0x09, 0x15, 0x01, 0x30, 0x1F, 0x06, 0x03, 0x55, > 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, > > + 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, > 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, 0x9C, > > + 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x1D, 0x06, 0x03, > 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, > > + 0xE8, 0x47, 0x05, 0xA2, 0x59, 0xE9, 0x89, 0x81, 0xF4, > 0xC8, 0x0D, 0x4C, 0x0A, 0xD3, 0xD4, 0xDE, > > + 0x9F, 0xA6, 0xC7, 0x79, 0x30, 0x0A, 0x06, 0x08, 0x2A, > 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, > > + 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x8C, > 0x39, 0xC6, 0x6C, 0xD6, 0x8F, 0x20, 0xA5, > > + 0x85, 0x97, 0x27, 0xF9, 0xB5, 0x26, 0xA2, 0xAB, 0xEC, > 0x2E, 0x1B, 0x6F, 0x6F, 0x79, 0x9F, 0x8D, > > + 0xCE, 0x9D, 0x12, 0x23, 0x5F, 0x04, 0xFA, 0xBE, 0x02, > 0x21, 0x00, 0xC5, 0xD8, 0x49, 0xD1, 0x40, > > + 0xE3, 0x2C, 0xDF, 0xC3, 0xD4, 0x11, 0xF9, 0x5E, 0x10, > 0x8A, 0x3C, 0x4E, 0xA0, 0xD6, 0x6B, 0x8C, > > + 0x0E, 0x7B, 0xF1, 0x2B, 0x20, 0x9C, 0x68, 0x53, 0x43, > 0x4B, 0x35, 0x31, 0x81, 0xA3, 0x30, 0x81, > > + 0xA0, 0x02, 0x01, 0x01, 0x30, 0x36, 0x30, 0x22, 0x31, > 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04, > > + 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, > 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, > > + 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, > 0x41, 0x02, 0x10, 0x3E, 0xEE, 0x4B, 0xFB, > > + 0x00, 0x35, 0xC8, 0x96, 0x41, 0xF4, 0xF6, 0x57, 0x16, > 0xAD, 0x20, 0xCB, 0x30, 0x0D, 0x06, 0x09, > > + 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, > 0x05, 0x00, 0x30, 0x0B, 0x06, 0x07, 0x2A, > > + 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x05, 0x00, 0x04, > 0x47, 0x30, 0x45, 0x02, 0x21, 0x00, 0xB8, > > + 0xCC, 0x0F, 0xD2, 0x50, 0x47, 0x3A, 0x11, 0x8D, 0xAE, > 0x6C, 0xE9, 0x03, 0x64, 0xA7, 0x44, 0xE6, > > + 0x0F, 0xF8, 0x6F, 0x7E, 0xE7, 0x61, 0x25, 0x8C, 0x67, > 0xE8, 0xC2, 0xD6, 0x33, 0x91, 0x62, 0x02, > > + 0x20, 0x78, 0xF8, 0x94, 0x0F, 0x46, 0xD2, 0xE2, 0x2B, > 0x33, 0xAF, 0xBD, 0x38, 0xA4, 0x43, 0xA6, > > + 0x6F, 0x8A, 0xBE, 0x26, 0xDC, 0xD0, 0x82, 0x01, 0x3D, > 0x00, 0xF3, 0xC2, 0x07, 0x8A, 0xE8, 0xFD, > > + 0x18, > > +}; > > + > > +// > > +// This is TestSignEKUsWith2CertsInSignature.bin.p7b in > byte array format. > > +// It has one EKU in it: > > +// "1.3.6.1.4.1.311.76.9.21.1" > > +// > > +CONST UINT8 TestSignEKUsWith2CertsInSignature[] = > > +{ > > + 0x30, 0x82, 0x04, 0x61, 0x02, 0x01, 0x01, 0x31, 0x0F, > 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, > > + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, > 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, > > + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x03, 0x96, > 0x30, 0x82, 0x01, 0xAE, 0x30, 0x82, 0x01, > > + 0x53, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x3E, > 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96, > > + 0x41, 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30, > 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > > + 0x3D, 0x04, 0x03, 0x02, 0x30, 0x22, 0x31, 0x20, 0x30, > 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, > > + 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, > 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49, > > + 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30, > 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, > > + 0x31, 0x35, 0x31, 0x37, 0x33, 0x35, 0x35, 0x30, 0x5A, > 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31, > > + 0x35, 0x31, 0x37, 0x34, 0x35, 0x35, 0x30, 0x5A, 0x30, > 0x23, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03, > > + 0x55, 0x04, 0x03, 0x0C, 0x18, 0x54, 0x65, 0x73, 0x74, > 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, > > + 0x69, 0x6E, 0x67, 0x4C, 0x65, 0x61, 0x66, 0x53, 0x69, > 0x67, 0x6E, 0x65, 0x72, 0x30, 0x59, 0x30, > > + 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, > 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > > + 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xF6, > 0xEA, 0x5E, 0x14, 0x20, 0x6D, 0x11, 0xC0, > > + 0xFD, 0xF9, 0xB9, 0xB5, 0x8F, 0xBB, 0x3E, 0x8B, 0xE8, > 0x21, 0x21, 0x3A, 0xC2, 0xBA, 0x37, 0x24, > > + 0x61, 0x14, 0x7E, 0xA8, 0x86, 0x0A, 0x5C, 0xD3, 0x5F, > 0xA8, 0xDC, 0x3A, 0x06, 0x30, 0x53, 0xFC, > > + 0x85, 0xBC, 0x60, 0x5C, 0x28, 0x07, 0xCA, 0x12, 0x40, > 0xE8, 0x97, 0x6A, 0x63, 0x30, 0xF7, 0x37, > > + 0x25, 0x76, 0x4D, 0xA9, 0x1A, 0x8C, 0x36, 0xAA, 0xA3, > 0x6A, 0x30, 0x68, 0x30, 0x0E, 0x06, 0x03, > > + 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, > 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03, > > + 0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, > 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, > > + 0x4C, 0x09, 0x15, 0x01, 0x30, 0x1F, 0x06, 0x03, 0x55, > 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, > > + 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, > 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, 0x9C, > > + 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x1D, 0x06, 0x03, > 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, > > + 0xE8, 0x47, 0x05, 0xA2, 0x59, 0xE9, 0x89, 0x81, 0xF4, > 0xC8, 0x0D, 0x4C, 0x0A, 0xD3, 0xD4, 0xDE, > > + 0x9F, 0xA6, 0xC7, 0x79, 0x30, 0x0A, 0x06, 0x08, 0x2A, > 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, > > + 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x8C, > 0x39, 0xC6, 0x6C, 0xD6, 0x8F, 0x20, 0xA5, > > + 0x85, 0x97, 0x27, 0xF9, 0xB5, 0x26, 0xA2, 0xAB, 0xEC, > 0x2E, 0x1B, 0x6F, 0x6F, 0x79, 0x9F, 0x8D, > > + 0xCE, 0x9D, 0x12, 0x23, 0x5F, 0x04, 0xFA, 0xBE, 0x02, > 0x21, 0x00, 0xC5, 0xD8, 0x49, 0xD1, 0x40, > > + 0xE3, 0x2C, 0xDF, 0xC3, 0xD4, 0x11, 0xF9, 0x5E, 0x10, > 0x8A, 0x3C, 0x4E, 0xA0, 0xD6, 0x6B, 0x8C, > > + 0x0E, 0x7B, 0xF1, 0x2B, 0x20, 0x9C, 0x68, 0x53, 0x43, > 0x4B, 0x35, 0x30, 0x82, 0x01, 0xE0, 0x30, > > + 0x82, 0x01, 0x65, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, > 0x10, 0x79, 0x28, 0x1A, 0xE8, 0x7F, 0x21, > > + 0x4F, 0xBB, 0x47, 0x2F, 0x74, 0x75, 0xE6, 0x98, 0x60, > 0xD6, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, > > + 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x21, 0x31, > 0x1F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x04, > > + 0x03, 0x0C, 0x16, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, > 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, > > + 0x67, 0x50, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43, 0x41, > 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, > > + 0x38, 0x31, 0x35, 0x31, 0x37, 0x33, 0x32, 0x35, 0x34, > 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, > > + 0x31, 0x35, 0x31, 0x37, 0x34, 0x32, 0x35, 0x34, 0x5A, > 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, > > + 0x03, 0x55, 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, > 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, > > + 0x73, 0x69, 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, > 0x6E, 0x67, 0x43, 0x41, 0x30, 0x59, 0x30, > > + 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, > 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > > + 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x66, > 0x41, 0xE6, 0x86, 0x7D, 0x5B, 0x96, 0x6C, > > + 0x99, 0x2A, 0x82, 0x53, 0x58, 0xA3, 0x6F, 0x59, 0xFC, > 0x1C, 0x9F, 0xEB, 0xBE, 0x9D, 0x53, 0xBA, > > + 0x50, 0x0F, 0x66, 0xBC, 0xE5, 0x90, 0x7E, 0xAA, 0xA2, > 0x6C, 0xC2, 0xC9, 0xAA, 0x99, 0x0B, 0x04, > > + 0xA0, 0x6A, 0xB4, 0xC1, 0xF7, 0x55, 0x60, 0x58, 0xE3, > 0xDE, 0x22, 0x57, 0xB1, 0x8A, 0x5C, 0xBC, > > + 0xDF, 0x22, 0x8A, 0x2B, 0x04, 0x7D, 0x7A, 0x6C, 0xA3, > 0x7E, 0x30, 0x7C, 0x30, 0x0E, 0x06, 0x03, > > + 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, > 0x02, 0x02, 0x04, 0x30, 0x16, 0x06, 0x03, > > + 0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, > 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, > > + 0x4C, 0x09, 0x15, 0x01, 0x30, 0x12, 0x06, 0x03, 0x55, > 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08, > > + 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, > 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, > > + 0x18, 0x30, 0x16, 0x80, 0x14, 0x0B, 0x8A, 0xC7, 0xA8, > 0x53, 0x07, 0x40, 0x74, 0x75, 0x0F, 0x85, > > + 0xCE, 0x5D, 0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9, > 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, > > + 0x04, 0x16, 0x04, 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, > 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40, > > + 0x3C, 0x3E, 0x9C, 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, > 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > > + 0x3D, 0x04, 0x03, 0x02, 0x03, 0x69, 0x00, 0x30, 0x66, > 0x02, 0x31, 0x00, 0xEE, 0x78, 0xDB, 0x74, > > + 0x56, 0xA3, 0xC2, 0x44, 0x25, 0x0F, 0xA1, 0x89, 0xC0, > 0x76, 0xD1, 0xE4, 0xFE, 0xAA, 0xA4, 0xC3, > > + 0x7D, 0x40, 0xE3, 0x28, 0x1B, 0x0D, 0xAB, 0x32, 0x6B, > 0x9A, 0x60, 0x37, 0x2F, 0xB6, 0xF4, 0xCB, > > + 0xEA, 0xC8, 0x65, 0xB6, 0xDC, 0x24, 0x90, 0x10, 0xFB, > 0xD2, 0x42, 0x05, 0x02, 0x31, 0x00, 0x9E, > > + 0x91, 0xF9, 0x96, 0x8A, 0x41, 0x2C, 0x5E, 0x6B, 0xBC, > 0x36, 0x05, 0x3B, 0x50, 0x11, 0x91, 0x9A, > > + 0xFA, 0x6B, 0x7F, 0x01, 0xF4, 0x6A, 0x7E, 0xCD, 0x98, > 0x7E, 0x7D, 0xFD, 0xA8, 0xE3, 0xB2, 0x4F, > > + 0x71, 0x91, 0xF5, 0xE0, 0x82, 0xA5, 0xE7, 0x5A, 0xE8, > 0x19, 0x09, 0xF6, 0x22, 0xBE, 0xC4, 0x31, > > + 0x81, 0xA3, 0x30, 0x81, 0xA0, 0x02, 0x01, 0x01, 0x30, > 0x36, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, > > + 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, > 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, > > + 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, > 0x69, 0x6E, 0x67, 0x43, 0x41, 0x02, 0x10, > > + 0x3E, 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96, 0x41, > 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB, > > + 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, > 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, > > + 0x0B, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, > 0x01, 0x05, 0x00, 0x04, 0x47, 0x30, 0x45, > > + 0x02, 0x20, 0x4A, 0xFD, 0xAE, 0xDD, 0x5D, 0xC5, 0x86, > 0x48, 0xDC, 0xC1, 0xC3, 0xA7, 0xE6, 0x4E, > > + 0x7F, 0x8B, 0x7B, 0xAB, 0x2C, 0x60, 0xDD, 0x79, 0x4C, > 0xF2, 0x45, 0xED, 0x7A, 0xA5, 0x24, 0xE6, > > + 0x0E, 0x60, 0x02, 0x21, 0x00, 0xAD, 0xCA, 0x3C, 0x29, > 0x2F, 0xF9, 0xB1, 0x8E, 0x58, 0x29, 0x3F, > > + 0x97, 0x20, 0x03, 0x6A, 0x14, 0xDA, 0x83, 0x4A, 0x8F, > 0x3E, 0x95, 0x37, 0xC3, 0xF0, 0x12, 0x2A, > > + 0x7B, 0x24, 0x59, 0x69, 0x27, > > +}; > > + > > +// > > +// This is TestSignEKUsWith3CertsInSignature.bin.p7b > > +// It has one EKU in it: > > +// "1.3.6.1.4.1.311.76.9.21.1" > > +// > > +const UINT8 TestSignEKUsWith3CertsInSignature[] = > > +{ > > + 0x30, 0x82, 0x06, 0x65, 0x02, 0x01, 0x01, 0x31, 0x0F, > 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, > > + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, > 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, > > + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x05, 0x9B, > 0x30, 0x82, 0x01, 0xAE, 0x30, 0x82, 0x01, > > + 0x53, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x3E, > 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96, > > + 0x41, 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30, > 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > > + 0x3D, 0x04, 0x03, 0x02, 0x30, 0x22, 0x31, 0x20, 0x30, > 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, > > + 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, > 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49, > > + 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30, > 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, > > + 0x31, 0x35, 0x31, 0x37, 0x33, 0x35, 0x35, 0x30, 0x5A, > 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31, > > + 0x35, 0x31, 0x37, 0x34, 0x35, 0x35, 0x30, 0x5A, 0x30, > 0x23, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03, > > + 0x55, 0x04, 0x03, 0x0C, 0x18, 0x54, 0x65, 0x73, 0x74, > 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, > > + 0x69, 0x6E, 0x67, 0x4C, 0x65, 0x61, 0x66, 0x53, 0x69, > 0x67, 0x6E, 0x65, 0x72, 0x30, 0x59, 0x30, > > + 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, > 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > > + 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xF6, > 0xEA, 0x5E, 0x14, 0x20, 0x6D, 0x11, 0xC0, > > + 0xFD, 0xF9, 0xB9, 0xB5, 0x8F, 0xBB, 0x3E, 0x8B, 0xE8, > 0x21, 0x21, 0x3A, 0xC2, 0xBA, 0x37, 0x24, > > + 0x61, 0x14, 0x7E, 0xA8, 0x86, 0x0A, 0x5C, 0xD3, 0x5F, > 0xA8, 0xDC, 0x3A, 0x06, 0x30, 0x53, 0xFC, > > + 0x85, 0xBC, 0x60, 0x5C, 0x28, 0x07, 0xCA, 0x12, 0x40, > 0xE8, 0x97, 0x6A, 0x63, 0x30, 0xF7, 0x37, > > + 0x25, 0x76, 0x4D, 0xA9, 0x1A, 0x8C, 0x36, 0xAA, 0xA3, > 0x6A, 0x30, 0x68, 0x30, 0x0E, 0x06, 0x03, > > + 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, > 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03, > > + 0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, > 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, > > + 0x4C, 0x09, 0x15, 0x01, 0x30, 0x1F, 0x06, 0x03, 0x55, > 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, > > + 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, > 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, 0x9C, > > + 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x1D, 0x06, 0x03, > 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, > > + 0xE8, 0x47, 0x05, 0xA2, 0x59, 0xE9, 0x89, 0x81, 0xF4, > 0xC8, 0x0D, 0x4C, 0x0A, 0xD3, 0xD4, 0xDE, > > + 0x9F, 0xA6, 0xC7, 0x79, 0x30, 0x0A, 0x06, 0x08, 0x2A, > 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, > > + 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x8C, > 0x39, 0xC6, 0x6C, 0xD6, 0x8F, 0x20, 0xA5, > > + 0x85, 0x97, 0x27, 0xF9, 0xB5, 0x26, 0xA2, 0xAB, 0xEC, > 0x2E, 0x1B, 0x6F, 0x6F, 0x79, 0x9F, 0x8D, > > + 0xCE, 0x9D, 0x12, 0x23, 0x5F, 0x04, 0xFA, 0xBE, 0x02, > 0x21, 0x00, 0xC5, 0xD8, 0x49, 0xD1, 0x40, > > + 0xE3, 0x2C, 0xDF, 0xC3, 0xD4, 0x11, 0xF9, 0x5E, 0x10, > 0x8A, 0x3C, 0x4E, 0xA0, 0xD6, 0x6B, 0x8C, > > + 0x0E, 0x7B, 0xF1, 0x2B, 0x20, 0x9C, 0x68, 0x53, 0x43, > 0x4B, 0x35, 0x30, 0x82, 0x01, 0xE0, 0x30, > > + 0x82, 0x01, 0x65, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, > 0x10, 0x79, 0x28, 0x1A, 0xE8, 0x7F, 0x21, > > + 0x4F, 0xBB, 0x47, 0x2F, 0x74, 0x75, 0xE6, 0x98, 0x60, > 0xD6, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, > > + 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x21, 0x31, > 0x1F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x04, > > + 0x03, 0x0C, 0x16, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, > 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, > > + 0x67, 0x50, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43, 0x41, > 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, > > + 0x38, 0x31, 0x35, 0x31, 0x37, 0x33, 0x32, 0x35, 0x34, > 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, > > + 0x31, 0x35, 0x31, 0x37, 0x34, 0x32, 0x35, 0x34, 0x5A, > 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, > > + 0x03, 0x55, 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, > 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, > > + 0x73, 0x69, 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, > 0x6E, 0x67, 0x43, 0x41, 0x30, 0x59, 0x30, > > + 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, > 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > > + 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x66, > 0x41, 0xE6, 0x86, 0x7D, 0x5B, 0x96, 0x6C, > > + 0x99, 0x2A, 0x82, 0x53, 0x58, 0xA3, 0x6F, 0x59, 0xFC, > 0x1C, 0x9F, 0xEB, 0xBE, 0x9D, 0x53, 0xBA, > > + 0x50, 0x0F, 0x66, 0xBC, 0xE5, 0x90, 0x7E, 0xAA, 0xA2, > 0x6C, 0xC2, 0xC9, 0xAA, 0x99, 0x0B, 0x04, > > + 0xA0, 0x6A, 0xB4, 0xC1, 0xF7, 0x55, 0x60, 0x58, 0xE3, > 0xDE, 0x22, 0x57, 0xB1, 0x8A, 0x5C, 0xBC, > > + 0xDF, 0x22, 0x8A, 0x2B, 0x04, 0x7D, 0x7A, 0x6C, 0xA3, > 0x7E, 0x30, 0x7C, 0x30, 0x0E, 0x06, 0x03, > > + 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, > 0x02, 0x02, 0x04, 0x30, 0x16, 0x06, 0x03, > > + 0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, > 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, > > + 0x4C, 0x09, 0x15, 0x01, 0x30, 0x12, 0x06, 0x03, 0x55, > 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08, > > + 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, > 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, > > + 0x18, 0x30, 0x16, 0x80, 0x14, 0x0B, 0x8A, 0xC7, 0xA8, > 0x53, 0x07, 0x40, 0x74, 0x75, 0x0F, 0x85, > > + 0xCE, 0x5D, 0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9, > 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, > > + 0x04, 0x16, 0x04, 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, > 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40, > > + 0x3C, 0x3E, 0x9C, 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, > 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > > + 0x3D, 0x04, 0x03, 0x02, 0x03, 0x69, 0x00, 0x30, 0x66, > 0x02, 0x31, 0x00, 0xEE, 0x78, 0xDB, 0x74, > > + 0x56, 0xA3, 0xC2, 0x44, 0x25, 0x0F, 0xA1, 0x89, 0xC0, > 0x76, 0xD1, 0xE4, 0xFE, 0xAA, 0xA4, 0xC3, > > + 0x7D, 0x40, 0xE3, 0x28, 0x1B, 0x0D, 0xAB, 0x32, 0x6B, > 0x9A, 0x60, 0x37, 0x2F, 0xB6, 0xF4, 0xCB, > > + 0xEA, 0xC8, 0x65, 0xB6, 0xDC, 0x24, 0x90, 0x10, 0xFB, > 0xD2, 0x42, 0x05, 0x02, 0x31, 0x00, 0x9E, > > + 0x91, 0xF9, 0x96, 0x8A, 0x41, 0x2C, 0x5E, 0x6B, 0xBC, > 0x36, 0x05, 0x3B, 0x50, 0x11, 0x91, 0x9A, > > + 0xFA, 0x6B, 0x7F, 0x01, 0xF4, 0x6A, 0x7E, 0xCD, 0x98, > 0x7E, 0x7D, 0xFD, 0xA8, 0xE3, 0xB2, 0x4F, > > + 0x71, 0x91, 0xF5, 0xE0, 0x82, 0xA5, 0xE7, 0x5A, 0xE8, > 0x19, 0x09, 0xF6, 0x22, 0xBE, 0xC4, 0x30, > > + 0x82, 0x02, 0x01, 0x30, 0x82, 0x01, 0x62, 0xA0, 0x03, > 0x02, 0x01, 0x02, 0x02, 0x10, 0x41, 0x02, > > + 0xBA, 0xF9, 0x87, 0x65, 0x6C, 0xB8, 0x4C, 0xD9, 0xA1, > 0x04, 0x1C, 0x46, 0x4F, 0xE4, 0x30, 0x0A, > > + 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, > 0x02, 0x30, 0x1D, 0x31, 0x1B, 0x30, 0x19, > > + 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x12, 0x54, 0x65, > 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, > > + 0x72, 0x73, 0x69, 0x6E, 0x67, 0x52, 0x6F, 0x6F, 0x74, > 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, > > + 0x38, 0x31, 0x35, 0x31, 0x37, 0x32, 0x39, 0x32, 0x39, > 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, > > + 0x31, 0x35, 0x31, 0x37, 0x33, 0x39, 0x32, 0x39, 0x5A, > 0x30, 0x21, 0x31, 0x1F, 0x30, 0x1D, 0x06, > > + 0x03, 0x55, 0x04, 0x03, 0x0C, 0x16, 0x54, 0x65, 0x73, > 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, > > + 0x73, 0x69, 0x6E, 0x67, 0x50, 0x6F, 0x6C, 0x69, 0x63, > 0x79, 0x43, 0x41, 0x30, 0x76, 0x30, 0x10, > > + 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, > 0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22, > > + 0x03, 0x62, 0x00, 0x04, 0xF9, 0xDC, 0xB9, 0x3F, 0xA8, > 0xB5, 0x2B, 0x2E, 0xA7, 0xFC, 0x88, 0xC6, > > + 0xEF, 0x9C, 0x36, 0x61, 0x3E, 0xFF, 0x8A, 0x5A, 0x52, > 0xFF, 0x5A, 0xD0, 0x2C, 0x08, 0xD6, 0x73, > > + 0x12, 0xF9, 0x62, 0x1E, 0x73, 0x76, 0x83, 0x49, 0xC8, > 0xDE, 0xEB, 0x29, 0xA4, 0x78, 0x2A, 0xC1, > > + 0x30, 0x11, 0x0B, 0x2F, 0x38, 0x00, 0xB7, 0x6B, 0x6B, > 0x8E, 0x8C, 0x4B, 0x33, 0x09, 0xF1, 0xEA, > > + 0xA4, 0x9E, 0x10, 0x4F, 0xC3, 0xBC, 0x30, 0x16, 0x1A, > 0x8B, 0xD7, 0x9C, 0x14, 0x11, 0x4E, 0x56, > > + 0x64, 0x7E, 0x51, 0xE7, 0xDA, 0x26, 0x40, 0xB0, 0xD0, > 0xF8, 0xF2, 0xB2, 0x5D, 0x8C, 0x8B, 0x49, > > + 0x0C, 0x4E, 0x58, 0xB0, 0xA3, 0x63, 0x30, 0x61, 0x30, > 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, > > + 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, > 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, > > + 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, > 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, > > + 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x04, 0xA6, 0xCD, > 0x4D, 0xAE, 0x9C, 0x17, 0xDB, 0xC8, 0x13, > > + 0x57, 0x2D, 0x72, 0x48, 0xAC, 0xBB, 0x6B, 0x1F, 0xFF, > 0x61, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, > > + 0x0E, 0x04, 0x16, 0x04, 0x14, 0x0B, 0x8A, 0xC7, 0xA8, > 0x53, 0x07, 0x40, 0x74, 0x75, 0x0F, 0x85, > > + 0xCE, 0x5D, 0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9, > 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, > > + 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x81, 0x8C, 0x00, > 0x30, 0x81, 0x88, 0x02, 0x42, 0x01, 0xB4, > > + 0x75, 0x0B, 0x2F, 0x2A, 0xAA, 0x77, 0x03, 0x08, 0xD9, > 0x95, 0x13, 0x2C, 0xE8, 0x47, 0x69, 0x97, > > + 0xD1, 0x6B, 0xE0, 0x23, 0x94, 0xD5, 0x34, 0x8F, 0x80, > 0x20, 0xE3, 0x72, 0x07, 0x7C, 0x6A, 0x52, > > + 0xE6, 0xF2, 0xC7, 0x85, 0xBD, 0xB6, 0x65, 0x8F, 0x61, > 0x73, 0xF9, 0xE7, 0x3A, 0x31, 0x46, 0xC6, > > + 0xF2, 0xCE, 0xA7, 0x9E, 0xD0, 0xE2, 0xEF, 0x07, 0x59, > 0xD0, 0xF1, 0xC4, 0xF6, 0x58, 0x9A, 0x16, > > + 0x02, 0x42, 0x00, 0x86, 0xE0, 0x25, 0xC1, 0x48, 0xD0, > 0x33, 0x30, 0x55, 0xA8, 0x60, 0x44, 0xCA, > > + 0x47, 0x04, 0x93, 0x46, 0x81, 0xE9, 0x13, 0xE9, 0x67, > 0x26, 0x23, 0x2A, 0xBD, 0xEF, 0xC4, 0xCC, > > + 0x12, 0x99, 0xB3, 0x9E, 0x3D, 0x78, 0xC8, 0x42, 0x06, > 0x40, 0x48, 0xCA, 0x3D, 0xCC, 0xD7, 0xA2, > > + 0x35, 0x37, 0x76, 0x12, 0xDB, 0x9C, 0x90, 0xA4, 0xE4, > 0x16, 0xAC, 0x5E, 0xD8, 0x04, 0xF1, 0x59, > > + 0x66, 0x85, 0xE2, 0x68, 0x31, 0x81, 0xA2, 0x30, 0x81, > 0x9F, 0x02, 0x01, 0x01, 0x30, 0x36, 0x30, > > + 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04, > 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, > > + 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, > 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, > > + 0x67, 0x43, 0x41, 0x02, 0x10, 0x3E, 0xEE, 0x4B, 0xFB, > 0x00, 0x35, 0xC8, 0x96, 0x41, 0xF4, 0xF6, > > + 0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30, 0x0D, 0x06, 0x09, > 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, > > + 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x07, 0x2A, > 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x05, > > + 0x00, 0x04, 0x46, 0x30, 0x44, 0x02, 0x20, 0x52, 0x90, > 0x02, 0x9E, 0xE8, 0xBF, 0xE8, 0x7E, 0x05, > > + 0x3B, 0xA3, 0x93, 0xDD, 0x6C, 0x35, 0x31, 0xA3, 0x29, > 0x4F, 0x9A, 0x78, 0xEF, 0xD1, 0xAD, 0x07, > > + 0x37, 0x2D, 0x9A, 0x81, 0xFD, 0x7D, 0xFC, 0x02, 0x20, > 0x4C, 0x8A, 0xA4, 0xBD, 0x63, 0x7B, 0x8A, > > + 0x2C, 0x9E, 0xFC, 0x2A, 0x0F, 0x91, 0xF4, 0x97, 0xB5, > 0x3B, 0xC9, 0xD1, 0xCA, 0xEB, 0x02, 0x6A, > > + 0xB6, 0xFF, 0xE1, 0x15, 0xF5, 0xA2, 0x11, 0xF4, 0xD9, > > +}; > > + > > +// > > +// This signature was signed with a leaf that has no > EKU's present in the certificate. > > +// > > +CONST UINT8 TestSignatureWithNoEKUsPresent[] = > > +{ > > + 0x30, 0x82, 0x07, 0xDB, 0x02, 0x01, 0x01, 0x31, 0x0F, > 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, > > + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, > 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, > > + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x06, 0x51, > 0x30, 0x82, 0x01, 0xE0, 0x30, 0x82, 0x01, > > + 0x65, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x79, > 0x28, 0x1A, 0xE8, 0x7F, 0x21, 0x4F, 0xBB, > > + 0x47, 0x2F, 0x74, 0x75, 0xE6, 0x98, 0x60, 0xD6, 0x30, > 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > > + 0x3D, 0x04, 0x03, 0x02, 0x30, 0x21, 0x31, 0x1F, 0x30, > 0x1D, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, > > + 0x16, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, > 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x50, > > + 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43, 0x41, 0x30, 0x1E, > 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, 0x31, > > + 0x35, 0x31, 0x37, 0x33, 0x32, 0x35, 0x34, 0x5A, 0x17, > 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31, 0x35, > > + 0x31, 0x37, 0x34, 0x32, 0x35, 0x34, 0x5A, 0x30, 0x22, > 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, > > + 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, > 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, > > + 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, > 0x43, 0x41, 0x30, 0x59, 0x30, 0x13, 0x06, > > + 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, > 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, > > + 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x66, 0x41, 0xE6, > 0x86, 0x7D, 0x5B, 0x96, 0x6C, 0x99, 0x2A, > > + 0x82, 0x53, 0x58, 0xA3, 0x6F, 0x59, 0xFC, 0x1C, 0x9F, > 0xEB, 0xBE, 0x9D, 0x53, 0xBA, 0x50, 0x0F, > > + 0x66, 0xBC, 0xE5, 0x90, 0x7E, 0xAA, 0xA2, 0x6C, 0xC2, > 0xC9, 0xAA, 0x99, 0x0B, 0x04, 0xA0, 0x6A, > > + 0xB4, 0xC1, 0xF7, 0x55, 0x60, 0x58, 0xE3, 0xDE, 0x22, > 0x57, 0xB1, 0x8A, 0x5C, 0xBC, 0xDF, 0x22, > > + 0x8A, 0x2B, 0x04, 0x7D, 0x7A, 0x6C, 0xA3, 0x7E, 0x30, > 0x7C, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, > > + 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x02, > 0x04, 0x30, 0x16, 0x06, 0x03, 0x55, 0x1D, > > + 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, > 0x01, 0x04, 0x01, 0x82, 0x37, 0x4C, 0x09, > > + 0x15, 0x01, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, > 0x01, 0x01, 0xFF, 0x04, 0x08, 0x30, 0x06, > > + 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 0x1F, 0x06, > 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, > > + 0x16, 0x80, 0x14, 0x0B, 0x8A, 0xC7, 0xA8, 0x53, 0x07, > 0x40, 0x74, 0x75, 0x0F, 0x85, 0xCE, 0x5D, > > + 0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9, 0x30, 0x1D, > 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, > > + 0x04, 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, > 0x1B, 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, > > + 0x9C, 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x0A, 0x06, > 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, > > + 0x03, 0x02, 0x03, 0x69, 0x00, 0x30, 0x66, 0x02, 0x31, > 0x00, 0xEE, 0x78, 0xDB, 0x74, 0x56, 0xA3, > > + 0xC2, 0x44, 0x25, 0x0F, 0xA1, 0x89, 0xC0, 0x76, 0xD1, > 0xE4, 0xFE, 0xAA, 0xA4, 0xC3, 0x7D, 0x40, > > + 0xE3, 0x28, 0x1B, 0x0D, 0xAB, 0x32, 0x6B, 0x9A, 0x60, > 0x37, 0x2F, 0xB6, 0xF4, 0xCB, 0xEA, 0xC8, > > + 0x65, 0xB6, 0xDC, 0x24, 0x90, 0x10, 0xFB, 0xD2, 0x42, > 0x05, 0x02, 0x31, 0x00, 0x9E, 0x91, 0xF9, > > + 0x96, 0x8A, 0x41, 0x2C, 0x5E, 0x6B, 0xBC, 0x36, 0x05, > 0x3B, 0x50, 0x11, 0x91, 0x9A, 0xFA, 0x6B, > > + 0x7F, 0x01, 0xF4, 0x6A, 0x7E, 0xCD, 0x98, 0x7E, 0x7D, > 0xFD, 0xA8, 0xE3, 0xB2, 0x4F, 0x71, 0x91, > > + 0xF5, 0xE0, 0x82, 0xA5, 0xE7, 0x5A, 0xE8, 0x19, 0x09, > 0xF6, 0x22, 0xBE, 0xC4, 0x30, 0x82, 0x02, > > + 0x01, 0x30, 0x82, 0x01, 0x62, 0xA0, 0x03, 0x02, 0x01, > 0x02, 0x02, 0x10, 0x41, 0x02, 0xBA, 0xF9, > > + 0x87, 0x65, 0x6C, 0xB8, 0x4C, 0xD9, 0xA1, 0x04, 0x1C, > 0x46, 0x4F, 0xE4, 0x30, 0x0A, 0x06, 0x08, > > + 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, > 0x1D, 0x31, 0x1B, 0x30, 0x19, 0x06, 0x03, > > + 0x55, 0x04, 0x03, 0x0C, 0x12, 0x54, 0x65, 0x73, 0x74, > 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, > > + 0x69, 0x6E, 0x67, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E, > 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, 0x31, > > + 0x35, 0x31, 0x37, 0x32, 0x39, 0x32, 0x39, 0x5A, 0x17, > 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31, 0x35, > > + 0x31, 0x37, 0x33, 0x39, 0x32, 0x39, 0x5A, 0x30, 0x21, > 0x31, 0x1F, 0x30, 0x1D, 0x06, 0x03, 0x55, > > + 0x04, 0x03, 0x0C, 0x16, 0x54, 0x65, 0x73, 0x74, 0x45, > 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, > > + 0x6E, 0x67, 0x50, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43, > 0x41, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, > > + 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x05, > 0x2B, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, > > + 0x00, 0x04, 0xF9, 0xDC, 0xB9, 0x3F, 0xA8, 0xB5, 0x2B, > 0x2E, 0xA7, 0xFC, 0x88, 0xC6, 0xEF, 0x9C, > > + 0x36, 0x61, 0x3E, 0xFF, 0x8A, 0x5A, 0x52, 0xFF, 0x5A, > 0xD0, 0x2C, 0x08, 0xD6, 0x73, 0x12, 0xF9, > > + 0x62, 0x1E, 0x73, 0x76, 0x83, 0x49, 0xC8, 0xDE, 0xEB, > 0x29, 0xA4, 0x78, 0x2A, 0xC1, 0x30, 0x11, > > + 0x0B, 0x2F, 0x38, 0x00, 0xB7, 0x6B, 0x6B, 0x8E, 0x8C, > 0x4B, 0x33, 0x09, 0xF1, 0xEA, 0xA4, 0x9E, > > + 0x10, 0x4F, 0xC3, 0xBC, 0x30, 0x16, 0x1A, 0x8B, 0xD7, > 0x9C, 0x14, 0x11, 0x4E, 0x56, 0x64, 0x7E, > > + 0x51, 0xE7, 0xDA, 0x26, 0x40, 0xB0, 0xD0, 0xF8, 0xF2, > 0xB2, 0x5D, 0x8C, 0x8B, 0x49, 0x0C, 0x4E, > > + 0x58, 0xB0, 0xA3, 0x63, 0x30, 0x61, 0x30, 0x0E, 0x06, > 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, > > + 0x04, 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x0F, 0x06, > 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, > > + 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, 0x1F, > 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, > > + 0x30, 0x16, 0x80, 0x14, 0x04, 0xA6, 0xCD, 0x4D, 0xAE, > 0x9C, 0x17, 0xDB, 0xC8, 0x13, 0x57, 0x2D, > > + 0x72, 0x48, 0xAC, 0xBB, 0x6B, 0x1F, 0xFF, 0x61, 0x30, > 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, > > + 0x16, 0x04, 0x14, 0x0B, 0x8A, 0xC7, 0xA8, 0x53, 0x07, > 0x40, 0x74, 0x75, 0x0F, 0x85, 0xCE, 0x5D, > > + 0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9, 0x30, 0x0A, > 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, > > + 0x04, 0x03, 0x02, 0x03, 0x81, 0x8C, 0x00, 0x30, 0x81, > 0x88, 0x02, 0x42, 0x01, 0xB4, 0x75, 0x0B, > > + 0x2F, 0x2A, 0xAA, 0x77, 0x03, 0x08, 0xD9, 0x95, 0x13, > 0x2C, 0xE8, 0x47, 0x69, 0x97, 0xD1, 0x6B, > > + 0xE0, 0x23, 0x94, 0xD5, 0x34, 0x8F, 0x80, 0x20, 0xE3, > 0x72, 0x07, 0x7C, 0x6A, 0x52, 0xE6, 0xF2, > > + 0xC7, 0x85, 0xBD, 0xB6, 0x65, 0x8F, 0x61, 0x73, 0xF9, > 0xE7, 0x3A, 0x31, 0x46, 0xC6, 0xF2, 0xCE, > > + 0xA7, 0x9E, 0xD0, 0xE2, 0xEF, 0x07, 0x59, 0xD0, 0xF1, > 0xC4, 0xF6, 0x58, 0x9A, 0x16, 0x02, 0x42, > > + 0x00, 0x86, 0xE0, 0x25, 0xC1, 0x48, 0xD0, 0x33, 0x30, > 0x55, 0xA8, 0x60, 0x44, 0xCA, 0x47, 0x04, > > + 0x93, 0x46, 0x81, 0xE9, 0x13, 0xE9, 0x67, 0x26, 0x23, > 0x2A, 0xBD, 0xEF, 0xC4, 0xCC, 0x12, 0x99, > > + 0xB3, 0x9E, 0x3D, 0x78, 0xC8, 0x42, 0x06, 0x40, 0x48, > 0xCA, 0x3D, 0xCC, 0xD7, 0xA2, 0x35, 0x37, > > + 0x76, 0x12, 0xDB, 0x9C, 0x90, 0xA4, 0xE4, 0x16, 0xAC, > 0x5E, 0xD8, 0x04, 0xF1, 0x59, 0x66, 0x85, > > + 0xE2, 0x68, 0x30, 0x82, 0x02, 0x64, 0x30, 0x82, 0x02, > 0x0A, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, > > + 0x10, 0x2B, 0x7B, 0xDA, 0xCD, 0x87, 0xA0, 0xFD, 0x81, > 0x49, 0x5E, 0x0E, 0xDD, 0x4F, 0x81, 0x48, > > + 0x2D, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, > 0x3D, 0x04, 0x03, 0x02, 0x30, 0x22, 0x31, > > + 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, > 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, > > + 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49, > 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, > > + 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, > 0x32, 0x33, 0x31, 0x39, 0x33, 0x30, 0x30, > > + 0x32, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x32, > 0x33, 0x31, 0x39, 0x34, 0x30, 0x30, 0x32, > > + 0x5A, 0x30, 0x27, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, > 0x55, 0x04, 0x03, 0x0C, 0x1C, 0x54, 0x65, > > + 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, > 0x69, 0x6E, 0x67, 0x4E, 0x6F, 0x45, 0x4B, > > + 0x55, 0x73, 0x49, 0x6E, 0x53, 0x69, 0x67, 0x6E, 0x65, > 0x72, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, > > + 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, > 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, > > + 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, > 0x01, 0x00, 0xA5, 0x9B, 0x95, 0xF0, 0x63, > > + 0x88, 0xC3, 0x74, 0x26, 0x08, 0x68, 0x25, 0xAA, 0x16, > 0xBB, 0x2A, 0x15, 0xC1, 0xA2, 0xAF, 0x72, > > + 0x06, 0x51, 0x37, 0xE1, 0x4F, 0x6D, 0x6A, 0xFC, 0x17, > 0xCE, 0x82, 0x7B, 0x79, 0xFF, 0x2A, 0x84, > > + 0x0F, 0xCB, 0xA9, 0x65, 0x70, 0xC9, 0xF9, 0xE7, 0x61, > 0x90, 0x28, 0x03, 0x6E, 0x41, 0x25, 0xFF, > > + 0xC2, 0x3A, 0x60, 0x1A, 0x42, 0x37, 0x80, 0x9F, 0x6B, > 0x99, 0x11, 0x5A, 0x1F, 0xAE, 0x7B, 0x3F, > > + 0xF3, 0x2B, 0x45, 0xDD, 0xDA, 0xC4, 0x32, 0xD7, 0xD8, > 0xB5, 0x3D, 0x46, 0x0C, 0x8A, 0x11, 0xEE, > > + 0x94, 0x8C, 0xB5, 0x69, 0xD3, 0x91, 0x4F, 0x4E, 0xE5, > 0xBB, 0x93, 0xDD, 0x1E, 0xA7, 0x20, 0x03, > > + 0xFD, 0xD6, 0x8F, 0x76, 0x91, 0x9A, 0x2B, 0x41, 0x91, > 0xD8, 0x35, 0x7A, 0x0D, 0x80, 0xB9, 0xD4, > > + 0xD2, 0x56, 0xF1, 0xF9, 0xC5, 0xE6, 0xF2, 0xAE, 0x10, > 0x7E, 0xD7, 0x6C, 0x40, 0x86, 0x37, 0x99, > > + 0x85, 0xF4, 0xCA, 0x1D, 0x6D, 0x90, 0x63, 0xF7, 0x63, > 0xC6, 0x00, 0xA1, 0xA9, 0x79, 0x7D, 0x88, > > + 0x05, 0xA2, 0x92, 0x64, 0xA7, 0x8E, 0xA8, 0x9E, 0xC3, > 0x1F, 0x63, 0xEE, 0x6C, 0xE3, 0x9B, 0xA6, > > + 0xD7, 0x9D, 0x9C, 0x9F, 0x0D, 0x7A, 0xF7, 0x00, 0x92, > 0x16, 0xE8, 0x64, 0x36, 0x07, 0x66, 0x8E, > > + 0x6E, 0x51, 0x09, 0x3F, 0x2A, 0xD6, 0x6D, 0x4E, 0xCC, > 0x49, 0xE1, 0xC3, 0x59, 0x63, 0xDC, 0x51, > > + 0xAA, 0xD1, 0xE7, 0x42, 0x2F, 0x72, 0x25, 0x46, 0x83, > 0x7D, 0x23, 0xCE, 0xF7, 0x96, 0x2F, 0x04, > > + 0xE8, 0xAE, 0xF6, 0x19, 0x6D, 0x2D, 0xB2, 0x64, 0xDB, > 0x69, 0x33, 0x96, 0x58, 0xA0, 0x6C, 0x77, > > + 0xF0, 0xD0, 0x5E, 0x36, 0xB1, 0x28, 0x89, 0x83, 0xB6, > 0xA5, 0x13, 0x0E, 0x6B, 0x6E, 0x73, 0x2C, > > + 0x6F, 0xDA, 0xF9, 0x6C, 0x11, 0x4F, 0xCC, 0xF7, 0x89, > 0x77, 0x83, 0x02, 0x03, 0x01, 0x00, 0x01, > > + 0xA3, 0x52, 0x30, 0x50, 0x30, 0x0E, 0x06, 0x03, 0x55, > 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, > > + 0x03, 0x02, 0x01, 0x86, 0x30, 0x1F, 0x06, 0x03, 0x55, > 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, > > + 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, > 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, 0x9C, > > + 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x1D, 0x06, 0x03, > 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, > > + 0xB6, 0xAF, 0x0D, 0xC1, 0xBE, 0xD1, 0xE4, 0x21, 0x37, > 0xFF, 0xAC, 0x7D, 0x2D, 0xD4, 0x51, 0x8A, > > + 0x61, 0x95, 0x50, 0x7F, 0x30, 0x0A, 0x06, 0x08, 0x2A, > 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, > > + 0x03, 0x48, 0x00, 0x30, 0x45, 0x02, 0x20, 0x74, 0x7D, > 0xF5, 0xAF, 0xC3, 0xA7, 0x06, 0x99, 0x1F, > > + 0x2C, 0xAF, 0x69, 0xAA, 0x40, 0x97, 0xE9, 0xF8, 0x4C, > 0xD2, 0x71, 0x17, 0x25, 0x85, 0xB7, 0xA6, > > + 0x97, 0x61, 0x89, 0x82, 0xED, 0xF0, 0xF6, 0x02, 0x21, > 0x00, 0xA6, 0xF4, 0x59, 0x85, 0x53, 0x31, > > + 0xEF, 0x6F, 0x37, 0xB6, 0x8E, 0xA2, 0xDE, 0xC3, 0xFD, > 0xD6, 0xFB, 0x50, 0x63, 0x4E, 0xB4, 0xBB, > > + 0xC1, 0xB1, 0x07, 0x82, 0x80, 0x14, 0x28, 0x6A, 0x94, > 0x94, 0x31, 0x82, 0x01, 0x61, 0x30, 0x82, > > + 0x01, 0x5D, 0x02, 0x01, 0x01, 0x30, 0x36, 0x30, 0x22, > 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, > > + 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, > 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, > > + 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, > 0x43, 0x41, 0x02, 0x10, 0x2B, 0x7B, 0xDA, > > + 0xCD, 0x87, 0xA0, 0xFD, 0x81, 0x49, 0x5E, 0x0E, 0xDD, > 0x4F, 0x81, 0x48, 0x2D, 0x30, 0x0D, 0x06, > > + 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, > 0x01, 0x05, 0x00, 0x30, 0x0D, 0x06, 0x09, > > + 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, > 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0x39, > > + 0xEC, 0xA8, 0x00, 0x4F, 0x7E, 0x2C, 0x3C, 0x48, 0xDF, > 0x6F, 0x6A, 0x37, 0x69, 0xA4, 0xB1, 0xEB, > > + 0x7D, 0xD2, 0x3B, 0xC5, 0xEE, 0x57, 0x1F, 0x8F, 0xCA, > 0x60, 0x80, 0x88, 0x24, 0x29, 0xB5, 0x00, > > + 0x28, 0xFF, 0x8F, 0x0A, 0x1E, 0xB0, 0x9E, 0x90, 0x09, > 0xF1, 0x46, 0xC1, 0x53, 0xE8, 0x27, 0x29, > > + 0xFA, 0xFE, 0xA3, 0x84, 0x79, 0xB2, 0x27, 0x46, 0x9B, > 0xD8, 0x33, 0xBD, 0x8F, 0x41, 0x06, 0xEE, > > + 0xD6, 0xE7, 0x49, 0xAF, 0x48, 0xD0, 0xD4, 0xF1, 0x06, > 0xCC, 0xD3, 0x26, 0x47, 0xAE, 0x03, 0x7A, > > + 0xA5, 0xAF, 0xDE, 0x7F, 0x57, 0x32, 0x51, 0x49, 0x8C, > 0x18, 0xD2, 0x4D, 0x50, 0x27, 0xAC, 0x7C, > > + 0x33, 0xB8, 0xB8, 0x1C, 0xF8, 0x0C, 0x49, 0xEB, 0xF5, > 0xD7, 0xA0, 0x35, 0x77, 0x61, 0xC0, 0x60, > > + 0xAF, 0x23, 0x8C, 0xCC, 0xB0, 0x58, 0xB3, 0x08, 0x89, > 0x2B, 0xC0, 0x61, 0x0C, 0xA6, 0x40, 0x7A, > > + 0x37, 0x6D, 0x6D, 0x44, 0xFF, 0xF1, 0xCE, 0xDE, 0x7A, > 0x0C, 0xC4, 0x51, 0x61, 0xE6, 0x72, 0x6B, > > + 0xA9, 0x6A, 0x7B, 0xCF, 0xAA, 0x9A, 0x28, 0x74, 0x87, > 0x30, 0xBA, 0xED, 0x40, 0xF0, 0x75, 0x2B, > > + 0xD7, 0xE6, 0x9F, 0xDD, 0x6B, 0xB7, 0xEA, 0x08, 0x0D, > 0x9F, 0xA3, 0x25, 0x27, 0xB7, 0xBF, 0x41, > > + 0xC2, 0x64, 0xB5, 0x6F, 0x8F, 0xB1, 0x5F, 0xE5, 0xDF, > 0xCA, 0x16, 0x04, 0x61, 0xFF, 0x74, 0x25, > > + 0xEE, 0xF6, 0x69, 0xF1, 0x7F, 0xE5, 0x97, 0x72, 0x58, > 0xD8, 0x9F, 0xA5, 0x19, 0x32, 0x46, 0x95, > > + 0x67, 0x63, 0x23, 0x54, 0x46, 0x05, 0x15, 0xC3, 0x3E, > 0x04, 0x7E, 0x88, 0xD0, 0xB5, 0x52, 0xF0, > > + 0x38, 0x3C, 0x8B, 0xD4, 0x3D, 0x9A, 0x55, 0x1B, 0x14, > 0xE5, 0x37, 0x8D, 0xB7, 0x6C, 0x39, 0x91, > > + 0x23, 0x31, 0x63, 0x89, 0x7C, 0x75, 0x02, 0x79, 0xCC, > 0x95, 0x58, 0x99, 0x3A, 0xDB, 0xF5, > > +}; > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC > ryptLib.h > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC > ryptLib.h > new file mode 100644 > index 000000000000..9d1cb150a113 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC > ryptLib.h > @@ -0,0 +1,121 @@ > +/** @file > > + Application for Cryptographic Primitives Validation. > > + > > +Copyright (c) 2009 - 2016, Intel Corporation. All > rights reserved.<BR> > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#ifndef __CRYPTEST_H__ > > +#define __CRYPTEST_H__ > > + > > +#include <PiPei.h> > > +#include <Uefi.h> > > +#include <Library/UefiLib.h> > > +#include <Library/DebugLib.h> > > +#include <Library/UnitTestLib.h> > > +#include <Library/PrintLib.h> > > +#include <Library/BaseCryptLib.h> > > +#include <Library/BaseLib.h> > > +#include <Library/BaseMemoryLib.h> > > +#include <Library/MemoryAllocationLib.h> > > +//#include <UnitTestTypes.h> > > +#include <Library/UnitTestLib.h> > > +//#include <Library/UnitTestAssertLib.h> > > + > > +#define UNIT_TEST_NAME "BaseCryptLib Unit Test" > > +#define UNIT_TEST_VERSION "1.0" > > + > > +typedef struct { > > + CHAR8 *Description; > > + CHAR8 *ClassName; > > + UNIT_TEST_FUNCTION Func; > > + UNIT_TEST_PREREQUISITE PreReq; > > + UNIT_TEST_CLEANUP CleanUp; > > + UNIT_TEST_CONTEXT Context; > > +} TEST_DESC; > > + > > +typedef struct { > > + CHAR8 *Title; > > + CHAR8 *Package; > > + UNIT_TEST_SUITE_SETUP Sup; > > + UNIT_TEST_SUITE_TEARDOWN Tdn; > > + UINTN *TestNum; > > + TEST_DESC *TestDesc; > > +} SUITE_DESC; > > + > > +extern UINTN mPkcs7EkuTestNum; > > +extern TEST_DESC mPkcs7EkuTest[]; > > + > > +extern UINTN mHashTestNum; > > +extern TEST_DESC mHashTest[]; > > + > > +extern UINTN mHmacTestNum; > > +extern TEST_DESC mHmacTest[]; > > + > > +extern UINTN mBlockCipherTestNum; > > +extern TEST_DESC mBlockCipherTest[]; > > + > > +extern UINTN mRsaTestNum; > > +extern TEST_DESC mRsaTest[]; > > + > > +extern UINTN mRsaCertTestNum; > > +extern TEST_DESC mRsaCertTest[]; > > + > > +extern UINTN mPkcs7TestNum; > > +extern TEST_DESC mPkcs7Test[]; > > + > > +extern UINTN mPkcs5TestNum; > > +extern TEST_DESC mPkcs5Test[]; > > + > > +extern UINTN mAuthenticodeTestNum; > > +extern TEST_DESC mAuthenticodeTest[]; > > + > > +extern UINTN mImageTimestampTestNum; > > +extern TEST_DESC mImageTimestampTest[]; > > + > > +extern UINTN mDhTestNum; > > +extern TEST_DESC mDhTest[]; > > + > > +extern UINTN mPrngTestNum; > > +extern TEST_DESC mPrngTest[]; > > + > > +extern UINTN mOaepTestNum; > > +extern TEST_DESC mOaepTest[]; > > + > > +/** Creates a framework you can use */ > > +EFI_STATUS > > +EFIAPI > > +CreateUnitTest ( > > + IN CHAR8* UnitTestName, > > + IN CHAR8* UnitTestVersion, > > + IN OUT UNIT_TEST_FRAMEWORK_HANDLE* Framework > > +); > > + > > +/** > > + Validate UEFI-OpenSSL DH Interfaces. > > + > > + @retval EFI_SUCCESS Validation succeeded. > > + @retval EFI_ABORTED Validation failed. > > + > > +**/ > > +EFI_STATUS > > +ValidateCryptDh ( > > + VOID > > + ); > > + > > +/** > > + Validate UEFI-OpenSSL pseudorandom number generator > interfaces. > > + > > + @retval EFI_SUCCESS Validation succeeded. > > + @retval EFI_ABORTED Validation failed. > > + > > +**/ > > +EFI_STATUS > > +ValidateCryptPrng ( > > + VOID > > + ); > > + > > + > > + > > +#endif > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC > ryptLibHost.inf > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC > ryptLibHost.inf > new file mode 100644 > index 000000000000..300b98e40b33 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC > ryptLibHost.inf > @@ -0,0 +1,46 @@ > +## @file > > +# Host-based UnitTest for BaseCryptLib > > +# > > +# Copyright (c) Microsoft Corporation.<BR> > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +## > > + > > +[Defines] > > + INF_VERSION = 0x00010005 > > + BASE_NAME = BaseCryptLibUnitTestHost > > + FILE_GUID = 0cb84598-824b-4833-b705-bdefdcbba1d5 > > + MODULE_TYPE = HOST_APPLICATION > > + VERSION_STRING = 1.0 > > + > > +# > > +# The following information is for reference only and > not required by the build tools. > > +# > > +# VALID_ARCHITECTURES = IA32 X64 > > +# > > + > > +[Sources] > > + UnitTestMain.c > > + BaseCryptLibUnitTests.c > > + TestBaseCryptLib.h > > + HashTests.c > > + HmacTests.c > > + BlockCipherTests.c > > + RsaTests.c > > + RsaPkcs7Tests.c > > + Pkcs5Pbkdf2Tests.c > > + AuthenticodeTests.c > > + TSTests.c > > + DhTests.c > > + RandTests.c > > + Pkcs7EkuTests.c > > + OaepEncryptTests.c > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + CryptoPkg/CryptoPkg.dec > > + > > +[LibraryClasses] > > + BaseLib > > + DebugLib > > + BaseCryptLib > > + UnitTestLib > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC > ryptLibUefiShell.inf > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC > ryptLibUefiShell.inf > new file mode 100644 > index 000000000000..6cd4a31be2c8 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC > ryptLibUefiShell.inf > @@ -0,0 +1,49 @@ > +## @file > > +# BaseCryptLib UnitTest built for execution in UEFI > Shell. > > +# > > +# Copyright (c) Microsoft Corporation.<BR> > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +## > > + > > +[Defines] > > + INF_VERSION = 0x00010006 > > + BASE_NAME = BaseCryptLibTestUefiShell > > + FILE_GUID = ed54ee8c-ef7a-41f2-83d5-0e0d4cd88c21 > > + MODULE_TYPE = UEFI_APPLICATION > > + VERSION_STRING = 1.0 > > + ENTRY_POINT = DxeEntryPoint > > + > > +# > > +# The following information is for reference only and > not required by the build tools. > > +# > > +# VALID_ARCHITECTURES = IA32 X64 > > +# > > + > > +[Sources] > > + UnitTestMain.c > > + BaseCryptLibUnitTests.c > > + TestBaseCryptLib.h > > + HashTests.c > > + HmacTests.c > > + BlockCipherTests.c > > + RsaTests.c > > + RsaPkcs7Tests.c > > + Pkcs5Pbkdf2Tests.c > > + AuthenticodeTests.c > > + TSTests.c > > + DhTests.c > > + RandTests.c > > + Pkcs7EkuTests.c > > + OaepEncryptTests.c > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + CryptoPkg/CryptoPkg.dec > > + > > +[LibraryClasses] > > + UefiApplicationEntryPoint > > + BaseLib > > + DebugLib > > + UnitTestLib > > + PrintLib > > + BaseCryptLib > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/ChainCreationInstructions.txt > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/ChainCreationInstructions.txt > new file mode 100644 > index 000000000000..0ca6830516ea > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/ChainCreationInstructions.txt > @@ -0,0 +1,92 @@ > +------------------------------------------------------- > ------------------------- > > +File: ChainCreationInstructions.txt > > + > > +Description: This folder contains INI files that are > required to generate > > + the following test cert chains. Certs > will be copied onto the > > + file system AND MY store when they are > generated by certreq.exe. > > + > > +Note that typically certreq.exe operates on INF files, > but in this folder > > +we use INI files so that our build system does not > complain about INF's being > > +in the tree, but not in the CryptoPkg.dsc file. > > + > > +To create your own certificates and signatures for > testing, this file demonstrates > > +how the test certificate chains and signatures were > created. > > + > > +To create test signatures, run SignFirmwareWithEKUs.cmd > (with SignTool.exe in > > +your path). You can then use your favorite BinaryToHex > converter to convert > > +the binary into a byte array that you can include in > AllTestSignatures.h > > + > > +Copyright (C) Microsoft Corporation. All Rights > Reserved. > > +------------------------------------------------------- > ------------------------- > > +Cert Chain: > > + > > + ------------------------------------------ > > + | | // > Root of trust. ECDSA P521 curve > > + | TestEKUParsingRoot | // > SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE > > + | | // > CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE > > + ------------------------------------------ > > + ^ > > + | > > + ------------------------------------------ > > + | | // > Issues subordinate CAs. ECC P384 curve. > > + | TestEKUParsingPolicyCA | // > SHA 256 Key Usage: > > + | | // > CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE > > + ------------------------------------------ > > + ^ > > + | > > + ------------------------------------------ > > + | | // > Issues end-entity (leaf) signers. ECC P256 curve. > > + | TestEKUParsingIssuingCA | // > SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE > > + | | // > Enhanced Key Usage: > > + ------------------------------------------ // > 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing) > > + ^ > > + | > > + -------------------------------------- > > + / / // > Leaf signer, ECC P256 curve. > > + / TestEKUParsingLeafSigner / // > SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE > > + / / // > Enhanced Key usages: > > + -------------------------------------- // > 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing) > > + // > 1.3.6.1.4.1.311.76.9.21.1.N, N == Product ID. > > + > > + > > + > > + > > +------------------------------------------------------- > -------------------------- > > + > > + > > +--- files required --- > > + > > +TestEKUParsingRoot.ini - This certificate > is the root CA under which all CAs live. > > +TestEKUParsingPolicyCA.ini - This policy CA > will issue subordinate CA's with EKU constraints. > > +TestEKUParsingIssuingCA.ini - CA to issue end- > entity leafs. > > +TestEKUParsingLeafSigner.ini - End-Entity leaf > signer. > > +TestEKUParsingLeafSignerPid12345.ini - End-Entity, with > EKU: 1.3.6.1.4.1.311.76.9.21.1.12345. > > +TestEKUParsingNoEKUsInSigner.ini - Leaf with no > EKU's specified. > > +TestEKUParsingLeafSignerPid1.ini - Test with naming > files ini, to get around build complaints. > > +--- Commands to execute --- > > + > > +certreq.exe -new > TestEKUParsingRoot.ini > TestEKUParsingRoot.cer > > +certreq.exe -new -q -cert "TestEKUParsingRoot" > TestEKUParsingPolicyCA.ini > TestEKUParsingPolicyCA.cer > > +certreq.exe -new -q -cert "TestEKUParsingPolicyCA" > TestEKUParsingIssuingCA.ini > TestEKUParsingIssuingCA.cer > > +certreq.exe -new -q -cert "TestEKUParsingIssuingCA" > TestEKUParsingLeafSigner.ini > TestEKUParsingLeafSigner.cer > > +certreq.exe -new -q -cert "TestEKUParsingIssuingCA" > TestEKUParsingLeafSignerPid12345.ini > TestEKUParsingLeafSignerPid12345.cer > > +certreq.exe -new -q -cert "TestEKUParsingIssuingCA" > TestEKUParsingNoEKUsInSigner.ini > TestEKUParsingNoEKUsInSigner.cer > > +certreq.exe -new -q -cert "TestEKUParsingIssuingCA" > TestEKUParsingLeafSignerPid1.ini > TestEKUParsingLeafSignerPid1.cer > > + > > +------------------------------------------------------- > -------------------------- > > + > > +Then start mmc->Add certificates, Local Computer/open > Personal/Certs and export the keys into the pfx files > below. > > +Note: You should see a little key on the top left of > each cert icon, which means you have the private key > > + for this cert. If you don't see it something is > wrong. For each cert, right-click and do all tasks, > > + export. Yes, Export the private key. PCKS#12 > format, include all certs in path if possible. > > + > > + If we automated the call to certreq above, there > is a PowerShell "PKI" cmdlet which has > > + an Export-PfxCertificate command. > > + > > +Passwords: TestEKUParsingRoot.pfx == > TestEKUParsingRoot > > + TestEKUParsingPolicyCA.pfx == > TestEKUParsingPolicyCA > > + TestEKUParsingIssuingCA.pfx == > TestEKUParsingIssuingCA > > + TestEKUParsingLeafSigner.pfx == > TestEKUParsingLeafSigner > > + TestEKUParsingLeafSignerPid12345.pfx == > TestEKUParsingLeafSignerPid12345 > > + TestEKUParsingNoEKUsInSigner.pfx == > TestEKUParsingNoEKUsInSigner > > + > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/CreateTestCerts.cmd > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/CreateTestCerts.cmd > new file mode 100644 > index 000000000000..6d68afdab77d > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/CreateTestCerts.cmd > @@ -0,0 +1,11 @@ > +@ECHO OFF > > +REM > > +REM Use this file to create test certificates. > > +REM > > +call certreq.exe -new > TestEKUParsingRoot.ini > TestEKUParsingRoot.cer > > +call certreq.exe -new -q -cert "TestEKUParsingRoot" > TestEKUParsingPolicyCA.ini > TestEKUParsingPolicyCA.cer > > +call certreq.exe -new -q -cert "TestEKUParsingPolicyCA" > TestEKUParsingIssuingCA.ini > TestEKUParsingIssuingCA.cer > > +call certreq.exe -new -q -cert > "TestEKUParsingIssuingCA" TestEKUParsingLeafSigner.ini > TestEKUParsingLeafSigner.cer > > +call certreq.exe -new -q -cert > "TestEKUParsingIssuingCA" > TestEKUParsingLeafSignerPid12345.ini > TestEKUParsingLeafSignerPid12345.cer > > +call certreq.exe -new -q -cert > "TestEKUParsingIssuingCA" > TestEKUParsingNoEKUsInSigner.ini > TestEKUParsingNoEKUsInSigner.cer > > +call certreq.exe -new -q -cert > "TestEKUParsingIssuingCA" > TestEKUParsingLeafSignerPid1.ini > TestEKUParsingLeafSignerPid1.cer > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/SignFirmwareWithEKUs.cmd > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/SignFirmwareWithEKUs.cmd > new file mode 100644 > index 000000000000..ce03e33a7169 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/SignFirmwareWithEKUs.cmd > @@ -0,0 +1,76 @@ > +@ECHO OFF > > +REM This script will use various certificates to sign > blobs for testing purposes. > > +REM > > +REM > > +REM Our EKU test certificate chain: > > +REM ------------------------------------------ > > +REM | | // > Root of trust. ECDSA P521 curve > > +REM | TestEKUParsingRoot | // > SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE > > +REM | | // > CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE > > +REM ------------------------------------------ > > +REM ^ > > +REM | > > +REM ------------------------------------------ > > +REM | | // > Issues subordinate CAs. ECC P384 curve. > > +REM | TestEKUParsingPolicyCA | // > SHA 256 Key Usage: > > +REM | | // > CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE > > +REM ------------------------------------------ > > +REM ^ > > +REM | > > +REM ------------------------------------------ > > +REM | | // > Issues end-entity (leaf) signers. ECC P256 curve. > > +REM | TestEKUParsingIssuingCA | // > SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE > > +REM | | // > Enhanced Key Usage: > > +REM ------------------------------------------ // > 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing) > > +REM ^ > > +REM | > > +REM -------------------------------------- > > +REM / TestEKUParsingLeafSigner && / // > Leaf signer, ECC P256 curve. > > +REM / TestEKUParsingLeafSignerPid12345 / // > SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE > > +REM / / // > Enhanced Key usages: > > +REM -------------------------------------- // > 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing) > > +REM // > 1.3.6.1.4.1.311.76.9.21.1.N, N == Product ID. > > +REM > > +REM > > +REM > > +REM Dev Note: SignTool.exe must be in your path when > running this script. > > + > > +del *.p7b > > +ECHO -------------------------------------------------- > ----------------- > > +ECHO Press any key 4 times to append time to the test > blobs to sign. > > +time >> TestSignWithOneEKUInLeafSigner.bin > > +time >> TestSignWithTwoEKUsInLeafSignerPid1.bin > > +time >> TestSignWithTwoEKUsInLeafSignerPid12345.bin > > +time >> TestSignWithNoEKUsInLeafSigner.bin > > + > > + > > +REM > > +REM Create a signature with > TestEKUParsingLeafSigner.cer which has one EKU in it, > > +REM and add the Policy CA in the signature. > > +REM > > +call signtool.exe sign /fd sha256 /f > TestEKUParsingLeafSigner.cer > /p7 . /u 1.3.6.1.4.1.311.76.9.21.1 /ac > TestEKUParsingPolicyCA.cer /p7co 1.2.840.113549.1.7.1 > /p7ce DetachedSignedData /v /debug > TestSignWithOneEKUInLeafSigner.bin > > + > > +REM > > +REM Create a signature with two EKU's in the leaf > signer. (1.3.6.1.4.1.311.76.9.21.1, and > 1.3.6.1.4.1.311.76.9.21.1.1) > > +REM > > +call signtool.exe sign /fd sha256 /f > TestEKUParsingLeafSignerPid1.cer > /p7 . /u 1.3.6.1.4.1.311.76.9.21.1.1 /p7co > 1.2.840.113549.1.7.1 /p7ce DetachedSignedData /v /debug > TestSignWithTwoEKUsInLeafSignerPid1.bin > > + > > +REM > > +REM Create a signature with two EKUs in the leaf > (1.3.6.1.4.1.311.76.9.21.1, and > 1.3.6.1.4.1.311.76.9.21.1.12345) > > +REM > > +call signtool.exe sign /fd sha256 /f > TestEKUParsingLeafSignerPid12345.cer > /p7 . /u 1.3.6.1.4.1.311.76.9.21.1.12345 /p7co > 1.2.840.113549.1.7.1 /p7ce DetachedSignedData /v /debug > TestSignWithTwoEKUsInLeafSignerPid12345.bin > > + > > + > > +REM > > +REM Create a signature with a leaf that does not have > any EKUs in the signture. > > +REM > > +call signtool.exe sign /fd sha256 /f > TestEKUParsingNoEKUsInSigner.cer /p7 . /p7co > 1.2.840.113549.1.7.1 /p7ce DetachedSignedData /v /debug > TestSignWithNoEKUsInLeafSigner.bin > > + > > +REM > > +REM Rename *.p7 to *.p7b > > +REM > > +rename *.p7 *.p7b > > +ECHO -------------------------------------------------- > ------------------------- > > +ECHO Now you can use your favorite "Binary To Hex" > converter to convert the > > +ECHO signatures (P7B files) to byte arrays and add them > to AllTestSignatures.h > > +ECHO -------------------------------------------------- > ------------------------- > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingIssuingCA.ini > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingIssuingCA.ini > new file mode 100644 > index 000000000000..8576783473e9 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingIssuingCA.ini > @@ -0,0 +1,45 @@ > +[Version] > > +Signature="$Windows NT$ > > +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > > +; 2.5.29.19 == Basic Constraints for CA > > +[Strings] > > +szOID_BASIC_CONSTRAINTS2 = "2.5.29.19" > > + > > +[EnhancedKeyUsageExtension] > > +OID = 1.3.6.1.4.1.311.76.9.21.1 > > + > > +[NewRequest] > > +Subject = "CN=TestEKUParsingIssuingCA" > > +Exportable = true > > +KeyLength = 256 > > +HashAlgorithm = sha256 > > +KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE" > > +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG" > > +MachineKeySet = True > > +RequestType = cert > > +ValidityPeriodUnits = 20 > > +ValidityPeriod = Years > > +ProviderName = "Microsoft Software Key Storage > Provider" > > +KeyAlgorithm = "ECDSA_P256" > > + > > + > > +[Extensions] > > +%szOID_BASIC_CONSTRAINTS2% = "{text}" > > + _continue_ = "ca=True" > > + > > +Critical=%szOID_BASIC_CONSTRAINTS2% > > + > > +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > > +; This extension is so the this CA is only allowed to > > +; issue end-entity certs. > > +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > > +[BasicConstraintsExtension] > > +PathLength=0 > > + > > +; > > +; Surface Firmware Signing EKU > > +; > > +[Extensions] > > + 2.5.29.37 = "{text}" > > + _continue_ = "1.3.6.1.4.1.311.76.9.21.1" > > + > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingLeafSigner.ini > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingLeafSigner.ini > new file mode 100644 > index 000000000000..f501537343ca > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingLeafSigner.ini > @@ -0,0 +1,25 @@ > +[Version] > > +Signature="$Windows NT$ > > + > > +[EnhancedKeyUsageExtension] > > +OID = 1.3.6.1.4.1.311.76.9.21.1 > > + > > +[NewRequest] > > +Subject = "CN=TestEKUParsingLeafSigner" > > +Exportable = true > > +KeyLength = 256 > > +HashAlgorithm = sha256 > > +KeyUsage = "CERT_DIGITAL_SIGNATURE_KEY_USAGE" > > +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG" > > +MachineKeySet = True > > +RequestType = cert > > +ValidityPeriodUnits = 20 > > +ValidityPeriod = Years > > +ProviderName = "Microsoft Software Key Storage > Provider" > > +KeyAlgorithm = "ECDSA_P256" > > + > > +; > > +; Surface test firwmare signing EKU > > +; > > +[Extensions] > > + _continue_ = "1.3.6.1.4.1.311.76.9.21.1" > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingLeafSignerPid1.ini > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingLeafSignerPid1.ini > new file mode 100644 > index 000000000000..35aa78c493b0 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingLeafSignerPid1.ini > @@ -0,0 +1,24 @@ > +[Version] > > +Signature="$Windows NT$ > > + > > +[EnhancedKeyUsageExtension] > > +OID = 1.3.6.1.4.1.311.76.9.21.1 > > +OID = 1.3.6.1.4.1.311.76.9.21.1.1 > > + > > +[NewRequest] > > +Subject = "CN=TestEKUParsingLeafSignerPid1" > > +Exportable = true > > +KeyLength = 2048 > > +HashAlgorithm = sha256 > > +KeySpec = AT_SIGNATURE > > +KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE | > CERT_DIGITAL_SIGNATURE_KEY_USAGE | > CERT_CRL_SIGN_KEY_USAGE" > > +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG" > > +MachineKeySet = True > > +RequestType = cert > > +ValidityPeriodUnits = 5 > > +ValidityPeriod = Years > > + > > +[Extensions] > > + 2.5.29.37 = "{text}" > > + _continue_ = "1.3.6.1.4.1.311.76.9.21.1," > > + _continue_ = "1.3.6.1.4.1.311.76.9.21.1.1" > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingLeafSignerPid12345.ini > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingLeafSignerPid12345.ini > new file mode 100644 > index 000000000000..67c5741f4d26 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingLeafSignerPid12345.ini > @@ -0,0 +1,27 @@ > +[Version] > > +Signature="$Windows NT$ > > + > > +[EnhancedKeyUsageExtension] > > +OID = 1.3.6.1.4.1.311.76.9.21.1 > > +OID = 1.3.6.1.4.1.311.76.9.21.1.12345 > > + > > +[NewRequest] > > +Subject = "CN=TestEKUParsingLeafSignerPid12345" > > +Exportable = true > > +KeyLength = 2048 > > +HashAlgorithm = sha256 > > +KeySpec = AT_SIGNATURE > > +KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE | > CERT_DIGITAL_SIGNATURE_KEY_USAGE | > CERT_CRL_SIGN_KEY_USAGE" > > +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG" > > +MachineKeySet = True > > +RequestType = cert > > +ValidityPeriodUnits = 5 > > +ValidityPeriod = Years > > + > > +[Extensions] > > + 2.5.29.37 = "{text}" > > + _continue_ = "1.3.6.1.4.1.311.76.9.21.1," > > + _continue_ = "1.3.6.1.4.1.311.76.9.21.1.12345" > > + > > + > > + > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingNoEKUsInSigner.ini > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingNoEKUsInSigner.ini > new file mode 100644 > index 000000000000..60743b02a94b > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingNoEKUsInSigner.ini > @@ -0,0 +1,16 @@ > +[Version] > > +Signature="$Windows NT$ > > + > > + > > +[NewRequest] > > +Subject = "CN=TestEKUParsingNoEKUsInSigner" > > +Exportable = true > > +KeyLength = 2048 > > +HashAlgorithm = sha256 > > +KeySpec = AT_SIGNATURE > > +KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE | > CERT_DIGITAL_SIGNATURE_KEY_USAGE | > CERT_CRL_SIGN_KEY_USAGE" > > +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG" > > +MachineKeySet = True > > +RequestType = cert > > +ValidityPeriodUnits = 20 > > +ValidityPeriod = Years > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingPolicyCA.ini > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingPolicyCA.ini > new file mode 100644 > index 000000000000..2ccda66596bc > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingPolicyCA.ini > @@ -0,0 +1,28 @@ > +[Version] > > +Signature="$Windows NT$ > > +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > > +; 2.5.29.19 == Basic Constraints for CA > > +[Strings] > > +szOID_BASIC_CONSTRAINTS2 = "2.5.29.19" > > + > > +[NewRequest] > > +Subject = "CN=TestEKUParsingPolicyCA" > > +Exportable = true > > +KeyLength = 384 > > +HashAlgorithm = sha256 > > +KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE" > > +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG" > > +MachineKeySet = True > > +RequestType = cert > > +ValidityPeriodUnits = 20 > > +ValidityPeriod = Years > > +ProviderName = "Microsoft Software Key Storage > Provider" > > +KeyAlgorithm = "ECDSA_P384" > > + > > + > > +[Extensions] > > +%szOID_BASIC_CONSTRAINTS2% = "{text}" > > + _continue_ = "ca=True" > > + > > +Critical=%szOID_BASIC_CONSTRAINTS2% > > + > > diff --git > a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingRoot.ini > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingRoot.ini > new file mode 100644 > index 000000000000..d8cd7d1f82a3 > --- /dev/null > +++ > b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe > rts/TestEKUParsingRoot.ini > @@ -0,0 +1,28 @@ > +[Version] > > +Signature="$Windows NT$ > > + > > +[Strings] > > +szOID_BASIC_CONSTRAINTS2 = "2.5.29.19" > > + > > +[NewRequest] > > +Subject = "CN=TestEKUParsingRoot" > > +Exportable = true > > +KeyLength = 521 > > +HashAlgorithm = sha256 > > +KeyUsage = "CERT_DIGITAL_SIGNATURE_KEY_USAGE | > CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE" > > +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG" > > +MachineKeySet = True > > +RequestType = cert > > +ValidityPeriodUnits = 30 > > +ValidityPeriod = Years > > +ProviderName = "Microsoft Software Key Storage > Provider" > > +KeyAlgorithm = ECDSA_P521 > > + > > + > > + > > + > > +[Extensions] > > +%szOID_BASIC_CONSTRAINTS2% = "{text}" > > + _continue_ = "ca=True" > > + > > +Critical=%szOID_BASIC_CONSTRAINTS2% > > -- > 2.27.0.windows.1 > > > -=-=-=-=-=-= > Groups.io Links: You receive all messages sent to this > group. > > View/Reply Online (#62560): > https://edk2.groups.io/g/devel/message/62560 > Mute This Topic: https://groups.io/mt/75505002/1643496 > Group Owner: devel+owner@edk2.groups.io > Unsubscribe: https://edk2.groups.io/g/devel/unsub > [michael.d.kinney@intel.com] > -=-=-=-=-=-= ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based) 2020-07-15 2:52 ` [edk2-devel] " Michael D Kinney @ 2020-07-15 18:16 ` matthewfcarlson 2020-07-15 19:03 ` Michael D Kinney 0 siblings, 1 reply; 10+ messages in thread From: matthewfcarlson @ 2020-07-15 18:16 UTC (permalink / raw) To: Kinney, Michael D; +Cc: devel@edk2.groups.io, Wang, Jian J, Lu, XiaoyuX [-- Attachment #1: Type: text/plain, Size: 2149 bytes --] Hey Mike, 1. I'll move it for v4. 2. I'll remove that, thanks! 3. I'll fix that as well, good spot. 4. It's mostly the same except for the different CrtWrappers 5. We need a host-specific CrtWrapper since the regular one has a bunch of conflicts with regular C98, but there are a few functions that since we're building no std mode of OpenSSL we still need to provide. 6. That would be my guess- this is largely based on the edk2-staging HBFA branch and I've had to reverse engineer some of the steps for generating the test data. I fixed the instructions. -Matthew Carlson On Tue, Jul 14, 2020 at 7:53 PM Kinney, Michael D < michael.d.kinney@intel.com> wrote: > Hi Matt, > > I think the BaseCryptLib unit tests may need some more work. > > 1) The DSC file for host based tests is in the wrong directory. > It should be in CryptoPkg/Test to match the MdePkg, MdeModulePkg > and UnitTestFrameworkPkg location. > > 2) CryptoPkg/CryptoPkg.dsc includes a reference to the host based > library UnitTestHostBaseCryptLib.inf. This should only be > listed in the host based DSC file. > > 3) CryptoPkg\Library\BaseCryptLib\UnitTestHostBaseCryptLib.inf > This file appears to only be for host based tests, but it > lists compatibility with DXE_DRIVER DXE_CORE UEFI_APPLICATION > UEFI_DRIVER > and does not list HOST_APPLICATION as expected. > > 4) Why do we need a new lib instance of the BaseCryptLib for > host based unit testing. I would think we would want to perform > unit tests on the BaseCryptLib instances that would actually be > used in FW components. Can we update the unit tests to test > the services provided in the Base, Pei, Runtime, and Smm > instances of the BaseCryptLib? > > 5) Why do we need a host based specific version of the CrtWrapper, > UnitTestHostCrtWrapper.c? > > 6) The file CryptoPkg/Test/UnitTest/Librray/BaseCryptLib/TestEKUCerts/ > ChainCreationInstructions.txt makes reference to a bintohex tool > and putting the results in a file called AllTestSignatures.h. > But I do not see this file in the patch. Are these instructions > out of date? > > Thanks, > > Mike [-- Attachment #2: Type: text/html, Size: 2849 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based) 2020-07-15 18:16 ` matthewfcarlson @ 2020-07-15 19:03 ` Michael D Kinney 2020-07-15 23:31 ` Matthew Carlson 0 siblings, 1 reply; 10+ messages in thread From: Michael D Kinney @ 2020-07-15 19:03 UTC (permalink / raw) To: Matthew Carlson, Kinney, Michael D Cc: devel@edk2.groups.io, Wang, Jian J, Lu, XiaoyuX [-- Attachment #1: Type: text/plain, Size: 3328 bytes --] Matt, For (4) and (5) I think I see the issue. Host based unit tests always link against the standard C lib for the host OS env and those are in conflict with some if the wrappers that are provided to make OpenSSL work in an EDK II FW build env. So the approach to unit testing BaseCryptLib is not to test the actually lib instances used in FW, but to instead test the source code of the BaseCryptLib that is used by the FW specific instances. There is a small chance of some differences that may not be caught, but we can get really good unit test coverage for the source code that is identical in both host and FW instances. If this is a correct assessment, you may want to add some of this information to the INF file header of and source file headers for the unit tests. Thanks, Mike From: Matthew Carlson <matthewfcarlson@gmail.com> Sent: Wednesday, July 15, 2020 11:16 AM To: Kinney, Michael D <michael.d.kinney@intel.com> Cc: devel@edk2.groups.io; Wang, Jian J <jian.j.wang@intel.com>; Lu, XiaoyuX <xiaoyux.lu@intel.com> Subject: Re: [edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based) Hey Mike, 1. I'll move it for v4. 2. I'll remove that, thanks! 3. I'll fix that as well, good spot. 4. It's mostly the same except for the different CrtWrappers 5. We need a host-specific CrtWrapper since the regular one has a bunch of conflicts with regular C98, but there are a few functions that since we're building no std mode of OpenSSL we still need to provide. 6. That would be my guess- this is largely based on the edk2-staging HBFA branch and I've had to reverse engineer some of the steps for generating the test data. I fixed the instructions. -Matthew Carlson On Tue, Jul 14, 2020 at 7:53 PM Kinney, Michael D <michael.d.kinney@intel.com<mailto:michael.d.kinney@intel.com>> wrote: Hi Matt, I think the BaseCryptLib unit tests may need some more work. 1) The DSC file for host based tests is in the wrong directory. It should be in CryptoPkg/Test to match the MdePkg, MdeModulePkg and UnitTestFrameworkPkg location. 2) CryptoPkg/CryptoPkg.dsc includes a reference to the host based library UnitTestHostBaseCryptLib.inf. This should only be listed in the host based DSC file. 3) CryptoPkg\Library\BaseCryptLib\UnitTestHostBaseCryptLib.inf This file appears to only be for host based tests, but it lists compatibility with DXE_DRIVER DXE_CORE UEFI_APPLICATION UEFI_DRIVER and does not list HOST_APPLICATION as expected. 4) Why do we need a new lib instance of the BaseCryptLib for host based unit testing. I would think we would want to perform unit tests on the BaseCryptLib instances that would actually be used in FW components. Can we update the unit tests to test the services provided in the Base, Pei, Runtime, and Smm instances of the BaseCryptLib? 5) Why do we need a host based specific version of the CrtWrapper, UnitTestHostCrtWrapper.c? 6) The file CryptoPkg/Test/UnitTest/Librray/BaseCryptLib/TestEKUCerts/ ChainCreationInstructions.txt makes reference to a bintohex tool and putting the results in a file called AllTestSignatures.h. But I do not see this file in the patch. Are these instructions out of date? Thanks, Mike [-- Attachment #2: Type: text/html, Size: 45341 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based) 2020-07-15 19:03 ` Michael D Kinney @ 2020-07-15 23:31 ` Matthew Carlson 0 siblings, 0 replies; 10+ messages in thread From: Matthew Carlson @ 2020-07-15 23:31 UTC (permalink / raw) To: Kinney, Michael D; +Cc: devel@edk2.groups.io, Wang, Jian J, Lu, XiaoyuX [-- Attachment #1: Type: text/plain, Size: 3872 bytes --] You hit the nail on the head. I think it's a reasonable limitation to not test the CrtWrapper functions. Our goal is to test the crypto functions and I think the current tests do a decent job of that. The idea of adding some of these limitations to the inf and header files could be useful, I'll do a v5 and add it in. -Matthew Carlson On Wed, Jul 15, 2020 at 12:03 PM Kinney, Michael D < michael.d.kinney@intel.com> wrote: > Matt, > > > > For (4) and (5) I think I see the issue. Host based unit tests always > link against the standard C lib for the host OS env and > > those are in conflict with some if the wrappers that are provided to make > OpenSSL work in an EDK II FW build env. > > > > So the approach to unit testing BaseCryptLib is not to test the actually > lib instances used in FW, but to instead test the > > source code of the BaseCryptLib that is used by the FW specific instances. > There is a small chance of some differences > > that may not be caught, but we can get really good unit test coverage for > the source code that is identical in both host > > and FW instances. If this is a correct assessment, you may want to add > some of this information to the INF file header of > > and source file headers for the unit tests. > > > > Thanks, > > > > Mike > > > > *From:* Matthew Carlson <matthewfcarlson@gmail.com> > *Sent:* Wednesday, July 15, 2020 11:16 AM > *To:* Kinney, Michael D <michael.d.kinney@intel.com> > *Cc:* devel@edk2.groups.io; Wang, Jian J <jian.j.wang@intel.com>; Lu, > XiaoyuX <xiaoyux.lu@intel.com> > *Subject:* Re: [edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add > unit tests (Host and Shell based) > > > > Hey Mike, > > > > 1. I'll move it for v4. > > 2. I'll remove that, thanks! > > 3. I'll fix that as well, good spot. > > 4. It's mostly the same except for the different CrtWrappers > > 5. We need a host-specific CrtWrapper since the regular one has a bunch of > conflicts with regular C98, but there are a few functions that since we're > building no std mode of OpenSSL we still need to provide. > > 6. That would be my guess- this is largely based on the edk2-staging HBFA > branch and I've had to reverse engineer some of the steps for > generating the test data. I fixed the instructions. > > > -Matthew Carlson > > > > > > On Tue, Jul 14, 2020 at 7:53 PM Kinney, Michael D < > michael.d.kinney@intel.com> wrote: > > Hi Matt, > > I think the BaseCryptLib unit tests may need some more work. > > 1) The DSC file for host based tests is in the wrong directory. > It should be in CryptoPkg/Test to match the MdePkg, MdeModulePkg > and UnitTestFrameworkPkg location. > > 2) CryptoPkg/CryptoPkg.dsc includes a reference to the host based > library UnitTestHostBaseCryptLib.inf. This should only be > listed in the host based DSC file. > > 3) CryptoPkg\Library\BaseCryptLib\UnitTestHostBaseCryptLib.inf > This file appears to only be for host based tests, but it > lists compatibility with DXE_DRIVER DXE_CORE UEFI_APPLICATION > UEFI_DRIVER > and does not list HOST_APPLICATION as expected. > > 4) Why do we need a new lib instance of the BaseCryptLib for > host based unit testing. I would think we would want to perform > unit tests on the BaseCryptLib instances that would actually be > used in FW components. Can we update the unit tests to test > the services provided in the Base, Pei, Runtime, and Smm > instances of the BaseCryptLib? > > 5) Why do we need a host based specific version of the CrtWrapper, > UnitTestHostCrtWrapper.c? > > 6) The file CryptoPkg/Test/UnitTest/Librray/BaseCryptLib/TestEKUCerts/ > ChainCreationInstructions.txt makes reference to a bintohex tool > and putting the results in a file called AllTestSignatures.h. > But I do not see this file in the patch. Are these instructions > out of date? > > Thanks, > > Mike > > [-- Attachment #2: Type: text/html, Size: 7288 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v3 3/3] AzurePipelines : Pr Gate: Turn on HBUT for CryptoPkg 2020-07-14 18:23 [PATCH v3 0/3] Add Unit Tests for BaseCryptLib to CryptoPkg matthewfcarlson 2020-07-14 18:23 ` [PATCH v3 1/3] UnitTestFrameworkPkg : BaseTimerLibPosix: Adds a host-based timer Lib matthewfcarlson 2020-07-14 18:23 ` [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based) matthewfcarlson @ 2020-07-14 18:23 ` matthewfcarlson 2020-07-15 2:39 ` Michael D Kinney 2 siblings, 1 reply; 10+ messages in thread From: matthewfcarlson @ 2020-07-14 18:23 UTC (permalink / raw) To: devel; +Cc: Sean Brogan, Bret Barkelew, Michael D Kinney, Liming Gao From: Matthew Carlson <macarl@microsoft.com> Turns on Host Based Unit Tests for CryptoPkg by enabling the target NOOPT in the CI pipeline. Cc: Sean Brogan <sean.brogan@microsoft.com> Cc: Bret Barkelew <Bret.Barkelew@microsoft.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Liming Gao <liming.gao@intel.com> Signed-off-by: Matthew Carlson <matthewfcarlson@gmail.com> --- .azurepipelines/templates/pr-gate-build-job.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.azurepipelines/templates/pr-gate-build-job.yml b/.azurepipelines/templates/pr-gate-build-job.yml index a9f89aa68451..e84ba80030b1 100644 --- a/.azurepipelines/templates/pr-gate-build-job.yml +++ b/.azurepipelines/templates/pr-gate-build-job.yml @@ -40,7 +40,7 @@ jobs: Build.Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' TARGET_CRYPTO: Build.Pkgs: 'CryptoPkg' - Build.Targets: 'DEBUG,RELEASE,NO-TARGET' + Build.Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' TARGET_SECURITY: Build.Pkgs: 'SecurityPkg' Build.Targets: 'DEBUG,RELEASE,NO-TARGET' -- 2.27.0.windows.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v3 3/3] AzurePipelines : Pr Gate: Turn on HBUT for CryptoPkg 2020-07-14 18:23 ` [PATCH v3 3/3] AzurePipelines : Pr Gate: Turn on HBUT for CryptoPkg matthewfcarlson @ 2020-07-15 2:39 ` Michael D Kinney 0 siblings, 0 replies; 10+ messages in thread From: Michael D Kinney @ 2020-07-15 2:39 UTC (permalink / raw) To: matthewfcarlson@gmail.com, devel@edk2.groups.io, Kinney, Michael D Cc: Sean Brogan, Bret Barkelew, Gao, Liming Matt, Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com> Mike > -----Original Message----- > From: matthewfcarlson@gmail.com > <matthewfcarlson@gmail.com> > Sent: Tuesday, July 14, 2020 11:23 AM > To: devel@edk2.groups.io > Cc: Sean Brogan <sean.brogan@microsoft.com>; Bret > Barkelew <Bret.Barkelew@microsoft.com>; Kinney, Michael > D <michael.d.kinney@intel.com>; Gao, Liming > <liming.gao@intel.com> > Subject: [PATCH v3 3/3] AzurePipelines : Pr Gate: Turn > on HBUT for CryptoPkg > > From: Matthew Carlson <macarl@microsoft.com> > > Turns on Host Based Unit Tests for CryptoPkg by enabling > the target > NOOPT in the CI pipeline. > > Cc: Sean Brogan <sean.brogan@microsoft.com> > Cc: Bret Barkelew <Bret.Barkelew@microsoft.com> > Cc: Michael D Kinney <michael.d.kinney@intel.com> > Cc: Liming Gao <liming.gao@intel.com> > > Signed-off-by: Matthew Carlson > <matthewfcarlson@gmail.com> > --- > .azurepipelines/templates/pr-gate-build-job.yml | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/.azurepipelines/templates/pr-gate-build- > job.yml b/.azurepipelines/templates/pr-gate-build- > job.yml > index a9f89aa68451..e84ba80030b1 100644 > --- a/.azurepipelines/templates/pr-gate-build-job.yml > +++ b/.azurepipelines/templates/pr-gate-build-job.yml > @@ -40,7 +40,7 @@ jobs: > Build.Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' > > TARGET_CRYPTO: > > Build.Pkgs: 'CryptoPkg' > > - Build.Targets: 'DEBUG,RELEASE,NO-TARGET' > > + Build.Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' > > TARGET_SECURITY: > > Build.Pkgs: 'SecurityPkg' > > Build.Targets: 'DEBUG,RELEASE,NO-TARGET' > > -- > 2.27.0.windows.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2020-07-15 23:31 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-07-14 18:23 [PATCH v3 0/3] Add Unit Tests for BaseCryptLib to CryptoPkg matthewfcarlson 2020-07-14 18:23 ` [PATCH v3 1/3] UnitTestFrameworkPkg : BaseTimerLibPosix: Adds a host-based timer Lib matthewfcarlson 2020-07-15 2:38 ` Michael D Kinney 2020-07-14 18:23 ` [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based) matthewfcarlson 2020-07-15 2:52 ` [edk2-devel] " Michael D Kinney 2020-07-15 18:16 ` matthewfcarlson 2020-07-15 19:03 ` Michael D Kinney 2020-07-15 23:31 ` Matthew Carlson 2020-07-14 18:23 ` [PATCH v3 3/3] AzurePipelines : Pr Gate: Turn on HBUT for CryptoPkg matthewfcarlson 2020-07-15 2:39 ` Michael D Kinney
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox