From nobody Tue Nov 26 00:40:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+62318+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+62318+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1594325248; cv=none; d=zohomail.com; s=zohoarc; b=LZgdQS0y/gsrQqWmIJSu0DvX4uuw70zORBN6uzMBbVuNKqG9yPV0xlf4ColIUYwLkeeFncVNQXr5oQKhr1w8ou3EBuFcbkGrC7O2xA0roQ1lb9+am/ZaXKK40HvIoWtjWgIY2PPBKEChb/b15Rltc0wfZUhlDJqrN5MbY90FJWw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1594325248; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=rh6MVEAYwvZoP5Cm/0nvHpZ9hsNXB2aUV5pjhSbhO/g=; b=bRnXTtn8hpE+9uo4DSMaExsTsuZyBvh6Wmz0Z5kECu0j36ueO/idSIxvr3Si6CLVyQ3eqTVlswti2Nst07w/ZQ5KFzj/NVGYeZ9z47atq24MCN+aycZV6CPlPaRjAtZFfGw5eaViLDyoL6WPq/f+n0Xfp70DOrod96+3qBXcDbY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+62318+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1594325248943175.47744346625677; Thu, 9 Jul 2020 13:07:28 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id tpiKYY1788612xUrD8TFRb7i; Thu, 09 Jul 2020 13:07:28 -0700 X-Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) by mx.groups.io with SMTP id smtpd.web10.2279.1594320443104781899 for ; Thu, 09 Jul 2020 11:47:23 -0700 X-Received: by mail-pf1-f194.google.com with SMTP id s26so1395825pfm.4 for ; Thu, 09 Jul 2020 11:47:23 -0700 (PDT) X-Gm-Message-State: vTFOvjxQW1Ip53KCPjCeEFXJx1787277AA= X-Google-Smtp-Source: ABdhPJzRBsNwMs//sLFcasec87M+0bZRSst2GgSCOBmz9Mu8q2iFx2V73PUzQZS53HVMEj6rSeNQyg== X-Received: by 2002:aa7:860f:: with SMTP id p15mr23391011pfn.59.1594320442406; Thu, 09 Jul 2020 11:47:22 -0700 (PDT) X-Received: from tvis-name-05.localdomain ([50.34.40.129]) by smtp.gmail.com with ESMTPSA id b11sm3581140pfr.179.2020.07.09.11.47.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Jul 2020 11:47:22 -0700 (PDT) From: matthewfcarlson@gmail.com To: devel@edk2.groups.io Cc: Michael D Kinney , Sean Brogan , Bret Barkelew , Matthew Carlson Subject: [edk2-devel] [PATCH v2 1/3] UnitTestFrameworkPkg : BaseTimerLibPosix: Adds a host-based timer Lib Date: Thu, 9 Jul 2020 11:47:18 -0700 Message-Id: <20200709184720.1746-2-matthewfcarlson@gmail.com> In-Reply-To: <20200709184720.1746-1-matthewfcarlson@gmail.com> References: <20200709184720.1746-1-matthewfcarlson@gmail.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,matthewfcarlson@gmail.com Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1594325248; bh=d2Sd+sC4rCkcdwP38bOdwCGL79NlcGugEbYuiGmXonI=; h=Cc:Date:From:Reply-To:Subject:To; b=MauZ6hrreusUIhdffn2t5j5KouHvGknG25gCSsvycz+Na6i6sSejUSxGwfNTtc0SyK9 Xp4gSYCaAVxcVdGoHee0YLgGgOnArE4n0s/u9Mp/GX4fzBoQ1TmvaHBJmJOFG5aI2kzkV yP2OcyAYQKfocCJVw8Nj4FpV5oawJlAzAGU= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" From: Matthew Carlson This adds a host based BaseTimerLib that won't assert. Cc: Michael D Kinney Cc: Sean Brogan Cc: Bret Barkelew Signed-off-by: Matthew Carlson --- UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/TimerLibPosix.c = | 125 ++++++++++++++++++++ UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.inf= | 38 ++++++ UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.uni= | 15 +++ UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest.dsc = | 1 + UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc = | 4 +- 5 files changed, 180 insertions(+), 3 deletions(-) diff --git a/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/TimerLibP= osix.c b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/TimerLibPosix= .c new file mode 100644 index 000000000000..cd12dde7bd81 --- /dev/null +++ b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/TimerLibPosix.c @@ -0,0 +1,125 @@ +/** @file + A semi-functional instance of the Timer Library. + + Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.
+ Copyright (c) Microsoft Corporation. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include +#include + +/** + 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 + ) +{ + return NanoSecondDelay(MicroSeconds * 1000000) / 1000000; +} + +/** + 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 0; +} + +/** + 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 + ) +{ + // Return the current number of nanoseconds on the clock + struct timespec ts; + timespec_get(&ts, TIME_UTC); + 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 s= tarts + with immediately after is it rolls over is returned in StartValue. If + EndValue is not NULL, then the value that the performance counter end wi= th + immediately before it rolls over is returned in EndValue. The 64-bit + frequency of the performance counter in Hz is always returned. If StartV= alue + is less than EndValue, then the performance counter counts up. If StartV= alue + is greater than EndValue, then the performance counter counts down. For + example, a 64-bit free running counter that counts up would have a Start= Value + 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 bef= ore + it rolls over. + + @return The frequency in Hz. + +**/ +UINT64 +EFIAPI +GetPerformanceCounterProperties ( + OUT UINT64 *StartValue, OPTIONAL + OUT UINT64 *EndValue OPTIONAL + ) +{ + return (UINT64)(-1); +} + +/** + 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 cou= nter. + + @return The elapsed time in nanoseconds. + +**/ +UINT64 +EFIAPI +GetTimeInNanoSecond ( + IN UINT64 Ticks + ) +{ + return Ticks; +} diff --git a/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimer= LibPosix.inf b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTim= erLibPosix.inf new file mode 100644 index 000000000000..aed6f15e1828 --- /dev/null +++ b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosi= x.inf @@ -0,0 +1,38 @@ +## @file +# An instance of Timer Library for posix compliant hosts. +# +# A semi-functional instance of the Timer Library that can be used for ho= st based testing +# as a functional timer library instance. + +# +# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
+# Copyright (c) Microsoft Corporation. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D BaseTimerLibPosix + MODULE_UNI_FILE =3D BaseTimerLibPosix.uni + FILE_GUID =3D a2a413b8-43c3-40cc-a298-be7a214d3564 + MODULE_TYPE =3D BASE + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D TimerLib + +# +# VALID_ARCHITECTURES =3D HOST +# + +[Sources] + TimerLibPosix.c + + +[Packages] + MdePkg/MdePkg.dec + + +[LibraryClasses] + DebugLib diff --git a/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimer= LibPosix.uni b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTim= erLibPosix.uni new file mode 100644 index 000000000000..21cae0e7c7aa --- /dev/null +++ b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosi= x.uni @@ -0,0 +1,15 @@ +// @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) 2007 - 2014, Intel Corporation. All rights reserved.
+// 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 th= e Timer Library that can be used for host based unit tests." diff --git a/UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest.dsc b/U= nitTestFrameworkPkg/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/MemoryAlloca= tionLibPosix.inf + UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.i= nf UnitTestFrameworkPkg/Library/UnitTestLib/UnitTestLibCmocka.inf diff --git a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc b/UnitTe= stFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc index e954968efc52..70d9f954d3ca 100644 --- a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc +++ b/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc @@ -13,9 +13,7 @@ UnitTestLib|UnitTestFrameworkPkg/Library/UnitTestLib/UnitTestLibCmocka.i= nf DebugLib|UnitTestFrameworkPkg/Library/Posix/DebugLibPosix/DebugLibPosix.= inf MemoryAllocationLib|UnitTestFrameworkPkg/Library/Posix/MemoryAllocationL= ibPosix/MemoryAllocationLibPosix.inf - -[BuildOptions] - GCC:*_*_*_CC_FLAGS =3D -fno-pie + TimerLib|UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerL= ibPosix.inf =20 [BuildOptions.common.EDKII.HOST_APPLICATION] # --=20 2.27.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#62318): https://edk2.groups.io/g/devel/message/62318 Mute This Topic: https://groups.io/mt/75405698/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue Nov 26 00:40:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+62320+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+62320+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1594325249; cv=none; d=zohomail.com; s=zohoarc; b=NPyiwp5C6M5udCvfNCQae5K3wnrsrmmvSak17uLrZuWXzULgzhtf3jZXaKMa9H7G8vbwTjN6v1U8dtwoQktl/9VGyB3T5fqr2h13GVdVD6eO0COYQZeDcfraEaSgnSug0eGqtBl2wrom7erPv9Etw7zQbelopFcFRhQBwfijs60= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1594325249; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=+UvCcERk6YyEj20o63KRO/5xDMNLZN40/TK8DmxQZHw=; b=brif8fiqbsiASc3UeZabEGH60wjTmqw6ofLcOrz1YHnNCTzsVRGAGuLrz4r/zECNtxNWe2UlfknAPC9mxWTUTlkf1iNIcp/YlnL7lPSvStFBuG5GtTU+x1rLqC5ZnpA2QJrPMZ3u82kZ91OZnxq6FzP32R2fIlmsoY5UOWrd9AA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+62320+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 15943252498061009.0919482776693; Thu, 9 Jul 2020 13:07:29 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id eu6xYY1788612x4tHbFsHhpZ; Thu, 09 Jul 2020 13:07:29 -0700 X-Received: from mail-pl1-f196.google.com (mail-pl1-f196.google.com [209.85.214.196]) by mx.groups.io with SMTP id smtpd.web12.2324.1594320447610906069 for ; Thu, 09 Jul 2020 11:47:27 -0700 X-Received: by mail-pl1-f196.google.com with SMTP id o1so1198027plk.1 for ; Thu, 09 Jul 2020 11:47:27 -0700 (PDT) X-Gm-Message-State: X3zwFdEkNYqSs8yP3MFxHoUux1787277AA= X-Google-Smtp-Source: ABdhPJxHgQOL2kLMpL4/2bL86q7EOioWQLS6SbriT6VdKsJ27ZpQSHYXZ1++/cAF6TexggbvfA2zzQ== X-Received: by 2002:a17:90a:6983:: with SMTP id s3mr1505464pjj.55.1594320444179; Thu, 09 Jul 2020 11:47:24 -0700 (PDT) X-Received: from tvis-name-05.localdomain ([50.34.40.129]) by smtp.gmail.com with ESMTPSA id b11sm3581140pfr.179.2020.07.09.11.47.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Jul 2020 11:47:23 -0700 (PDT) From: matthewfcarlson@gmail.com To: devel@edk2.groups.io Cc: Jian J Wang , Xiaoyu Lu , Matthew Carlson Subject: [edk2-devel] [PATCH v2 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based) Date: Thu, 9 Jul 2020 11:47:19 -0700 Message-Id: <20200709184720.1746-3-matthewfcarlson@gmail.com> In-Reply-To: <20200709184720.1746-1-matthewfcarlson@gmail.com> References: <20200709184720.1746-1-matthewfcarlson@gmail.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,matthewfcarlson@gmail.com Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1594325249; bh=5+IuodtwKZGqRwNXNOE1YleCpgZFqDeKNxezLD5NjNo=; h=Cc:Date:From:Reply-To:Subject:To; b=HWWb/lgUSsumtBFS+I9BSJC/Tql7/iRzV9LLJ9KaSdWXz0bgnRHLgMS6KHr5yAPEVua OYKHtdBpZoE1CQKpsHyNTB9Z1UWidQjvA7qlKif36/90KVPDgnvKvqzOj1Ka3ZTjdxzg1 8v1g0XH4vUrGpzcepj+EDJfQytcXdlW8H7s= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" From: Matthew Carlson 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 Cc: Xiaoyu Lu Signed-off-by: Matthew Carlson --- 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 = | 6 +- 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/ChainCreationIns= tructions.txt | 92 ++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/CreateTestCerts.= cmd | 11 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/SignFirmwareWith= EKUs.cmd | 76 ++ CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingIs= suingCA.ini | 45 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLe= afSigner.ini | 25 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLe= afSignerPid1.ini | 24 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLe= afSignerPid12345.ini | 27 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingNo= EKUsInSigner.ini | 16 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingPo= licyCA.ini | 28 + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingRo= ot.ini | 28 + 34 files changed, 5627 insertions(+), 1 deletion(-) 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.
+Copyright (c) Microsoft Corporation +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + +#include +#include + +/* Convert character to lowercase */ +int tolower (int c) +{ + if (('A' <=3D (c)) && ((c) <=3D '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 !=3D NULL); + ASSERT(s2 !=3D NULL); + + if (n !=3D 0) { + do { + Val =3D tolower(*s1) - tolower(*s2); + if (Val !=3D 0) { + return Val; + } + ++s1; + ++s2; + if (*s1 =3D=3D '\0') { + break; + } + } while (--n !=3D 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 =3D 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.
+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 Specifica= tion +// +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 PeSha1Hash[] =3D { + 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[] =3D { + 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 SE= CURITY +// directory in PE/COFF Header. +// +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 AuthenticodeWithSha1[] =3D { + 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 SE= CURITY +// directory in PE/COFF Header. +// +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 AuthenticodeWithSha256[] =3D { + 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[] =3D { + 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[] =3D { + 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[] =3D { + 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 A= uthenticode. + // According to PKCS#7 Definition: + // SignedData ::=3D SEQUENCE { + // version Version, + // digestAlgorithms DigestAlgorithmIdentifiers, + // contentInfo ContentInfo, + // .... } + // The DigestAlgorithmIdentifiers can be used to determine the hash a= lgorithm in PE/COFF hashing + // This field has the fixed offset (+32) in final Authenticode ASN.1 = data. + // + if (CompareMem (AuthenticodeWithSha1 + 32, &HashOidValue[8], 5) =3D=3D 0= ) { + // + // Verify Authenticode signature. + // The PeHash value should be calculated following MSFT's Authenticode= Specification. + // + Status =3D AuthenticodeVerify ( + AuthenticodeWithSha1, + sizeof (AuthenticodeWithSha1), + TestRootCert1, + sizeof (TestRootCert1), + PeSha1Hash, + SHA1_DIGEST_SIZE + ); + UT_ASSERT_TRUE (Status); + } + + if (CompareMem (AuthenticodeWithSha256 + 32, &HashOidValue[22], 9) =3D= =3D 0) { + Status =3D AuthenticodeVerify ( + AuthenticodeWithSha256, + sizeof (AuthenticodeWithSha256), + TestRootCert2, + sizeof (TestRootCert2), + PeSha256Hash, + SHA256_DIGEST_SIZE + ); + UT_ASSERT_TRUE (Status); + } + + return UNIT_TEST_PASSED; +} + +TEST_DESC mAuthenticodeTest[] =3D { + // + // -----Description--------------------------------------Class--------= --------------Function-----------------Pre---Post--Context + // + {"TestVerifyAuthenticodeVerify()", "CryptoPkg.BaseCryptLib.Auth= enticode", TestVerifyAuthenticodeVerify, NULL, NULL, NULL}, +}; + +UINTN mAuthenticodeTestNum =3D ARRAY_SIZE(mAuthenticodeTest); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCryptLibUnitT= ests.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.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ +#include "TestBaseCryptLib.h" + +SUITE_DESC mSuiteDesc[] =3D { + // + // 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 =3D=3D NULL || UnitTestVersion =3D=3D NULL || UnitTestN= ame =3D=3D NULL) { + return EFI_INVALID_PARAMETER; + } + Status =3D EFI_SUCCESS; + // + // Start setting up the test framework for running the tests. + // + Status =3D InitUnitTestFramework (Framework, UnitTestName, gEfiCallerB= aseName, UnitTestVersion); + if (EFI_ERROR (Status)) { + DEBUG((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status =3D %= r\n", Status)); + goto EXIT; + } + + for (SuiteIndex =3D 0; SuiteIndex < ARRAY_SIZE(mSuiteDesc); SuiteIndex= ++) { + UNIT_TEST_SUITE_HANDLE Suite =3D NULL; + Status =3D CreateUnitTestSuite (&Suite, *Framework, mSuiteDesc[Sui= teIndex].Title, mSuiteDesc[SuiteIndex].Package, mSuiteDesc[SuiteIndex].Sup,= mSuiteDesc[SuiteIndex].Tdn); + if (EFI_ERROR (Status)) { + Status =3D EFI_OUT_OF_RESOURCES; + goto EXIT; + } + for (TestIndex =3D 0; TestIndex < *mSuiteDesc[SuiteIndex].TestNum;= TestIndex++) { + AddTestCase (Suite, (mSuiteDesc[SuiteIndex].TestDesc + TestInd= ex)->Description, (mSuiteDesc[SuiteIndex].TestDesc + TestIndex)->ClassName,= (mSuiteDesc[SuiteIndex].TestDesc + TestIndex)->Func, (mSuiteDesc[SuiteInde= x].TestDesc + TestIndex)->PreReq, (mSuiteDesc[SuiteIndex].TestDesc + TestIn= dex)->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.
+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[] =3D { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesEcbKey[] =3D { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesEcbCipher[] =3D { + 0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7, + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesEcb2Cipher[] =3D { + 0x92, 0x95, 0xB5, 0x9B, 0xB3, 0x84, 0x73, 0x6E, + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesCbcData[] =3D { + 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[] =3D { + 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[] =3D { + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesCbc3Cipher[] =3D { + 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[] =3D { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, = 0x00, 0x00, 0x00, 0x00 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128EcbKey[] =3D { + 0x10, 0xa5, 0x88, 0x69, 0xd7, 0x4b, 0xe5, 0xa3, 0x74, 0xcf, 0x86, 0x7c, = 0xfb, 0x47, 0x38, 0x59 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128EcbCipher[] =3D { + 0x6d, 0x25, 0x1e, 0x69, 0x44, 0xb0, 0x51, 0xe0, 0x4e, 0xaa, 0x6f, 0xb4, = 0xdb, 0xf7, 0x84, 0x65 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes192EcbData[] =3D { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, = 0x00, 0x00, 0x00, 0x00 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes192EcbKey[] =3D { + 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[] =3D { + 0xdd, 0x8a, 0x49, 0x35, 0x14, 0x23, 0x1c, 0xbf, 0x56, 0xec, 0xce, 0xe4, = 0xc4, 0x08, 0x89, 0xfb + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes256EcbData[] =3D { + 0x01, 0x47, 0x30, 0xf8, 0x0a, 0xc6, 0x25, 0xfe, 0x84, 0xf0, 0x26, 0xc6, = 0x0b, 0xfd, 0x54, 0x7d + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes256EcbKey[] =3D { + 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[] =3D { + 0x5c, 0x9d, 0x84, 0x4e, 0xd4, 0x6f, 0x98, 0x85, 0x08, 0x5e, 0x5d, 0x6a, = 0x4f, 0x94, 0xc7, 0xd7 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128CbcData[] =3D { + 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[] =3D { + 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0, 0x61, 0x1b, 0xbb, 0x3e, = 0x20, 0x25, 0xa4, 0x5a + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128CbcIvec[] =3D { + 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 0xdd, 0xb3, 0xba, 0x69, = 0x5a, 0x2e, 0x6f, 0x58 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128CbcCipher[] =3D { + 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 Encryptio= n Algorithm 'Arcfour'"). +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Arc4Data[] =3D { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Arc4Key[] =3D { + 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF + }; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Arc4Cipher[] =3D { + 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 =3D {TdesGetContextSize, Tde= sInit, TdesEcbEncrypt, TdesEcbDecrypt, NULL, NULL, NULL= , TdesEcbKey, 64, NULL, TdesEcbData, 8, = TdesEcbCipher, 8}; +//BLOCK_CIPHER_TEST_CONTEXT mTdesCbcTestCtx =3D {TdesGetContextSize, Tde= sInit, NULL, NULL, TdesCbcEncrypt, TdesCbcDecrypt, NULL= , TdesCbcKey, 192, TdesCbcIvec, TdesCbcData, sizeof(= TdesCbcData), TdesCbc3Cipher, sizeof(TdesCbc3Cipher)}; +//BLOCK_CIPHER_TEST_CONTEXT mAes128EcbTestCtx =3D {AesGetContextSize, Aes= Init, AesEcbEncrypt, AesEcbDecrypt, NULL, NULL, NULL= , Aes128EcbKey, 128, NULL, Aes128EcbData, sizeof(= Aes128EcbData), Aes128EcbCipher, sizeof(Aes128EcbCipher)}; +//BLOCK_CIPHER_TEST_CONTEXT mAes192EcbTestCtx =3D {AesGetContextSize, Aes= Init, AesEcbEncrypt, AesEcbDecrypt, NULL, NULL, NULL= , Aes192EcbKey, 192, NULL, Aes192EcbData, sizeof(= Aes192EcbData), Aes192EcbCipher, sizeof(Aes192EcbCipher)}; +//BLOCK_CIPHER_TEST_CONTEXT mAes256EcbTestCtx =3D {AesGetContextSize, Aes= Init, AesEcbEncrypt, AesEcbDecrypt, NULL, NULL, NULL= , Aes256EcbKey, 256, NULL, Aes256EcbData, sizeof(= Aes256EcbData), Aes256EcbCipher, sizeof(Aes256EcbCipher)}; +//BLOCK_CIPHER_TEST_CONTEXT mArc4TestCtx =3D {Arc4GetContextSize, Arc= 4Init, Arc4Encrypt, (EFI_BLOCK_CIPHER_ECB_ENCRYPT_DECRYPT), Arc4Decrypt,= NULL, NULL, Arc4Reset, Arc4Key, sizeof(Arc4Key= ), NULL, Arc4Data, sizeof(Arc4Data), Arc4Cipher, si= zeof(Arc4Cipher)}; +BLOCK_CIPHER_TEST_CONTEXT mAes128CbcTestCtx =3D {AesGetContextSize, AesIn= it, NULL, NULL, AesCbcEncrypt, AesCbcDecrypt, NULL, = Aes128CbcKey, 128, Aes128CbcIvec, Aes128CbcData, sizeof(Ae= s128CbcData), Aes128CbcCipher, sizeof(Aes128CbcCipher)}; + + +UNIT_TEST_STATUS +EFIAPI +TestVerifyBLockCiperPreReq ( + UNIT_TEST_CONTEXT Context + ) +{ + BLOCK_CIPHER_TEST_CONTEXT *TestContext; + UINTN CtxSize; + + TestContext =3D Context; + CtxSize =3D TestContext->GetContextSize (); + TestContext->Ctx =3D AllocatePool (CtxSize); + if (TestContext->Ctx =3D=3D NULL) { + return UNIT_TEST_ERROR_TEST_FAILED; + } + + return UNIT_TEST_PASSED; +} + +VOID +EFIAPI +TestVerifyBLockCiperCleanUp ( + UNIT_TEST_CONTEXT Context + ) +{ + BLOCK_CIPHER_TEST_CONTEXT *TestContext; + + TestContext =3D Context; + if (TestContext->Ctx !=3D 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 =3D Context; + + ZeroMem (Encrypt, sizeof (Encrypt)); + ZeroMem (Decrypt, sizeof (Decrypt)); + + Status =3D TestContext->Init (TestContext->Ctx, TestContext->Key, TestCo= ntext->KeySize); + UT_ASSERT_TRUE (Status); + + if (TestContext->Ivec =3D=3D NULL) { + Status =3D TestContext->EcbEncrypt (TestContext->Ctx, TestContext->Dat= a, TestContext->DataSize, Encrypt); + UT_ASSERT_TRUE (Status); + + if (TestContext->Reset !=3D NULL) { + Status =3D TestContext->Reset (TestContext->Ctx); + UT_ASSERT_TRUE (Status); + } + + Status =3D TestContext->EcbDecrypt (TestContext->Ctx, Encrypt, TestCon= text->DataSize, Decrypt); + UT_ASSERT_TRUE (Status); + + } else { + Status =3D TestContext->CbcEncrypt (TestContext->Ctx, TestContext->Dat= a, TestContext->DataSize, TestContext->Ivec, Encrypt); + UT_ASSERT_TRUE (Status); + + if (TestContext->Reset !=3D NULL) { + Status =3D TestContext->Reset (TestContext->Ctx); + UT_ASSERT_TRUE (Status); + } + + Status =3D TestContext->CbcDecrypt (TestContext->Ctx, Encrypt, TestCon= text->DataSize, TestContext->Ivec, Decrypt); + UT_ASSERT_TRUE (Status); + } + + UT_ASSERT_MEM_EQUAL (Encrypt, TestContext->Cipher, TestContext->CipherSi= ze); + UT_ASSERT_MEM_EQUAL (Decrypt, TestContext->Data, TestContext->DataSize= ); + + return UNIT_TEST_PASSED; +} + +TEST_DESC mBlockCipherTest[] =3D { + // + // -----Description-------------------------Class---------------------= ----Function---------------Pre---------------------------Post--------------= ----Context + // + {"TestVerifyAes128Cbc()", "CryptoPkg.BaseCryptLib.BlockCipher", Tes= tVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanUp,= &mAes128CbcTestCtx}, + // These are commented out as these functions have been deprecated, bu= t they have been left in for future reference + //{"TestVerifyTdesEcb()", "CryptoPkg.BaseCryptLib.BlockCipher", T= estVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanU= p, &mTdesEcbTestCtx}, + //{"TestVerifyTdesCbc()", "CryptoPkg.BaseCryptLib.BlockCipher", T= estVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanU= p, &mTdesCbcTestCtx}, + //{"TestVerifyAes128Ecb()", "CryptoPkg.BaseCryptLib.BlockCipher", T= estVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanU= p, &mAes128EcbTestCtx}, + //{"TestVerifyAes192Ecb()", "CryptoPkg.BaseCryptLib.BlockCipher", T= estVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanU= p, &mAes192EcbTestCtx}, + //{"TestVerifyAes256Ecb()", "CryptoPkg.BaseCryptLib.BlockCipher", T= estVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanU= p, &mAes256EcbTestCtx}, + //{"TestVerifyArc4()", "CryptoPkg.BaseCryptLib.BlockCipher", T= estVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanU= p, &mArc4TestCtx}, +}; + +UINTN mBlockCipherTestNum =3D ARRAY_SIZE(mBlockCipherTest); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c b/Crypt= oPkg/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.
+SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "TestBaseCryptLib.h" + +VOID *mDh1; +VOID *mDh2; + +UNIT_TEST_STATUS +EFIAPI +TestVerifyDhPreReq ( + UNIT_TEST_CONTEXT Context + ) +{ + mDh1 =3D DhNew (); + if (mDh1 =3D=3D NULL) { + return UNIT_TEST_ERROR_TEST_FAILED; + } + + mDh2 =3D DhNew (); + if (mDh2 =3D=3D NULL) { + return UNIT_TEST_ERROR_TEST_FAILED; + } + + return UNIT_TEST_PASSED; +} + +VOID +EFIAPI +TestVerifyDhCleanUp ( + UNIT_TEST_CONTEXT Context + ) +{ + if (mDh1 !=3D NULL) { + DhFree (mDh1); + mDh1 =3D NULL; + } + if (mDh2 !=3D NULL) { + DhFree (mDh2); + mDh2 =3D 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 =3D sizeof (PublicKey1); + PublicKey2Length =3D sizeof (PublicKey2); + Key1Length =3D sizeof (Key1); + Key2Length =3D sizeof (Key2); + + Status =3D DhGenerateParameter (mDh1, 2, 64, Prime); + UT_ASSERT_TRUE (Status); + + Status =3D DhSetParameter (mDh2, 2, 64, Prime); + UT_ASSERT_TRUE (Status); + + Status =3D DhGenerateKey (mDh1, PublicKey1, &PublicKey1Length); + UT_ASSERT_TRUE (Status); + + Status =3D DhGenerateKey (mDh2, PublicKey2, &PublicKey2Length); + UT_ASSERT_TRUE (Status); + + Status =3D DhComputeKey (mDh1, PublicKey2, PublicKey2Length, Key1, &Key1= Length); + UT_ASSERT_TRUE (Status); + + Status =3D DhComputeKey (mDh2, PublicKey1, PublicKey1Length, Key2, &Key2= Length); + UT_ASSERT_TRUE (Status); + + UT_ASSERT_EQUAL (Key1Length, Key2Length); + + UT_ASSERT_MEM_EQUAL (Key1, Key2, Key1Length); + + return UNIT_TEST_PASSED; +} + +TEST_DESC mDhTest[] =3D { + // + // -----Description--------------------------------Class--------------= -------Function----------------Pre-----------------Post------------Context + // + {"TestVerifyDhGenerateKey()", "CryptoPkg.BaseCryptLib.Dh", Te= stVerifyDhGenerateKey, TestVerifyDhPreReq, TestVerifyDhCleanUp, NULL}, +}; + +UINTN mDhTestNum =3D ARRAY_SIZE(mDhTest); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests.c b/Cry= ptoPkg/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.
+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 =3D "abc"; + +// +// Result for MD5("abc"). (From "A.5 Test suite" of IETF RFC1321) +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Md5Digest[MD5_DIGEST_SIZE] =3D { + 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] =3D= { + 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]= =3D { + 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]= =3D { + 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]= =3D { + 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 =3D {MD5_DIGEST_SIZE, Md5GetCont= extSize, Md5Init, Md5Update, Md5Final, Md5HashAll, Md5Digest= }; +HASH_TEST_CONTEXT mSha1TestCtx =3D {SHA1_DIGEST_SIZE, Sha1GetCon= textSize, Sha1Init, Sha1Update, Sha1Final, Sha1HashAll, Sha1Diges= t}; +HASH_TEST_CONTEXT mSha256TestCtx =3D {SHA256_DIGEST_SIZE, Sha256GetC= ontextSize, Sha256Init, Sha256Update, Sha256Final, Sha256HashAll, Sha256Dig= est}; +HASH_TEST_CONTEXT mSha384TestCtx =3D {SHA384_DIGEST_SIZE, Sha384GetC= ontextSize, Sha384Init, Sha384Update, Sha384Final, Sha384HashAll, Sha384Dig= est}; +HASH_TEST_CONTEXT mSha512TestCtx =3D {SHA512_DIGEST_SIZE, Sha512GetC= ontextSize, Sha512Init, Sha512Update, Sha512Final, Sha512HashAll, Sha512Dig= est}; + +UNIT_TEST_STATUS +EFIAPI +TestVerifyHashPreReq ( + UNIT_TEST_CONTEXT Context + ) +{ + HASH_TEST_CONTEXT *HashTestContext; + UINTN CtxSize; + + HashTestContext =3D Context; + CtxSize =3D HashTestContext->GetContextSize (); + HashTestContext->HashCtx =3D AllocatePool (CtxSize); + if (HashTestContext->HashCtx =3D=3D NULL) { + return UNIT_TEST_ERROR_TEST_FAILED; + } + + return UNIT_TEST_PASSED; +} + +VOID +EFIAPI +TestVerifyHashCleanUp ( + UNIT_TEST_CONTEXT Context + ) +{ + HASH_TEST_CONTEXT *HashTestContext; + + HashTestContext =3D Context; + if (HashTestContext->HashCtx !=3D 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 =3D Context; + + DataSize =3D AsciiStrLen (HashData); + + ZeroMem (Digest, MAX_DIGEST_SIZE); + + Status =3D HashTestContext->HashInit (HashTestContext->HashCtx); + UT_ASSERT_TRUE (Status); + + Status =3D HashTestContext->HashUpdate (HashTestContext->HashCtx, HashD= ata, DataSize); + UT_ASSERT_TRUE (Status); + + Status =3D HashTestContext->HashFinal (HashTestContext->HashCtx, Digest= ); + UT_ASSERT_TRUE (Status); + + UT_ASSERT_MEM_EQUAL (Digest, HashTestContext->Digest, HashTestContext->D= igestSize); + + ZeroMem (Digest, MAX_DIGEST_SIZE); + Status =3D HashTestContext->HashAll (HashData, DataSize, Digest); + UT_ASSERT_TRUE (Status); + + UT_ASSERT_MEM_EQUAL (Digest, HashTestContext->Digest, HashTestContext->D= igestSize); + + return UNIT_TEST_PASSED; +} + +TEST_DESC mHashTest[] =3D { + // + // -----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 =3D ARRAY_SIZE(mHashTest); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c b/Cry= ptoPkg/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.
+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 =3D "Hi There"; + +// +// Key value for HMAC-MD5 validation. (From "2. Test Cases for HMAC-MD5" o= f IETF RFC2202) +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacMd5Key[16] =3D { + 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[] =3D { + 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] =3D { + 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[] =3D { + 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] =3D { + 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 R= FC4231) +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha256Digest[] =3D { + 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 ou= t for future reference +//HMAC_TEST_CONTEXT mHmacMd5TestCtx =3D {MD5_DIGEST_SIZE, Hmac= Md5New, HmacMd5SetKey, HmacMd5Update, HmacMd5Final, HmacMd5Key,= sizeof(HmacMd5Key), HmacMd5Digest}; +//HMAC_TEST_CONTEXT mHmacSha1TestCtx =3D {SHA1_DIGEST_SIZE, Hmac= Sha1New, HmacSha1SetKey, HmacSha1Update, HmacSha1Final, HmacSha1Key= , sizeof(HmacSha1Key), HmacSha1Digest}; +HMAC_TEST_CONTEXT mHmacSha256TestCtx =3D {SHA256_DIGEST_SIZE, HmacSh= a256New, HmacSha256SetKey, HmacSha256Update, HmacSha256Final, HmacSha256Key= , sizeof(HmacSha256Key), HmacSha256Digest}; + + +UNIT_TEST_STATUS +EFIAPI +TestVerifyHmacPreReq ( + UNIT_TEST_CONTEXT Context + ) +{ + HMAC_TEST_CONTEXT *HmacTestContext; + + HmacTestContext =3D Context; + HmacTestContext->HmacCtx =3D HmacTestContext->HmacNew(); + if (HmacTestContext->HmacCtx =3D=3D NULL) { + return UNIT_TEST_ERROR_TEST_FAILED; + } + + return UNIT_TEST_PASSED; +} + +VOID +EFIAPI +TestVerifyHmacCleanUp ( + UNIT_TEST_CONTEXT Context + ) +{ + HMAC_TEST_CONTEXT *HmacTestContext; + + HmacTestContext =3D Context; + if (HmacTestContext->HmacCtx !=3D 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 =3D Context; + + ZeroMem (Digest, MAX_DIGEST_SIZE); + + Status =3D HmacTestContext->HmacInit (HmacTestContext->HmacCtx, HmacTes= tContext->Key, HmacTestContext->KeySize); + UT_ASSERT_TRUE (Status); + + Status =3D HmacTestContext->HmacUpdate (HmacTestContext->HmacCtx, HmacD= ata, 8); + UT_ASSERT_TRUE (Status); + + Status =3D HmacTestContext->HmacFinal (HmacTestContext->HmacCtx, Digest= ); + UT_ASSERT_TRUE (Status); + + UT_ASSERT_MEM_EQUAL (Digest, HmacTestContext->Digest, HmacTestContext->D= igestSize); + + return UNIT_TEST_PASSED; +} + +TEST_DESC mHmacTest[] =3D { + // + // -----Description---------------------Class---------------------Func= tion---------------Pre------------------Post------------Context + // + {"TestVerifyHmacSha256()", "CryptoPkg.BaseCryptLib.Hmac", TestVerify= Hmac, TestVerifyHmacPreReq, TestVerifyHmacCleanUp, &mHmacSha256TestCtx}, + // These functions have been deprecated but they've been left commente= d out for future reference + //{"TestVerifyHmacMd5()", "CryptoPkg.BaseCryptLib.Hmac", TestVeri= fyHmac, TestVerifyHmacPreReq, TestVerifyHmacCleanUp, &mHmacMd5TestCtx}, + //{"TestVerifyHmacSha1()", "CryptoPkg.BaseCryptLib.Hmac", TestVeri= fyHmac, TestVerifyHmacPreReq, TestVerifyHmacCleanUp, &mHmacSha1TestCtx}, + +}; + +UINTN mHmacTestNum =3D 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.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include "TestBaseCryptLib.h" + +CONST UINT8 RandSeed[] =3D "This is the random seed for PRNG verificatio= n."; + +// +// Self signed X509 certificate +// CN =3D ca.self +// O =3D Intel +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 SelfTestCert[] =3D { + 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[] =3D { + 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] =3D '1'; + File[1] =3D '2'; + File[2] =3D '3'; + File[3] =3D 0; + + OutBuffer =3D NULL; + OutBufferSize =3D 0; + OutBuffer2 =3D NULL; + OutBuffer2Size =3D 0; + + Status =3D Pkcs1v2Encrypt ( + SelfTestCert, + (UINTN)sizeof (SelfTestCert), + File, + (UINTN)sizeof (File), + NULL, + 0, + &OutBuffer, + (UINTN *)&OutBufferSize + ); + UT_ASSERT_TRUE (Status); + + Status =3D 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 =3D (CompareMem (OutBuffer, OutBuffer2, OutBufferSize >=3D OutBuf= fer2Size ? OutBufferSize : OutBuffer2Size) =3D=3D 0); + UT_ASSERT_FALSE (Status); + + if (OutBuffer) { + FreePool (OutBuffer); + OutBuffer =3D NULL; + OutBufferSize =3D 0; + } + + if (OutBuffer2) { + FreePool (OutBuffer2); + OutBuffer2 =3D NULL; + OutBuffer2Size =3D 0; + } + + Status =3D Pkcs1v2Encrypt ( + SelfTestCert, + (UINTN)sizeof (SelfTestCert), + File, + (UINTN)4, + RandSeed, + (UINTN)sizeof (RandSeed), + &OutBuffer, + (UINTN *)&OutBufferSize + ); + UT_ASSERT_TRUE (Status); + + Status =3D 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 =3D (CompareMem (OutBuffer, OutBuffer2, OutBufferSize >=3D OutBuf= fer2Size ? OutBufferSize : OutBuffer2Size) =3D=3D 0); + UT_ASSERT_FALSE (Status); + + if (OutBuffer) { + FreePool (OutBuffer); + OutBuffer =3D NULL; + OutBufferSize =3D 0; + } + + if (OutBuffer2) { + FreePool (OutBuffer2); + OutBuffer2 =3D NULL; + OutBuffer2Size =3D 0; + } + + Status =3D Pkcs1v2Encrypt ( + NULL, + (UINTN)sizeof (SelfTestCert), + File, + (UINTN)4, + NULL, + 0, + &OutBuffer, + (UINTN *)&OutBufferSize + ); + UT_ASSERT_FALSE (Status); + + Status =3D Pkcs1v2Encrypt ( + SelfTestCert, + (UINTN)sizeof (SelfTestCert), + File, + (UINTN)4, + NULL, + 0, + (UINT8 **)NULL, + (UINTN *)&OutBufferSize + ); + UT_ASSERT_FALSE (Status); + + Status =3D Pkcs1v2Encrypt ( + SelfTestCert, + (UINTN)sizeof (SelfTestCert), + File, + (UINTN)4, + NULL, + 0, + &OutBuffer, + (UINTN *)NULL + ); + UT_ASSERT_FALSE (Status); + + return UNIT_TEST_PASSED; +} + +TEST_DESC mOaepTest[] =3D { + // + // -----Description--------------------------------------Class--------= --------------Function-----------------Pre---Post--Context + // + {"TestVerifyOaepEncrypt()", "CryptoPkg.BaseCryptLib.Pkcs1v2Encrypt", T= estVerifyOaepEncrypt, NULL, NULL, NULL}, +}; + +UINTN mOaepTestNum =3D 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.
+SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "TestBaseCryptLib.h" + +// +// PBKDF2 HMAC-SHA1 Test Vector from RFC6070 +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *Password =3D "password"; // I= nput Password +GLOBAL_REMOVE_IF_UNREFERENCED UINTN PassLen =3D 8; // L= ength of Input Password +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *Salt =3D "salt"; // I= nput Salt +GLOBAL_REMOVE_IF_UNREFERENCED UINTN SaltLen =3D 4; // L= ength of Input Salt +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINTN Count =3D 2; // I= nterationCount +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINTN KeyLen =3D 20; // L= ength of derived key +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 DerivedKey[] =3D { // E= xpected 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 =3D AllocatePool (KeyLen); + + // + // Verify PKCS#5 PBKDF2 Key Derivation Function + // + Status =3D 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[] =3D { + // + // -----Description------------------------------Class----------------= ------Function-----------------Pre---Post--Context + // + {"TestVerifyPkcs5Pbkdf2()", "CryptoPkg.BaseCryptLib.Pkcs5", T= estVerifyPkcs5Pbkdf2, NULL, NULL, NULL}, +}; + +UINTN mPkcs5TestNum =3D 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 EC= C). + + ------------------------------------------ + | | // Root of trust. ECDSA = P521 curve + | TestEKUParsingRoot | // SHA 256 Key Usage: CE= RT_DIGITAL_SIGNATURE_KEY_USAGE + | | // CERT_KEY_CERT_SIGN_KE= Y_USAGE | CERT_CRL_SIGN_KEY_USAGE + ------------------------------------------ + ^ + | + ------------------------------------------ + | | // Policy CA. Issues su= bordinate CAs. ECC P384 curve. + | TestEKUParsingPolicyCA | // SHA 256 Key Usage: + | | // CERT_KEY_CERT_SIGN_KE= Y_USAGE | CERT_CRL_SIGN_KEY_USAGE + ------------------------------------------ + ^ + | + ------------------------------------------ + | | // Issues end-entity (le= af) signers. ECC P256 curve. + | TestEKUParsingIssuingCA | // SHA 256 Key Usage: CE= RT_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 P25= 6 curve. + / TestEKUParsingLeafSignerPid12345 / // SHA 256 Key Usage: CE= RT_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 =3D=3D 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 + ); + +///=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D +///=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D +/// +/// TEST CASES +/// +///=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D +///=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +CONST CHAR8 FIRMWARE_SIGNER_EKU[] =3D "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 th= e 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 =3D EFI_SUCCESS; + + CONST CHAR8* RequiredEKUs[] =3D { FIRMWARE_SIGNER_EKU }; + + Status =3D 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 th= e 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 =3D EFI_SUCCESS; + + CONST CHAR8* RequiredEKUs[] =3D { FIRMWARE_SIGNER_EKU }; + + Status =3D VerifyEKUsInPkcs7Signature(TestSignEKUsWith3CertsInSignature, + ARRAY_SIZE(TestSignEKUsWith3CertsInS= ignature), + (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 sign= er). + 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 th= e 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 =3D EFI_SUCCESS; + + CONST CHAR8* RequiredEKUs[] =3D { FIRMWARE_SIGNER_EKU }; + + Status =3D VerifyEKUsInPkcs7Signature(TestSignEKUsWith2CertsInSignature, + ARRAY_SIZE(TestSignEKUsWith2CertsInS= ignature), + (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 th= e 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 =3D EFI_SUCCESS; + + CONST CHAR8* RequiredEKUs[] =3D { FIRMWARE_SIGNER_EKU }; + + Status =3D VerifyEKUsInPkcs7Signature(TestSignEKUsWith1CertInSignature, + ARRAY_SIZE(TestSignEKUsWith1CertInSi= gnature), + (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 th= e 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 =3D EFI_SUCCESS; + + CONST CHAR8* RequiredEKUs[] =3D { "1.3.6.1.4.1.311.76.9.21.1", + "1.3.6.1.4.1.311.76.9.21.1.2" }; + + Status =3D VerifyEKUsInPkcs7Signature(TestSignedWithMultipleEKUsInCert, + ARRAY_SIZE(TestSignedWithMultipleEKU= sInCert), + (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 th= e 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 =3D EFI_SUCCESS; + + // + // This EKU is not in the signature. + // + CONST CHAR8* RequiredEKUs[] =3D { "1.3.6.1.4.1.311.76.9.21.3" }; + + Status =3D VerifyEKUsInPkcs7Signature(TestSignedWithMultipleEKUsInCert, + ARRAY_SIZE(TestSignedWithMultipleEKU= sInCert), + (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 th= e 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 =3D EFI_SUCCESS; + + // + // These EKU's are present in the leaf signer certificate. + // + CONST CHAR8* RequiredEKUs[] =3D { "1.3.6.1.4.1.311.76.9.21.1", + "1.3.6.1.4.1.311.76.9.21.1.10001" }; + + Status =3D VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001, + ARRAY_SIZE(TestSignedWithProductId10= 001), + (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 th= e 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 =3D 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[] =3D { "1.3.6.1.4.1.311.76.9.21.1.10001" }; + + Status =3D VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001, + ARRAY_SIZE(TestSignedWithProductId10= 001), + (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 th= e 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 =3D EFI_SUCCESS; + + // + // This EKU is not in the certificate, so it should fail. + // + CONST CHAR8* RequiredEKUs[] =3D { "1.3.6.1.4.1.311.76.9.21.1" }; + + Status =3D VerifyEKUsInPkcs7Signature(TestSignatureWithNoEKUsPresent, + ARRAY_SIZE(TestSignatureWithNoEKUsPr= esent), + (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 th= e 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 =3D EFI_SUCCESS; + + CONST CHAR8* RequiredEKUs[] =3D { "1.3.6.1.4.1.311.76.9.21.1" }; + + // + // Check bad signature. + // + Status =3D VerifyEKUsInPkcs7Signature(NULL, + 0, + (CONST CHAR8**)RequiredEKUs, + ARRAY_SIZE(RequiredEKUs), + TRUE); + UT_ASSERT_STATUS_EQUAL (Status, EFI_INVALID_PARAMETER); + + // + // Check invalid EKU's + // + Status =3D VerifyEKUsInPkcs7Signature(TestSignatureWithNoEKUsPresent, + ARRAY_SIZE(TestSignatureWithNoEKUsPr= esent), + (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 th= e 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 =3D 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[] =3D { "1.3.6.1.4.1.311.76.9.21" }; + + Status =3D VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001, + ARRAY_SIZE(TestSignedWithProductId10= 001), + (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[] =3D { "1.3.6.1.4.1.311.76.9.21.1.10001.1" }; + + Status =3D VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001, + ARRAY_SIZE(TestSignedWithProductId10= 001), + (CONST CHAR8**)RequiredEKUs2, + ARRAY_SIZE(RequiredEKUs2), + TRUE); + UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS); + + return UNIT_TEST_PASSED; +}// TestEKUSubsetSupersetFails() + +TEST_DESC mPkcs7EkuTest[] =3D { + // + // -----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 =3D ARRAY_SIZE(mPkcs7EkuTest); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests.c b/Cry= ptoPkg/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.
+SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "TestBaseCryptLib.h" + +#define RANDOM_NUMBER_SIZE 256 + +CONST UINT8 SeedString[] =3D "This is the random seed for PRNG verificat= ion."; + +UINT8 PreviousRandomBuffer[RANDOM_NUMBER_SIZE] =3D { 0x0 }; + +UINT8 RandomBuffer[RANDOM_NUMBER_SIZE] =3D { 0x0 }; + +UNIT_TEST_STATUS +EFIAPI +TestVerifyPrngGeneration ( + UNIT_TEST_CONTEXT Context + ) +{ + UINTN Index; + BOOLEAN Status; + + Status =3D RandomSeed (SeedString, sizeof (SeedString)); + UT_ASSERT_TRUE (Status); + + for (Index =3D 0; Index < 10; Index ++) { + Status =3D RandomBytes (RandomBuffer, RANDOM_NUMBER_SIZE); + UT_ASSERT_TRUE (Status); + + Status =3D (CompareMem (PreviousRandomBuffer, RandomBuffer, RANDOM_NUM= BER_SIZE) =3D=3D 0); + UT_ASSERT_FALSE (Status); + + CopyMem (PreviousRandomBuffer, RandomBuffer, RANDOM_NUMBER_SIZE); + } + + return UNIT_TEST_PASSED; +} + +TEST_DESC mPrngTest[] =3D { + // + // -----Description--------------------------------Class--------------= ------Function----------------Pre---Post--Context + // + {"TestVerifyPrngGeneration()", "CryptoPkg.BaseCryptLib.Prng", = TestVerifyPrngGeneration, NULL, NULL, NULL}, +}; + +UINTN mPrngTestNum =3D 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 Valid= ation. + + Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.
+ Copyright (c) Microsoft Corporation. + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "TestBaseCryptLib.h" + + +// +// Password-protected PEM Key data for RSA Private Key Retrieving (encrypt= ion 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[] =3D { + 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 =3D "client"; + +// +// Test CA X509 Certificate for X509 Verification Routine (Generated by Op= enSSL utility). +// $ openssl req -x509 -days 10000 -key TestKeyPem -out TestCACert -outfor= m DER -subj "/C=3DUS/ST=3DWA/L=3DSeattle/O=3DTianocore/OU=3DEDK2/CN=3DUEFI" +// use password from PemPass variable in this file +// $ xxd --include TestCACert +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TestCACert[] =3D { + 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 (Gen= erated by OpenSSL utility). +// $ openssl req -new -key TestKeyPem -out TestCertCsr -subj "/C=3DUS/ST= =3DWA/L=3DSeattle/O=3DTianocore/OU=3DEDK2CHILD/CN=3DUEFI" +// $ openssl x509 -days 10000 -CA TestCACert.pem -CAkey TestKeyPem -req -o= ut 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[] =3D { + 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[] =3D { + 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 =3D "Payload Data for P= KCS#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 =3D RsaGetPrivateKeyFromPem (TestKeyPem, sizeof (TestKeyPem), Pem= Pass, &RsaPrivKey); + UT_ASSERT_TRUE (Status); + + // + // Retrieve RSA public key from X509 Certificate. + // + RsaPubKey =3D NULL; + Status =3D RsaGetPublicKeyFromX509 (TestCert, sizeof (TestCert), &Rsa= PubKey); + UT_ASSERT_TRUE (Status); + + // + // Generate RSA PKCS#1 Signature. + // + SigSize =3D 0; + Status =3D RsaPkcs1Sign (RsaPrivKey, MsgHash, SHA1_DIGEST_SIZE, NULL, &= SigSize); + UT_ASSERT_FALSE (Status); + UT_ASSERT_NOT_EQUAL (SigSize, 0); + + Signature =3D AllocatePool (SigSize); + Status =3D RsaPkcs1Sign (RsaPrivKey, MsgHash, SHA1_DIGEST_SIZE, Signa= ture, &SigSize); + UT_ASSERT_TRUE (Status); + + // + // Verify RSA PKCS#1-encoded Signature. + // + Status =3D RsaPkcs1Verify (RsaPubKey, MsgHash, SHA1_DIGEST_SIZE, Signatu= re, SigSize); + UT_ASSERT_TRUE (Status); + + // + // X509 Certificate Subject Retrieving. + // + SubjectSize =3D 0; + Status =3D X509GetSubjectName (TestCert, sizeof (TestCert), NULL, &Subj= ectSize); + Subject =3D (UINT8 *)AllocatePool (SubjectSize); + Status =3D X509GetSubjectName (TestCert, sizeof (TestCert), Subject, &S= ubjectSize); + UT_ASSERT_TRUE (Status); + + // + // Get CommonName from X509 Certificate Subject + // + CommonNameSize =3D 64; + ZeroMem (CommonName, CommonNameSize); + ReturnStatus =3D X509GetCommonName (TestCert, sizeof (TestCert), CommonN= ame, &CommonNameSize); + UT_ASSERT_NOT_EFI_ERROR (ReturnStatus); + + UT_ASSERT_EQUAL (CommonNameSize, 5); + UT_ASSERT_MEM_EQUAL (CommonName, "UEFI", 5); + + OrgNameSize =3D 64; + ZeroMem (OrgName, OrgNameSize); + ReturnStatus =3D X509GetOrganizationName (TestCert, sizeof (TestCert), O= rgName, &OrgNameSize); + UT_ASSERT_NOT_EFI_ERROR (ReturnStatus); + + UT_ASSERT_EQUAL (OrgNameSize, 10); + UT_ASSERT_MEM_EQUAL (OrgName, "Tianocore", 10); + + // + // X509 Certificate Verification. + // + Status =3D X509VerifyCert (TestCert, sizeof (TestCert), TestCACert, size= of (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 =3D NULL; + SignCert =3D NULL; + + // + // Construct Signer Certificate from RAW data. + // + Status =3D 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 =3D 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 =3D Pkcs7Verify ( + P7SignedData, + P7SignedDataSize, + TestCACert, + sizeof (TestCACert), + (UINT8 *) Payload, + AsciiStrLen (Payload) + ); + UT_ASSERT_TRUE (Status); + + if (P7SignedData !=3D NULL) { + FreePool (P7SignedData); + } + if (SignCert !=3D NULL) { + X509Free (SignCert); + } + + return UNIT_TEST_PASSED; +} + +TEST_DESC mRsaCertTest[] =3D { + // + // -----Description--------------------------------------Class--------= --------------Function-----------------Pre---Post--Context + // + {"TestVerifyRsaCertPkcs1SignVerify()", "CryptoPkg.BaseCryptLib.RsaCert= ", TestVerifyRsaCertPkcs1SignVerify, NULL, NULL, NULL}, +}; + +UINTN mRsaCertTestNum =3D ARRAY_SIZE(mRsaCertTest); + +TEST_DESC mPkcs7Test[] =3D { + // + // -----Description--------------------------------------Class--------= --------------Function-----------------Pre---Post--Context + // + {"TestVerifyPkcs7SignVerify()", "CryptoPkg.BaseCryptLib.Pkcs7",= TestVerifyPkcs7SignVerify, NULL, NULL, NULL}, +}; + +UINTN mPkcs7TestNum =3D ARRAY_SIZE(mPkcs7Test); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.c b/Cryp= toPkg/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.
+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[] =3D { + 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[] =3D { 0x11 }; + +// +// Private Exponent of RSA Key +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 RsaD[] =3D { + 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[] =3D "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[] =3D { + 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 =3D 65537 +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 DefaultPublicKey[] =3D { + 0x01, 0x00, 0x01 +}; + +VOID *mRsa; + +UNIT_TEST_STATUS +EFIAPI +TestVerifyRsaPreReq ( + UNIT_TEST_CONTEXT Context + ) +{ + mRsa =3D RsaNew (); + + if (mRsa =3D=3D NULL) { + return UNIT_TEST_ERROR_TEST_FAILED; + } + + return UNIT_TEST_PASSED; +} + +VOID +EFIAPI +TestVerifyRsaCleanUp ( + UNIT_TEST_CONTEXT Context + ) +{ + if (mRsa !=3D NULL) { + RsaFree (mRsa); + mRsa =3D 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 =3D RsaSetKey (mRsa, RsaKeyN, RsaN, sizeof (RsaN)); + UT_ASSERT_TRUE (Status); + + KeySize =3D 0; + Status =3D RsaGetKey (mRsa, RsaKeyN, NULL, &KeySize); + UT_ASSERT_FALSE (Status); + UT_ASSERT_EQUAL (KeySize, sizeof (RsaN)); + + KeyBuffer =3D AllocatePool (KeySize); + Status =3D 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 =3D RsaSetKey (mRsa, RsaKeyE, RsaE, sizeof (RsaE)); + UT_ASSERT_TRUE (Status); + + KeySize =3D 0; + Status =3D RsaGetKey (mRsa, RsaKeyE, NULL, &KeySize); + UT_ASSERT_FALSE (Status); + UT_ASSERT_EQUAL (KeySize, sizeof (RsaE)); + + KeyBuffer =3D AllocatePool (KeySize); + Status =3D 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 =3D RsaSetKey (mRsa, RsaKeyN, NULL, 0); + UT_ASSERT_TRUE (Status); + + KeySize =3D 1; + Status =3D RsaGetKey (mRsa, RsaKeyN, NULL, &KeySize); + UT_ASSERT_TRUE (Status); + UT_ASSERT_EQUAL (KeySize, 0); + + // + // Clear/Get RSA Key E + // + Status =3D RsaSetKey (mRsa, RsaKeyE, NULL, 0); + UT_ASSERT_TRUE (Status); + + KeySize =3D 1; + Status =3D 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 =3D RsaGenerateKey (mRsa, RSA_MODULUS_LENGTH, NULL, 0); + UT_ASSERT_TRUE (Status); + + KeySize =3D RSA_MODULUS_LENGTH / 8; + KeyBuffer =3D AllocatePool (KeySize); + Status =3D RsaGetKey (mRsa, RsaKeyE, KeyBuffer, &KeySize); + UT_ASSERT_TRUE (Status); + UT_ASSERT_EQUAL (KeySize, 3); + UT_ASSERT_MEM_EQUAL (KeyBuffer, DefaultPublicKey, 3); + + KeySize =3D RSA_MODULUS_LENGTH / 8; + Status =3D RsaGetKey (mRsa, RsaKeyN, KeyBuffer, &KeySize); + UT_ASSERT_TRUE (Status); + UT_ASSERT_EQUAL (KeySize, RSA_MODULUS_LENGTH / 8); + + Status =3D RsaCheckKey (mRsa); + UT_ASSERT_TRUE (Status); + + // + // Check invalid RSA key components + // + Status =3D RsaSetKey (mRsa, RsaKeyN, RsaN, sizeof (RsaN)); + UT_ASSERT_TRUE (Status); + + Status =3D RsaCheckKey (mRsa); + UT_ASSERT_FALSE (Status); + + Status =3D RsaSetKey (mRsa, RsaKeyN, KeyBuffer, KeySize); + UT_ASSERT_TRUE (Status); + + Status =3D RsaCheckKey (mRsa); + UT_ASSERT_TRUE (Status); + + Status =3D RsaSetKey (mRsa, RsaKeyE, RsaE, sizeof (RsaE)); + UT_ASSERT_TRUE (Status); + + Status =3D 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 =3D SHA1_DIGEST_SIZE; + ZeroMem (HashValue, HashSize); + + Status =3D Sha1HashAll (RsaSignData, AsciiStrLen (RsaSignData), HashVal= ue); + UT_ASSERT_TRUE (Status); + + // + // Sign RSA PKCS#1-encoded Signature + // + + Status =3D RsaSetKey (mRsa, RsaKeyN, RsaN, sizeof (RsaN)); + UT_ASSERT_TRUE (Status); + + Status =3D RsaSetKey (mRsa, RsaKeyE, RsaE, sizeof (RsaE)); + UT_ASSERT_TRUE (Status); + + Status =3D RsaSetKey (mRsa, RsaKeyD, RsaD, sizeof (RsaD)); + UT_ASSERT_TRUE (Status); + + SigSize =3D 0; + Status =3D RsaPkcs1Sign (mRsa, HashValue, HashSize, NULL, &SigSize); + UT_ASSERT_FALSE (Status); + UT_ASSERT_NOT_EQUAL (SigSize, 0); + + Signature =3D AllocatePool (SigSize); + Status =3D 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 =3D RsaPkcs1Verify (mRsa, HashValue, HashSize, Signature, SigSize= ); + UT_ASSERT_TRUE (Status); + + return UNIT_TEST_PASSED; +} + +TEST_DESC mRsaTest[] =3D { + // + // -----Description--------------------------------------Class--------= --------------Function---------------------------------Pre-----------------= ----Post---------Context + // + {"TestVerifyRsaSetGetKeyComponents()", "CryptoPkg.BaseCryptLib.R= sa", TestVerifyRsaSetGetKeyComponents, TestVerifyRsaPreReq, TestVer= ifyRsaCleanUp, NULL}, + {"TestVerifyRsaGenerateKeyComponents()", "CryptoPkg.BaseCryptLib.R= sa", TestVerifyRsaGenerateKeyComponents, TestVerifyRsaPreReq, TestVer= ifyRsaCleanUp, NULL}, + {"TestVerifyRsaPkcs1SignVerify()", "CryptoPkg.BaseCryptLib.R= sa", TestVerifyRsaPkcs1SignVerify, TestVerifyRsaPreReq, TestVer= ifyRsaCleanUp, NULL}, +}; + +UINTN mRsaTestNum =3D ARRAY_SIZE(mRsaTest); diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c b/Crypt= oPkg/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.
+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 generate= d by MSFT's signtool +// utility in conjunction with RFC3161 timestamping, as the following comm= and: +// signtool sign /ac / f /p /fd +// /tr http://timestamp.comodoca.com/rfc3161 sample.efi +// +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 AuthenticodeWithTS[] =3D { + 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 o= f TimeStamp signature. +// +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 TSTrustedCert[] =3D { + 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 =3D FALSE; + + // + // Verify RFC3161 Timestamp CounterSignature. + // + Status =3D 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[] =3D { + // + // -----Description--------------------------------------Class--------= --------------------Function-----------------Pre---Post--Context + // + {"TestVerifyImageTimestampVerify()", "CryptoPkg.BaseCryptLib.ImageTim= estamp", TestVerifyImageTimestampVerify, NULL, NULL, NULL}, +}; + +UINTN mImageTimestampTestNum =3D 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.
+ 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 =3D 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.
+ 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 =3D 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 =3D UefiTestMain (); + // Uninstall it + return Status; +} diff --git a/CryptoPkg/CryptoPkg.ci.yaml b/CryptoPkg/CryptoPkg.ci.yaml index f54ebfb22e70..cd3a220ac87e 100644 --- a/CryptoPkg/CryptoPkg.ci.yaml +++ b/CryptoPkg/CryptoPkg.ci.yaml @@ -6,7 +6,11 @@ ## { "CompilerPlugin": { - "DscPath": "CryptoPkg.dsc" + "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.i= nf { + + PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPoint.inf + UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverE= ntryPoint.inf + UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/U= efiApplicationEntryPoint.inf + + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf + BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemor= yAllocationLib.inf + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf + PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformance= LibNull.inf + PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf + UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/Uef= iBootServicesTableLib.inf + + UnitTestLib|UnitTestFrameworkPkg/Library/UnitTestLib/UnitTestLib.inf + UnitTestPersistenceLib|UnitTestFrameworkPkg/Library/UnitTestPersiste= nceLibNull/UnitTestPersistenceLibNull.inf + UnitTestResultReportLib|UnitTestFrameworkPkg/Library/UnitTestResultR= eportLib/UnitTestResultReportLibDebugLib.inf + + UnitTestResultReportLib|UnitTestFrameworkPkg/Library/UnitTestResultR= eportLib/UnitTestResultReportLibConOut.inf + } + !if $(CRYPTO_SERVICES) =3D=3D 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.
+# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D BaseCryptLib + FILE_GUID =3D c97d34aa-caf8-42cd-8261-8705f46304b3 + MODULE_TYPE =3D DXE_DRIVER + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D 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 =3D 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 warn= ings-as-errors: + # C4090: 'function' : different 'const' qualifiers + # C4018: '>': signed/unsigned mismatch + MSFT:*_*_*_CC_FLAGS =3D /wd4090 /wd4018 + + # -JCryptoPkg/Include : To disable the use of the system includes provid= ed by RVCT + # --diag_remark=3D1 : Reduce severity of "#1-D: last line of file en= ds without a newline" + RVCT:*_*_ARM_CC_FLAGS =3D -JCryptoPkg/Include --diag_remark=3D1 + + GCC:*_CLANG35_*_CC_FLAGS =3D -std=3Dc99 + GCC:*_CLANG38_*_CC_FLAGS =3D -std=3Dc99 + + XCODE:*_*_*_CC_FLAGS =3D -std=3Dc99 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.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + PLATFORM_NAME =3D CryptoPkgHostTest + PLATFORM_GUID =3D C7F97D6D-54AC-45A9-8197-CC99B20CC7EC + PLATFORM_VERSION =3D 0.1 + DSC_SPECIFICATION =3D 0x00010005 + OUTPUT_DIRECTORY =3D Build/CryptoPkg/HostTest + SUPPORTED_ARCHITECTURES =3D IA32|X64 + BUILD_TARGETS =3D NOOPT + SKUID_IDENTIFIER =3D 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/Pkcs7EkuTestSigna= tures.h b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTestSignatur= es.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[] =3D +{ + 0x30, 0x82, 0x04, 0xC0, 0x02, 0x01, 0x01, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0= x09, 0x60, 0x86, 0x48, + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x09, 0= x2A, 0x86, 0x48, 0x86, + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x03, 0x80, 0x30, 0x82, 0x03, 0= x7C, 0x30, 0x82, 0x03, + 0x22, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x13, 0x33, 0x00, 0x00, 0x00, 0= x03, 0x7E, 0x2E, 0x8F, + 0xBD, 0xA5, 0xC9, 0x2C, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0= x0A, 0x06, 0x08, 0x2A, + 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x81, 0x8F, 0x31, 0x0B, 0= x30, 0x09, 0x06, 0x03, + 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0= x03, 0x55, 0x04, 0x08, + 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, 0= x31, 0x10, 0x30, 0x0E, + 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, 0= x6E, 0x64, 0x31, 0x1E, + 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, 0= x72, 0x6F, 0x73, 0x6F, + 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0= x6F, 0x6E, 0x31, 0x39, + 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x30, 0x4D, 0x69, 0x63, 0= x72, 0x6F, 0x73, 0x6F, + 0x66, 0x74, 0x20, 0x45, 0x43, 0x43, 0x20, 0x53, 0x75, 0x72, 0x66, 0x61, 0= x63, 0x65, 0x20, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x79, 0x20, 0x46, 0x69, 0x72, 0= x6D, 0x77, 0x61, 0x72, + 0x65, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x38, 0x30, 0x1E, 0x17, 0= x0D, 0x31, 0x38, 0x30, + 0x37, 0x31, 0x32, 0x31, 0x38, 0x33, 0x37, 0x30, 0x37, 0x5A, 0x17, 0x0D, 0= x31, 0x39, 0x30, 0x37, + 0x31, 0x32, 0x31, 0x38, 0x33, 0x37, 0x30, 0x37, 0x5A, 0x30, 0x3A, 0x31, 0= x38, 0x30, 0x36, 0x06, + 0x03, 0x55, 0x04, 0x03, 0x13, 0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0= x6F, 0x66, 0x74, 0x20, + 0x45, 0x43, 0x43, 0x20, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0= x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x6F, 0x72, 0x79, 0x20, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0= x72, 0x65, 0x20, 0x53, + 0x69, 0x67, 0x6E, 0x65, 0x72, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0= x86, 0x48, 0xCE, 0x3D, + 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0= x03, 0x42, 0x00, 0x04, + 0x7D, 0xDF, 0xDE, 0xFA, 0xEE, 0xA5, 0x66, 0x33, 0xAA, 0xCC, 0xA4, 0x18, 0= x65, 0x9E, 0x3A, 0xC6, + 0x4B, 0xCB, 0xD5, 0x78, 0x94, 0x14, 0xEE, 0xAA, 0xF3, 0x9D, 0xCB, 0x38, 0= x6C, 0x5D, 0xFE, 0x3F, + 0x8A, 0xA9, 0x8D, 0x04, 0xD2, 0xFE, 0xAA, 0x38, 0xF3, 0xD6, 0x4A, 0x7E, 0= xCF, 0x12, 0x95, 0xCF, + 0xAD, 0x92, 0x33, 0xF7, 0x38, 0x83, 0xC5, 0xFD, 0xCF, 0xD0, 0x96, 0x08, 0= xCA, 0x62, 0x7D, 0x22, + 0xA3, 0x82, 0x01, 0xAF, 0x30, 0x82, 0x01, 0xAB, 0x30, 0x0E, 0x06, 0x03, 0= x55, 0x1D, 0x0F, 0x01, + 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03, 0= x55, 0x1D, 0x25, 0x04, + 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0= x4C, 0x09, 0x15, 0x01, + 0x30, 0x0C, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x02, 0= x30, 0x00, 0x30, 0x1D, + 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xE7, 0xD1, 0xD4, 0= x74, 0x71, 0xF4, 0xC9, + 0x35, 0x04, 0xA7, 0x9A, 0x1E, 0x0C, 0xDD, 0xF4, 0x8D, 0x5C, 0x1E, 0xF2, 0= x29, 0x30, 0x37, 0x06, + 0x03, 0x55, 0x1D, 0x11, 0x04, 0x30, 0x30, 0x2E, 0xA4, 0x2C, 0x30, 0x2A, 0= x31, 0x10, 0x30, 0x0E, + 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x07, 0x53, 0x75, 0x72, 0x66, 0x61, 0= x63, 0x65, 0x31, 0x16, + 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x05, 0x13, 0x0D, 0x34, 0x34, 0x30, 0= x38, 0x31, 0x31, 0x2B, + 0x34, 0x34, 0x30, 0x38, 0x36, 0x32, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0= x23, 0x04, 0x18, 0x30, + 0x16, 0x80, 0x14, 0x6F, 0x3A, 0xCC, 0x1B, 0x2F, 0x17, 0x5C, 0xED, 0xEB, 0= xC8, 0xBF, 0x93, 0xA7, + 0xB5, 0x93, 0xD1, 0x4D, 0x40, 0xAA, 0x03, 0x30, 0x75, 0x06, 0x03, 0x55, 0= x1D, 0x1F, 0x04, 0x6E, + 0x30, 0x6C, 0x30, 0x6A, 0xA0, 0x68, 0xA0, 0x66, 0x86, 0x64, 0x68, 0x74, 0= x74, 0x70, 0x3A, 0x2F, + 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0= x66, 0x74, 0x2E, 0x63, + 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x6F, 0x70, 0x73, 0x2F, 0x63, 0x72, 0= x6C, 0x2F, 0x4D, 0x69, + 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x25, 0x32, 0x30, 0x45, 0x43, 0= x43, 0x25, 0x32, 0x30, + 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x25, 0x32, 0x30, 0x41, 0x63, 0= x63, 0x65, 0x73, 0x73, + 0x6F, 0x72, 0x79, 0x25, 0x32, 0x30, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0= x72, 0x65, 0x25, 0x32, + 0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x32, 0x30, 0x31, 0x38, 0x2E, 0x63, 0= x72, 0x6C, 0x30, 0x81, + 0x82, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0= x76, 0x30, 0x74, 0x30, + 0x72, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0= x66, 0x68, 0x74, 0x74, + 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0= x6F, 0x73, 0x6F, 0x66, + 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x6F, 0x70, 0x73, 0= x2F, 0x63, 0x65, 0x72, + 0x74, 0x73, 0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0= x25, 0x32, 0x30, 0x45, + 0x43, 0x43, 0x25, 0x32, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0= x25, 0x32, 0x30, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x79, 0x25, 0x32, 0x30, 0x46, 0= x69, 0x72, 0x6D, 0x77, + 0x61, 0x72, 0x65, 0x25, 0x32, 0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x32, 0= x30, 0x31, 0x38, 0x2E, + 0x63, 0x72, 0x74, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0= x04, 0x03, 0x02, 0x03, + 0x48, 0x00, 0x30, 0x45, 0x02, 0x20, 0x3D, 0xCF, 0xEF, 0xB8, 0xF0, 0x87, 0= xEE, 0x7E, 0x80, 0x71, + 0x04, 0x77, 0x68, 0xDC, 0x66, 0x2F, 0x09, 0xA7, 0xF0, 0x76, 0x57, 0x7C, 0= x12, 0x5A, 0xE4, 0x80, + 0x5A, 0xA0, 0xF2, 0x2C, 0x45, 0x1B, 0x02, 0x21, 0x00, 0xEB, 0x5F, 0x89, 0= xD5, 0xEB, 0x03, 0x46, + 0x9E, 0x08, 0x95, 0x2A, 0x39, 0x30, 0x5D, 0x49, 0xB6, 0x24, 0xCE, 0x78, 0= x1B, 0xB8, 0x1D, 0x0F, + 0xD1, 0x24, 0xD0, 0xA9, 0x18, 0x0F, 0x45, 0x4F, 0xF6, 0x31, 0x82, 0x01, 0= x17, 0x30, 0x82, 0x01, + 0x13, 0x02, 0x01, 0x01, 0x30, 0x81, 0xA7, 0x30, 0x81, 0x8F, 0x31, 0x0B, 0= x30, 0x09, 0x06, 0x03, + 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0= x03, 0x55, 0x04, 0x08, + 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, 0= x31, 0x10, 0x30, 0x0E, + 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, 0= x6E, 0x64, 0x31, 0x1E, + 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, 0= x72, 0x6F, 0x73, 0x6F, + 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0= x6F, 0x6E, 0x31, 0x39, + 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x30, 0x4D, 0x69, 0x63, 0= x72, 0x6F, 0x73, 0x6F, + 0x66, 0x74, 0x20, 0x45, 0x43, 0x43, 0x20, 0x53, 0x75, 0x72, 0x66, 0x61, 0= x63, 0x65, 0x20, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x79, 0x20, 0x46, 0x69, 0x72, 0= x6D, 0x77, 0x61, 0x72, + 0x65, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x38, 0x02, 0x13, 0x33, 0= x00, 0x00, 0x00, 0x03, + 0x7E, 0x2E, 0x8F, 0xBD, 0xA5, 0xC9, 0x2C, 0x13, 0x00, 0x00, 0x00, 0x00, 0= x00, 0x03, 0x30, 0x0D, + 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0= x00, 0x30, 0x0B, 0x06, + 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x05, 0x00, 0x04, 0x48, 0= x30, 0x46, 0x02, 0x21, + 0x00, 0x85, 0xC7, 0x25, 0x5C, 0xF8, 0x5A, 0x13, 0xB7, 0xB6, 0x3A, 0xF1, 0= x04, 0x72, 0xAC, 0xB3, + 0xF8, 0xC3, 0xE0, 0xE3, 0xD7, 0x98, 0x1B, 0xCF, 0x04, 0xA8, 0x0C, 0x7B, 0= xBB, 0x7D, 0x40, 0xC2, + 0x99, 0x02, 0x21, 0x00, 0xA3, 0x83, 0x12, 0xE4, 0xB6, 0x3C, 0xC9, 0x3F, 0= x05, 0xCF, 0x70, 0x57, + 0x54, 0x74, 0x0E, 0xEC, 0x14, 0xAD, 0x2C, 0x66, 0x9D, 0x72, 0x73, 0x62, 0= x41, 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[] =3D +{ + 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 signatur= e 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[] =3D +{ + 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[] =3D +{ + 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[] =3D +{ + 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[] =3D +{ + 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[] =3D +{ + 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[] =3D +{ + 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.
+SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef __CRYPTEST_H__ +#define __CRYPTEST_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#include +//#include + +#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/TestBaseCryptLibH= ost.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.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D BaseCryptLibUnitTestHost + FILE_GUID =3D 0cb84598-824b-4833-b705-bdefdcbba1d5 + MODULE_TYPE =3D HOST_APPLICATION + VERSION_STRING =3D 1.0 + +# +# The following information is for reference only and not required by the = build tools. +# +# VALID_ARCHITECTURES =3D 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/TestBaseCryptLibU= efiShell.inf b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLi= bUefiShell.inf new file mode 100644 index 000000000000..6cd4a31be2c8 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibUefiShel= l.inf @@ -0,0 +1,49 @@ +## @file +# BaseCryptLib UnitTest built for execution in UEFI Shell. +# +# Copyright (c) Microsoft Corporation.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION =3D 0x00010006 + BASE_NAME =3D BaseCryptLibTestUefiShell + FILE_GUID =3D ed54ee8c-ef7a-41f2-83d5-0e0d4cd88c21 + MODULE_TYPE =3D UEFI_APPLICATION + VERSION_STRING =3D 1.0 + ENTRY_POINT =3D DxeEntryPoint + +# +# The following information is for reference only and not required by the = build tools. +# +# VALID_ARCHITECTURES =3D 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/Chai= nCreationInstructions.txt b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Te= stEKUCerts/ChainCreationInstructions.txt new file mode 100644 index 000000000000..0ca6830516ea --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/ChainCreati= onInstructions.txt @@ -0,0 +1,92 @@ +--------------------------------------------------------------------------= ------ +File: ChainCreationInstructions.txt + +Description: This folder contains INI files that are required to genera= te + the following test cert chains. Certs will be copied onto = the + file system AND MY store when they are generated by certre= q.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 be= ing +in the tree, but not in the CryptoPkg.dsc file. + +To create your own certificates and signatures for testing, this file demo= nstrates +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 conve= rt +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: C= ERT_DIGITAL_SIGNATURE_KEY_USAGE + | | // CERT_KEY_CERT_SIGN_K= EY_USAGE | CERT_CRL_SIGN_KEY_USAGE + ------------------------------------------ + ^ + | + ------------------------------------------ + | | // Issues subordinate C= As. ECC P384 curve. + | TestEKUParsingPolicyCA | // SHA 256 Key Usage: + | | // CERT_KEY_CERT_SIGN_K= EY_USAGE | CERT_CRL_SIGN_KEY_USAGE + ------------------------------------------ + ^ + | + ------------------------------------------ + | | // Issues end-entity (l= eaf) signers. ECC P256 curve. + | TestEKUParsingIssuingCA | // SHA 256 Key Usage: C= ERT_DIGITAL_SIGNATURE_KEY_USAGE + | | // Enhanced Key Usage: + ------------------------------------------ // 1.3.6.1.4.1.311.76.9= .21.1 (Surface firmware signing) + ^ + | + -------------------------------------- + / / // Leaf signer, ECC P2= 56 curve. + / TestEKUParsingLeafSigner / // SHA 256 Key Usage: C= ERT_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 =3D=3D Product ID. + + + + +--------------------------------------------------------------------------= ------- + + +--- files required --- + +TestEKUParsingRoot.ini - This certificate is the root CA und= er which all CAs live. +TestEKUParsingPolicyCA.ini - This policy CA will issue subordina= te 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.3= 11.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" TestEKUParsingIssuingC= A.ini TestEKUParsingIssuingCA.cer +certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSign= er.ini TestEKUParsingLeafSigner.cer +certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSign= erPid12345.ini TestEKUParsingLeafSignerPid12345.cer +certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingNoEKUsIn= Signer.ini TestEKUParsingNoEKUsInSigner.cer +certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSign= erPid1.ini TestEKUParsingLeafSignerPid1.cer + +--------------------------------------------------------------------------= ------- + +Then start mmc->Add certificates, Local Computer/open Personal/Certs and e= xport the keys into the pfx files below. +Note: You should see a little key on the top left of each cert icon, whic= h means you have the private key + for this cert. If you don't see it something is wrong. For each c= ert, 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 "P= KI" cmdlet which has + an Export-PfxCertificate command. + +Passwords: TestEKUParsingRoot.pfx =3D=3D TestEKUParsingRoot + TestEKUParsingPolicyCA.pfx =3D=3D TestEKUParsingPoli= cyCA + TestEKUParsingIssuingCA.pfx =3D=3D TestEKUParsingIssu= ingCA + TestEKUParsingLeafSigner.pfx =3D=3D TestEKUParsingLeaf= Signer + TestEKUParsingLeafSignerPid12345.pfx =3D=3D TestEKUParsingLeaf= SignerPid12345 + TestEKUParsingNoEKUsInSigner.pfx =3D=3D TestEKUParsingNoEK= UsInSigner + diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/Crea= teTestCerts.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/CreateTestC= erts.cmd @@ -0,0 +1,11 @@ +@ECHO OFF +REM +REM Use this file to create test certificates. +REM +call certreq.exe -new TestEKUParsingRoo= t.ini TestEKUParsingRoot.cer +call certreq.exe -new -q -cert "TestEKUParsingRoot" TestEKUParsingPol= icyCA.ini TestEKUParsingPolicyCA.cer +call certreq.exe -new -q -cert "TestEKUParsingPolicyCA" TestEKUParsingIss= uingCA.ini TestEKUParsingIssuingCA.cer +call certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLea= fSigner.ini TestEKUParsingLeafSigner.cer +call certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLea= fSignerPid12345.ini TestEKUParsingLeafSignerPid12345.cer +call certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingNoE= KUsInSigner.ini TestEKUParsingNoEKUsInSigner.cer +call certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLea= fSignerPid1.ini TestEKUParsingLeafSignerPid1.cer diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/Sign= FirmwareWithEKUs.cmd b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKU= Certs/SignFirmwareWithEKUs.cmd new file mode 100644 index 000000000000..ce03e33a7169 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/SignFirmwar= eWithEKUs.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: C= ERT_DIGITAL_SIGNATURE_KEY_USAGE +REM | | // CERT_KEY_CERT_SIGN_K= EY_USAGE | CERT_CRL_SIGN_KEY_USAGE +REM ------------------------------------------ +REM ^ +REM | +REM ------------------------------------------ +REM | | // Issues subordinate C= As. ECC P384 curve. +REM | TestEKUParsingPolicyCA | // SHA 256 Key Usage: +REM | | // CERT_KEY_CERT_SIGN_K= EY_USAGE | CERT_CRL_SIGN_KEY_USAGE +REM ------------------------------------------ +REM ^ +REM | +REM ------------------------------------------ +REM | | // Issues end-entity (l= eaf) signers. ECC P256 curve. +REM | TestEKUParsingIssuingCA | // SHA 256 Key Usage: C= ERT_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 P2= 56 curve. +REM / TestEKUParsingLeafSignerPid12345 / // SHA 256 Key Usage: C= ERT_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 =3D=3D 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 TestEKUParsing= PolicyCA.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.31= 1.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 TestSignWithTwoEKUsInLeafSi= gnerPid1.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 TestSignWithTwoEKU= sInLeafSignerPid12345.bin + + +REM +REM Create a signature with a leaf that does not have any EKUs in the sign= ture. +REM +call signtool.exe sign /fd sha256 /f TestEKUParsingNoEKUsInSigner.cer /p7 = . /p7co 1.2.840.113549.1.7.1 /p7ce DetachedSignedData /v /debug TestSignWi= thNoEKUsInLeafSigner.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 AllTestSignatur= es.h +ECHO ---------------------------------------------------------------------= ------ diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/Test= EKUParsingIssuingCA.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Test= EKUCerts/TestEKUParsingIssuingCA.ini new file mode 100644 index 000000000000..8576783473e9 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUPars= ingIssuingCA.ini @@ -0,0 +1,45 @@ +[Version] +Signature=3D"$Windows NT$ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; 2.5.29.19 =3D=3D Basic Constraints for CA +[Strings] +szOID_BASIC_CONSTRAINTS2 =3D "2.5.29.19" + +[EnhancedKeyUsageExtension] +OID =3D 1.3.6.1.4.1.311.76.9.21.1 + +[NewRequest] +Subject =3D "CN=3DTestEKUParsingIssuingCA" +Exportable =3D true +KeyLength =3D 256 +HashAlgorithm =3D sha256 +KeyUsage =3D "CERT_KEY_CERT_SIGN_KEY_USAGE" +KeyUsageProperty =3D "NCRYPT_ALLOW_SIGNING_FLAG" +MachineKeySet =3D True +RequestType =3D cert +ValidityPeriodUnits =3D 20 +ValidityPeriod =3D Years +ProviderName =3D "Microsoft Software Key Storage Provider" +KeyAlgorithm =3D "ECDSA_P256" + + +[Extensions] +%szOID_BASIC_CONSTRAINTS2% =3D "{text}" + _continue_ =3D "ca=3DTrue" + +Critical=3D%szOID_BASIC_CONSTRAINTS2% + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; This extension is so the this CA is only allowed to +; issue end-entity certs. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[BasicConstraintsExtension] +PathLength=3D0 + +; +; Surface Firmware Signing EKU +; +[Extensions] + 2.5.29.37 =3D "{text}" + _continue_ =3D "1.3.6.1.4.1.311.76.9.21.1" + diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/Test= EKUParsingLeafSigner.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Tes= tEKUCerts/TestEKUParsingLeafSigner.ini new file mode 100644 index 000000000000..f501537343ca --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUPars= ingLeafSigner.ini @@ -0,0 +1,25 @@ +[Version] +Signature=3D"$Windows NT$ + +[EnhancedKeyUsageExtension] +OID =3D 1.3.6.1.4.1.311.76.9.21.1 + +[NewRequest] +Subject =3D "CN=3DTestEKUParsingLeafSigner" +Exportable =3D true +KeyLength =3D 256 +HashAlgorithm =3D sha256 +KeyUsage =3D "CERT_DIGITAL_SIGNATURE_KEY_USAGE" +KeyUsageProperty =3D "NCRYPT_ALLOW_SIGNING_FLAG" +MachineKeySet =3D True +RequestType =3D cert +ValidityPeriodUnits =3D 20 +ValidityPeriod =3D Years +ProviderName =3D "Microsoft Software Key Storage Provider" +KeyAlgorithm =3D "ECDSA_P256" + +; +; Surface test firwmare signing EKU +; +[Extensions] + _continue_ =3D "1.3.6.1.4.1.311.76.9.21.1" diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/Test= EKUParsingLeafSignerPid1.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/TestEKUPars= ingLeafSignerPid1.ini @@ -0,0 +1,24 @@ +[Version] +Signature=3D"$Windows NT$ + +[EnhancedKeyUsageExtension] +OID =3D 1.3.6.1.4.1.311.76.9.21.1 +OID =3D 1.3.6.1.4.1.311.76.9.21.1.1 + +[NewRequest] +Subject =3D "CN=3DTestEKUParsingLeafSignerPid1" +Exportable =3D true +KeyLength =3D 2048 +HashAlgorithm =3D sha256 +KeySpec =3D AT_SIGNATURE +KeyUsage =3D "CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_DIGITAL_SIGNATURE_KEY_US= AGE | CERT_CRL_SIGN_KEY_USAGE" +KeyUsageProperty =3D "NCRYPT_ALLOW_SIGNING_FLAG" +MachineKeySet =3D True +RequestType =3D cert +ValidityPeriodUnits =3D 5 +ValidityPeriod =3D Years + +[Extensions] + 2.5.29.37 =3D "{text}" + _continue_ =3D "1.3.6.1.4.1.311.76.9.21.1," + _continue_ =3D "1.3.6.1.4.1.311.76.9.21.1.1" diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/Test= EKUParsingLeafSignerPid12345.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryp= tLib/TestEKUCerts/TestEKUParsingLeafSignerPid12345.ini new file mode 100644 index 000000000000..67c5741f4d26 --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUPars= ingLeafSignerPid12345.ini @@ -0,0 +1,27 @@ +[Version] +Signature=3D"$Windows NT$ + +[EnhancedKeyUsageExtension] +OID =3D 1.3.6.1.4.1.311.76.9.21.1 +OID =3D 1.3.6.1.4.1.311.76.9.21.1.12345 + +[NewRequest] +Subject =3D "CN=3DTestEKUParsingLeafSignerPid12345" +Exportable =3D true +KeyLength =3D 2048 +HashAlgorithm =3D sha256 +KeySpec =3D AT_SIGNATURE +KeyUsage =3D "CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_DIGITAL_SIGNATURE_KEY_US= AGE | CERT_CRL_SIGN_KEY_USAGE" +KeyUsageProperty =3D "NCRYPT_ALLOW_SIGNING_FLAG" +MachineKeySet =3D True +RequestType =3D cert +ValidityPeriodUnits =3D 5 +ValidityPeriod =3D Years + +[Extensions] + 2.5.29.37 =3D "{text}" + _continue_ =3D "1.3.6.1.4.1.311.76.9.21.1," + _continue_ =3D "1.3.6.1.4.1.311.76.9.21.1.12345" + + + diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/Test= EKUParsingNoEKUsInSigner.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/TestEKUPars= ingNoEKUsInSigner.ini @@ -0,0 +1,16 @@ +[Version] +Signature=3D"$Windows NT$ + + +[NewRequest] +Subject =3D "CN=3DTestEKUParsingNoEKUsInSigner" +Exportable =3D true +KeyLength =3D 2048 +HashAlgorithm =3D sha256 +KeySpec =3D AT_SIGNATURE +KeyUsage =3D "CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_DIGITAL_SIGNATURE_KEY_US= AGE | CERT_CRL_SIGN_KEY_USAGE" +KeyUsageProperty =3D "NCRYPT_ALLOW_SIGNING_FLAG" +MachineKeySet =3D True +RequestType =3D cert +ValidityPeriodUnits =3D 20 +ValidityPeriod =3D Years diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/Test= EKUParsingPolicyCA.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestE= KUCerts/TestEKUParsingPolicyCA.ini new file mode 100644 index 000000000000..2ccda66596bc --- /dev/null +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUPars= ingPolicyCA.ini @@ -0,0 +1,28 @@ +[Version] +Signature=3D"$Windows NT$ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; 2.5.29.19 =3D=3D Basic Constraints for CA +[Strings] +szOID_BASIC_CONSTRAINTS2 =3D "2.5.29.19" + +[NewRequest] +Subject =3D "CN=3DTestEKUParsingPolicyCA" +Exportable =3D true +KeyLength =3D 384 +HashAlgorithm =3D sha256 +KeyUsage =3D "CERT_KEY_CERT_SIGN_KEY_USAGE" +KeyUsageProperty =3D "NCRYPT_ALLOW_SIGNING_FLAG" +MachineKeySet =3D True +RequestType =3D cert +ValidityPeriodUnits =3D 20 +ValidityPeriod =3D Years +ProviderName =3D "Microsoft Software Key Storage Provider" +KeyAlgorithm =3D "ECDSA_P384" + + +[Extensions] +%szOID_BASIC_CONSTRAINTS2% =3D "{text}" + _continue_ =3D "ca=3DTrue" + +Critical=3D%szOID_BASIC_CONSTRAINTS2% + diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/Test= EKUParsingRoot.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/TestEKUCerts/TestEKUPars= ingRoot.ini @@ -0,0 +1,28 @@ +[Version] +Signature=3D"$Windows NT$ + +[Strings] +szOID_BASIC_CONSTRAINTS2 =3D "2.5.29.19" + +[NewRequest] +Subject =3D "CN=3DTestEKUParsingRoot" +Exportable =3D true +KeyLength =3D 521 +HashAlgorithm =3D sha256 +KeyUsage =3D "CERT_DIGITAL_SIGNATURE_KEY_USAGE | CERT_KEY_CERT_SIGN_KEY_US= AGE | CERT_CRL_SIGN_KEY_USAGE" +KeyUsageProperty =3D "NCRYPT_ALLOW_SIGNING_FLAG" +MachineKeySet =3D True +RequestType =3D cert +ValidityPeriodUnits =3D 30 +ValidityPeriod =3D Years +ProviderName =3D "Microsoft Software Key Storage Provider" +KeyAlgorithm =3D ECDSA_P521 + + + + +[Extensions] +%szOID_BASIC_CONSTRAINTS2% =3D "{text}" + _continue_ =3D "ca=3DTrue" + +Critical=3D%szOID_BASIC_CONSTRAINTS2% --=20 2.27.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#62320): https://edk2.groups.io/g/devel/message/62320 Mute This Topic: https://groups.io/mt/75405700/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue Nov 26 00:40:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+62319+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+62319+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1594325249; cv=none; d=zohomail.com; s=zohoarc; b=ANk1p//Modi43a+zM2uskLI693YnuIEU5+bXh1AltFTTOYMIBtQwOjvPW8aiiUwh3l/m3XtbF8kQUwmtv+9Beurm/v0T60X4dpLFruOQy9YdaA2vVxAnDlFoXn4qTZxhQXazi2sDu1V7dhMyfzyi2WD4/2hxOFVZhCiPIjzIzSw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1594325249; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=6VqsYf4Jt6BhEdxeQP33qo7s2x9oQTtQNPZ7fPibE6g=; b=RS/0hMinwG9LMm4JVWAg/w2EGh8EPnxKu9awpZlLZjkMvPbc/hf142qGERSkQkDxNTVB6VXjb46/ru50mjSK98F01C1SyX7b2uhnMA3VNOcOd67L+jSKkLK994n6mNt/cnRfqGYdYLMn0BtdJ/XHgSiPGVd+GySJve/fsVPyMGA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+62319+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1594325249499997.533894107713; Thu, 9 Jul 2020 13:07:29 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 9wUzYY1788612x6uGB5XTGcN; Thu, 09 Jul 2020 13:07:29 -0700 X-Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) by mx.groups.io with SMTP id smtpd.web11.2284.1594320445484494823 for ; Thu, 09 Jul 2020 11:47:25 -0700 X-Received: by mail-pf1-f193.google.com with SMTP id 1so1384614pfn.9 for ; Thu, 09 Jul 2020 11:47:25 -0700 (PDT) X-Gm-Message-State: 40TykaTyLIxDcBtcppfV8MbDx1787277AA= X-Google-Smtp-Source: ABdhPJx/S9zfLVluOEyuVdimL486zJy5opX5vIl++yD4A0I5hpl4ZvZua7lIVwIVlzv0aa8nmVV34w== X-Received: by 2002:a63:df54:: with SMTP id h20mr53830552pgj.319.1594320444865; Thu, 09 Jul 2020 11:47:24 -0700 (PDT) X-Received: from tvis-name-05.localdomain ([50.34.40.129]) by smtp.gmail.com with ESMTPSA id b11sm3581140pfr.179.2020.07.09.11.47.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Jul 2020 11:47:24 -0700 (PDT) From: matthewfcarlson@gmail.com To: devel@edk2.groups.io Cc: Sean Brogan , Bret Barkelew , Michael D Kinney , Liming Gao , Matthew Carlson Subject: [edk2-devel] [PATCH v2 3/3] AzurePipelines : Pr Gate: Turn on HBUT for CryptoPkg Date: Thu, 9 Jul 2020 11:47:20 -0700 Message-Id: <20200709184720.1746-4-matthewfcarlson@gmail.com> In-Reply-To: <20200709184720.1746-1-matthewfcarlson@gmail.com> References: <20200709184720.1746-1-matthewfcarlson@gmail.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,matthewfcarlson@gmail.com Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1594325249; bh=KNVIsaChptRenAgDZxmkAIvXE8gjzTcM2OhCbWZM0Lo=; h=Cc:Date:From:Reply-To:Subject:To; b=lE852ArEbalWFyfmsBFg5PRELVIV0/2vr71bVgwp28pvS1/WpEWmSWKc8RIvljUJgNJ jC6tfCQTUyDOylTAqkOzzNkEUTIPqUVIoJw4okK5wi5rvMfVl34G3NNp8mUDl0MN3ddjD q5WoyTSKCrMn57M7U8kjQ9y4/2RgzTNVvBI= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" From: Matthew Carlson Turns on Host Based Unit Tests for CryptoPkg by enabling the target NOOPT in the CI pipeline. Cc: Sean Brogan Cc: Bret Barkelew Cc: Michael D Kinney Cc: Liming Gao Signed-off-by: Matthew Carlson --- .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/.azurepipeli= nes/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' --=20 2.27.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#62319): https://edk2.groups.io/g/devel/message/62319 Mute This Topic: https://groups.io/mt/75405699/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-