REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the CryptoPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Jian J Wang <jian.j.wang@intel.com>
		
			
				
	
	
		
			544 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			544 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file -- Pkcs7EkuVerify.c
 | |
|  * Copyright (c) Microsoft Corporation.
 | |
|  * SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
|   This is an test code which verifies specified
 | |
|   Enhanced Key Usages (EKU)'s are present in the leaf signer
 | |
|   of a PKCS7 formatted signature.
 | |
| 
 | |
| 
 | |
|   A typical signing certificate chain looks like this: (Could be RSA or ECC).
 | |
| 
 | |
|       ------------------------------------------
 | |
|      |                                          | // Root of trust. ECDSA P521 curve
 | |
|      |          TestEKUParsingRoot              | // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
 | |
|      |                                          | // CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE
 | |
|       ------------------------------------------
 | |
|                         ^
 | |
|                         |
 | |
|       ------------------------------------------
 | |
|      |                                          | // Policy CA.  Issues subordinate CAs. ECC P384 curve.
 | |
|      |       TestEKUParsingPolicyCA             | // SHA 256 Key Usage:
 | |
|      |                                          | // CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE
 | |
|       ------------------------------------------
 | |
|                         ^
 | |
|                         |
 | |
|       ------------------------------------------
 | |
|      |                                          | // Issues end-entity (leaf) signers. ECC P256 curve.
 | |
|      |        TestEKUParsingIssuingCA           | // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
 | |
|      |                                          | // Enhanced Key Usage:
 | |
|       ------------------------------------------  // 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing)
 | |
|                         ^
 | |
|                         |
 | |
|          --------------------------------------
 | |
|         /     TestEKUParsingLeafSigner &&     /   // Leaf signer,  ECC P256 curve.
 | |
|        /    TestEKUParsingLeafSignerPid12345 /    // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
 | |
|       /                                     /     // Enhanced Key usages:
 | |
|       --------------------------------------      // 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing)
 | |
|                                                   // 1.3.6.1.4.1.311.76.9.21.1.N, N == Product ID.
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| **/
 | |
| 
 | |
| #include "TestBaseCryptLib.h"
 | |
| 
 | |
| #include "Pkcs7EkuTestSignatures.h"
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| VerifyEKUsInPkcs7Signature (
 | |
|   IN CONST UINT8   *Pkcs7Signature,
 | |
|   IN CONST UINT32  SignatureSize,
 | |
|   IN CONST CHAR8   *RequiredEKUs[],
 | |
|   IN CONST UINT32  RequiredEKUsSize,
 | |
|   IN BOOLEAN       RequireAllPresent
 | |
|   );
 | |
| 
 | |
| /// ================================================================================================
 | |
| /// ================================================================================================
 | |
| ///
 | |
| /// TEST CASES
 | |
| ///
 | |
| /// ================================================================================================
 | |
| /// ================================================================================================
 | |
| 
 | |
| CONST CHAR8  FIRMWARE_SIGNER_EKU[] = "1.3.6.1.4.1.311.76.9.21.1";
 | |
| 
 | |
| /**
 | |
|   TestVerifyEKUsInSignature()
 | |
| 
 | |
|   Verify that "1.3.6.1.4.1.311.76.9.21.1" (Firmware signature) is in the
 | |
|   leaf signer certificate.
 | |
| 
 | |
| 
 | |
|   @param[in]  Framework - Unit-test framework handle.
 | |
|   @param[in]  Context   - Optional context pointer for this test.
 | |
| 
 | |
|   @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
 | |
|   @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
 | |
| **/
 | |
| static
 | |
| UNIT_TEST_STATUS
 | |
| EFIAPI
 | |
| TestVerifyEKUsInSignature (
 | |
|   IN UNIT_TEST_CONTEXT  Context
 | |
|   )
 | |
| {
 | |
|   EFI_STATUS  Status = EFI_SUCCESS;
 | |
| 
 | |
|   CONST CHAR8  *RequiredEKUs[] = { FIRMWARE_SIGNER_EKU };
 | |
| 
 | |
|   Status = VerifyEKUsInPkcs7Signature (
 | |
|              ProductionECCSignature,
 | |
|              ARRAY_SIZE (ProductionECCSignature),
 | |
|              (CONST CHAR8 **)RequiredEKUs,
 | |
|              ARRAY_SIZE (RequiredEKUs),
 | |
|              TRUE
 | |
|              );
 | |
|   UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
 | |
| 
 | |
|   return UNIT_TEST_PASSED;
 | |
| }// TestVerifyEKUsInSignature()
 | |
| 
 | |
| /**
 | |
|   TestVerifyEKUsWith3CertsInSignature()
 | |
| 
 | |
|   This PKCS7 signature has 3 certificates in it. (Policy CA, Issuing CA
 | |
|   and leaf signer). It has one firmware signing EKU in it.
 | |
|   "1.3.6.1.4.1.311.76.9.21.1"
 | |
| 
 | |
|   @param[in]  Framework - Unit-test framework handle.
 | |
|   @param[in]  Context   - Optional context pointer for this test.
 | |
| 
 | |
|   @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
 | |
|   @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
 | |
| **/
 | |
| static
 | |
| UNIT_TEST_STATUS
 | |
| EFIAPI
 | |
| TestVerifyEKUsWith3CertsInSignature (
 | |
|   IN UNIT_TEST_CONTEXT  Context
 | |
|   )
 | |
| {
 | |
|   EFI_STATUS  Status = EFI_SUCCESS;
 | |
| 
 | |
|   CONST CHAR8  *RequiredEKUs[] = { FIRMWARE_SIGNER_EKU };
 | |
| 
 | |
|   Status = VerifyEKUsInPkcs7Signature (
 | |
|              TestSignEKUsWith3CertsInSignature,
 | |
|              ARRAY_SIZE (TestSignEKUsWith3CertsInSignature),
 | |
|              (CONST CHAR8 **)RequiredEKUs,
 | |
|              ARRAY_SIZE (RequiredEKUs),
 | |
|              TRUE
 | |
|              );
 | |
|   UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
 | |
| 
 | |
|   return UNIT_TEST_PASSED;
 | |
| }// TestVerifyEKUsWith3CertsInSignature()
 | |
| 
 | |
| /**
 | |
|   TestVerifyEKUsWith2CertsInSignature()
 | |
| 
 | |
|   This PKCS7 signature has 2 certificates in it. (Issuing CA and leaf signer).
 | |
|   It has one firmware signing EKU in it. "1.3.6.1.4.1.311.76.9.21.1"
 | |
| 
 | |
|   @param[in]  Framework - Unit-test framework handle.
 | |
|   @param[in]  Context   - Optional context pointer for this test.
 | |
| 
 | |
|   @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
 | |
|   @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
 | |
| **/
 | |
| static
 | |
| UNIT_TEST_STATUS
 | |
| EFIAPI
 | |
| TestVerifyEKUsWith2CertsInSignature (
 | |
|   IN UNIT_TEST_CONTEXT  Context
 | |
|   )
 | |
| {
 | |
|   EFI_STATUS  Status = EFI_SUCCESS;
 | |
| 
 | |
|   CONST CHAR8  *RequiredEKUs[] = { FIRMWARE_SIGNER_EKU };
 | |
| 
 | |
|   Status = VerifyEKUsInPkcs7Signature (
 | |
|              TestSignEKUsWith2CertsInSignature,
 | |
|              ARRAY_SIZE (TestSignEKUsWith2CertsInSignature),
 | |
|              (CONST CHAR8 **)RequiredEKUs,
 | |
|              ARRAY_SIZE (RequiredEKUs),
 | |
|              TRUE
 | |
|              );
 | |
|   UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
 | |
| 
 | |
|   return UNIT_TEST_PASSED;
 | |
| }// TestVerifyEKUsWith2CertsInSignature()
 | |
| 
 | |
| /**
 | |
|   TestVerifyEKUsWith1CertInSignature()
 | |
| 
 | |
|   This PKCS7 signature only has the leaf signer in it.
 | |
|   It has one firmware signing EKU in it. "1.3.6.1.4.1.311.76.9.21.1"
 | |
| 
 | |
|   @param[in]  Framework - Unit-test framework handle.
 | |
|   @param[in]  Context   - Optional context pointer for this test.
 | |
| 
 | |
|   @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
 | |
|   @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
 | |
| **/
 | |
| static
 | |
| UNIT_TEST_STATUS
 | |
| EFIAPI
 | |
| TestVerifyEKUsWith1CertInSignature (
 | |
|   IN UNIT_TEST_CONTEXT  Context
 | |
|   )
 | |
| {
 | |
|   EFI_STATUS  Status = EFI_SUCCESS;
 | |
| 
 | |
|   CONST CHAR8  *RequiredEKUs[] = { FIRMWARE_SIGNER_EKU };
 | |
| 
 | |
|   Status = VerifyEKUsInPkcs7Signature (
 | |
|              TestSignEKUsWith1CertInSignature,
 | |
|              ARRAY_SIZE (TestSignEKUsWith1CertInSignature),
 | |
|              (CONST CHAR8 **)RequiredEKUs,
 | |
|              ARRAY_SIZE (RequiredEKUs),
 | |
|              TRUE
 | |
|              );
 | |
|   UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
 | |
| 
 | |
|   return UNIT_TEST_PASSED;
 | |
| }// TestVerifyEKUsWith1CertInSignature()
 | |
| 
 | |
| /**
 | |
|   TestVerifyEKUsWithMultipleEKUsInCert()
 | |
| 
 | |
| 
 | |
|   This signature has two EKU's in it:
 | |
|   "1.3.6.1.4.1.311.76.9.21.1"
 | |
|   "1.3.6.1.4.1.311.76.9.21.2"
 | |
|   We verify that both EKU's were present in the leaf signer.
 | |
| 
 | |
|   @param[in]  Framework - Unit-test framework handle.
 | |
|   @param[in]  Context   - Optional context pointer for this test.
 | |
| 
 | |
|   @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
 | |
|   @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
 | |
| **/
 | |
| static
 | |
| UNIT_TEST_STATUS
 | |
| EFIAPI
 | |
| TestVerifyEKUsWithMultipleEKUsInCert (
 | |
|   IN UNIT_TEST_CONTEXT  Context
 | |
|   )
 | |
| {
 | |
|   EFI_STATUS  Status = EFI_SUCCESS;
 | |
| 
 | |
|   CONST CHAR8  *RequiredEKUs[] = {
 | |
|     "1.3.6.1.4.1.311.76.9.21.1",
 | |
|     "1.3.6.1.4.1.311.76.9.21.1.2"
 | |
|   };
 | |
| 
 | |
|   Status = VerifyEKUsInPkcs7Signature (
 | |
|              TestSignedWithMultipleEKUsInCert,
 | |
|              ARRAY_SIZE (TestSignedWithMultipleEKUsInCert),
 | |
|              (CONST CHAR8 **)RequiredEKUs,
 | |
|              ARRAY_SIZE (RequiredEKUs),
 | |
|              TRUE
 | |
|              );
 | |
|   UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
 | |
| 
 | |
|   return UNIT_TEST_PASSED;
 | |
| }// TestVerifyEKUsWithMultipleEKUsInCert()
 | |
| 
 | |
| /**
 | |
|   TestEkusNotPresentInSignature()
 | |
| 
 | |
|   This test verifies that if we send an EKU that is not in the signature,
 | |
|   that we get back an error.
 | |
| 
 | |
|   @param[in]  Framework - Unit-test framework handle.
 | |
|   @param[in]  Context   - Optional context pointer for this test.
 | |
| 
 | |
|   @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
 | |
|   @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
 | |
| **/
 | |
| static
 | |
| UNIT_TEST_STATUS
 | |
| EFIAPI
 | |
| TestEkusNotPresentInSignature (
 | |
|   IN UNIT_TEST_CONTEXT  Context
 | |
|   )
 | |
| {
 | |
|   EFI_STATUS  Status = EFI_SUCCESS;
 | |
| 
 | |
|   //
 | |
|   // This EKU is not in the signature.
 | |
|   //
 | |
|   CONST CHAR8  *RequiredEKUs[] = { "1.3.6.1.4.1.311.76.9.21.3" };
 | |
| 
 | |
|   Status = VerifyEKUsInPkcs7Signature (
 | |
|              TestSignedWithMultipleEKUsInCert,
 | |
|              ARRAY_SIZE (TestSignedWithMultipleEKUsInCert),
 | |
|              (CONST CHAR8 **)RequiredEKUs,
 | |
|              ARRAY_SIZE (RequiredEKUs),
 | |
|              TRUE
 | |
|              );
 | |
|   UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS);
 | |
| 
 | |
|   return UNIT_TEST_PASSED;
 | |
| }// TestEkusNotPresentInSignature()
 | |
| 
 | |
| /**
 | |
|   TestEkusNotPresentInSignature()
 | |
| 
 | |
|   This test signature has two EKU's in it:  (Product ID is 10001)
 | |
|   "1.3.6.1.4.1.311.76.9.21.1"
 | |
|   "1.3.6.1.4.1.311.76.9.21.1.10001"
 | |
| 
 | |
|   @param[in]  Framework - Unit-test framework handle.
 | |
|   @param[in]  Context   - Optional context pointer for this test.
 | |
| 
 | |
|   @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
 | |
|   @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
 | |
| **/
 | |
| static
 | |
| UNIT_TEST_STATUS
 | |
| EFIAPI
 | |
| TestProductId10001PresentInSignature (
 | |
|   IN UNIT_TEST_CONTEXT  Context
 | |
|   )
 | |
| {
 | |
|   EFI_STATUS  Status = EFI_SUCCESS;
 | |
| 
 | |
|   //
 | |
|   // These EKU's are present in the leaf signer certificate.
 | |
|   //
 | |
|   CONST CHAR8  *RequiredEKUs[] = {
 | |
|     "1.3.6.1.4.1.311.76.9.21.1",
 | |
|     "1.3.6.1.4.1.311.76.9.21.1.10001"
 | |
|   };
 | |
| 
 | |
|   Status = VerifyEKUsInPkcs7Signature (
 | |
|              TestSignedWithProductId10001,
 | |
|              ARRAY_SIZE (TestSignedWithProductId10001),
 | |
|              (CONST CHAR8 **)RequiredEKUs,
 | |
|              ARRAY_SIZE (RequiredEKUs),
 | |
|              TRUE
 | |
|              );
 | |
|   UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
 | |
| 
 | |
|   return UNIT_TEST_PASSED;
 | |
| }// TestProductId10001PresentInSignature()
 | |
| 
 | |
| /**
 | |
|   TestOnlyOneEkuInListRequired()
 | |
| 
 | |
|   This test will check the BOOLEAN RequireAllPresent parameter in the
 | |
|   call to VerifyEKUsInPkcs7Signature() behaves properly.  The signature
 | |
|   has two EKU's in it:
 | |
| 
 | |
|   "1.3.6.1.4.1.311.76.9.21.1"
 | |
|   "1.3.6.1.4.1.311.76.9.21.1.10001"
 | |
| 
 | |
|   but we only pass in one of them, and set RequireAllPresent to FALSE.
 | |
| 
 | |
|   @param[in]  Framework - Unit-test framework handle.
 | |
|   @param[in]  Context   - Optional context pointer for this test.
 | |
| 
 | |
|   @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
 | |
|   @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
 | |
| **/
 | |
| static
 | |
| UNIT_TEST_STATUS
 | |
| EFIAPI
 | |
| TestOnlyOneEkuInListRequired (
 | |
|   IN UNIT_TEST_CONTEXT  Context
 | |
|   )
 | |
| {
 | |
|   EFI_STATUS  Status = EFI_SUCCESS;
 | |
| 
 | |
|   //
 | |
|   // This will test the flag that specifies it is OK to succeed if
 | |
|   // any one of the EKU's passed in is found.
 | |
|   //
 | |
|   CONST CHAR8  *RequiredEKUs[] = { "1.3.6.1.4.1.311.76.9.21.1.10001" };
 | |
| 
 | |
|   Status = VerifyEKUsInPkcs7Signature (
 | |
|              TestSignedWithProductId10001,
 | |
|              ARRAY_SIZE (TestSignedWithProductId10001),
 | |
|              (CONST CHAR8 **)RequiredEKUs,
 | |
|              ARRAY_SIZE (RequiredEKUs),
 | |
|              FALSE
 | |
|              );
 | |
|   UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
 | |
| 
 | |
|   return UNIT_TEST_PASSED;
 | |
| }// TestOnlyOneEkuInListRequired()
 | |
| 
 | |
| /**
 | |
|   TestNoEKUsInSignature()
 | |
| 
 | |
|   This test uses a signature that was signed with a certificate that does
 | |
|   not contain any EKUs.
 | |
| 
 | |
| 
 | |
|   @param[in]  Framework - Unit-test framework handle.
 | |
|   @param[in]  Context   - Optional context pointer for this test.
 | |
| 
 | |
|   @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
 | |
|   @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
 | |
| **/
 | |
| static
 | |
| UNIT_TEST_STATUS
 | |
| EFIAPI
 | |
| TestNoEKUsInSignature (
 | |
|   IN UNIT_TEST_CONTEXT  Context
 | |
|   )
 | |
| {
 | |
|   EFI_STATUS  Status = EFI_SUCCESS;
 | |
| 
 | |
|   //
 | |
|   // This EKU is not in the certificate, so it should fail.
 | |
|   //
 | |
|   CONST CHAR8  *RequiredEKUs[] = { "1.3.6.1.4.1.311.76.9.21.1" };
 | |
| 
 | |
|   Status = VerifyEKUsInPkcs7Signature (
 | |
|              TestSignatureWithNoEKUsPresent,
 | |
|              ARRAY_SIZE (TestSignatureWithNoEKUsPresent),
 | |
|              (CONST CHAR8 **)RequiredEKUs,
 | |
|              ARRAY_SIZE (RequiredEKUs),
 | |
|              TRUE
 | |
|              );
 | |
|   UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS);
 | |
| 
 | |
|   return UNIT_TEST_PASSED;
 | |
| }// TestNoEKUsInSignature()
 | |
| 
 | |
| /**
 | |
|   TestInvalidParameters()
 | |
| 
 | |
|   Passes the API invalid parameters, and ensures that it does not succeed.
 | |
| 
 | |
|   @param[in]  Framework - Unit-test framework handle.
 | |
|   @param[in]  Context   - Optional context pointer for this test.
 | |
| 
 | |
|   @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
 | |
|   @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
 | |
| **/
 | |
| static
 | |
| UNIT_TEST_STATUS
 | |
| EFIAPI
 | |
| TestInvalidParameters (
 | |
|   IN UNIT_TEST_CONTEXT  Context
 | |
|   )
 | |
| {
 | |
|   EFI_STATUS  Status = EFI_SUCCESS;
 | |
| 
 | |
|   CONST CHAR8  *RequiredEKUs[] = { "1.3.6.1.4.1.311.76.9.21.1" };
 | |
| 
 | |
|   //
 | |
|   // Check bad signature.
 | |
|   //
 | |
|   Status = VerifyEKUsInPkcs7Signature (
 | |
|              NULL,
 | |
|              0,
 | |
|              (CONST CHAR8 **)RequiredEKUs,
 | |
|              ARRAY_SIZE (RequiredEKUs),
 | |
|              TRUE
 | |
|              );
 | |
|   UT_ASSERT_STATUS_EQUAL (Status, EFI_INVALID_PARAMETER);
 | |
| 
 | |
|   //
 | |
|   // Check invalid EKU's
 | |
|   //
 | |
|   Status = VerifyEKUsInPkcs7Signature (
 | |
|              TestSignatureWithNoEKUsPresent,
 | |
|              ARRAY_SIZE (TestSignatureWithNoEKUsPresent),
 | |
|              (CONST CHAR8 **)NULL,
 | |
|              0,
 | |
|              TRUE
 | |
|              );
 | |
|   UT_ASSERT_STATUS_EQUAL (Status, EFI_INVALID_PARAMETER);
 | |
| 
 | |
|   return UNIT_TEST_PASSED;
 | |
| }// TestInvalidParameters()
 | |
| 
 | |
| /**
 | |
|   TestEKUSubStringFails()
 | |
| 
 | |
|   Pass the API a sub set and super set of an EKU and ensure that they
 | |
|   don't pass.
 | |
| 
 | |
|   @param[in]  Framework - Unit-test framework handle.
 | |
|   @param[in]  Context   - Optional context pointer for this test.
 | |
| 
 | |
|   @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
 | |
|   @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
 | |
| **/
 | |
| static
 | |
| UNIT_TEST_STATUS
 | |
| EFIAPI
 | |
| TestEKUSubsetSupersetFails (
 | |
|   IN UNIT_TEST_CONTEXT  Context
 | |
|   )
 | |
| {
 | |
|   EFI_STATUS  Status = EFI_SUCCESS;
 | |
| 
 | |
|   //
 | |
|   // This signature has an EKU of:
 | |
|   // "1.3.6.1.4.1.311.76.9.21.1.10001"
 | |
|   // so ensure that
 | |
|   // "1.3.6.1.4.1.311.76.9.21"
 | |
|   // does not pass.
 | |
|   //
 | |
|   CONST CHAR8  *RequiredEKUs1[] = { "1.3.6.1.4.1.311.76.9.21" };
 | |
| 
 | |
|   Status = VerifyEKUsInPkcs7Signature (
 | |
|              TestSignedWithProductId10001,
 | |
|              ARRAY_SIZE (TestSignedWithProductId10001),
 | |
|              (CONST CHAR8 **)RequiredEKUs1,
 | |
|              ARRAY_SIZE (RequiredEKUs1),
 | |
|              TRUE
 | |
|              );
 | |
|   UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS);
 | |
| 
 | |
|   //
 | |
|   // This signature has an EKU of:
 | |
|   // "1.3.6.1.4.1.311.76.9.21.1.10001"
 | |
|   // so ensure that a super set
 | |
|   // "1.3.6.1.4.1.311.76.9.21.1.10001.1"
 | |
|   // does not pass.
 | |
|   //
 | |
|   CONST CHAR8  *RequiredEKUs2[] = { "1.3.6.1.4.1.311.76.9.21.1.10001.1" };
 | |
| 
 | |
|   Status = VerifyEKUsInPkcs7Signature (
 | |
|              TestSignedWithProductId10001,
 | |
|              ARRAY_SIZE (TestSignedWithProductId10001),
 | |
|              (CONST CHAR8 **)RequiredEKUs2,
 | |
|              ARRAY_SIZE (RequiredEKUs2),
 | |
|              TRUE
 | |
|              );
 | |
|   UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS);
 | |
| 
 | |
|   return UNIT_TEST_PASSED;
 | |
| }// TestEKUSubsetSupersetFails()
 | |
| 
 | |
| TEST_DESC  mPkcs7EkuTest[] = {
 | |
|   //
 | |
|   // -----Description--------------------------------Class----------------------------Function------------------------------Pre---Post--Context
 | |
|   //
 | |
|   { "TestVerifyEKUsInSignature()",            "CryptoPkg.BaseCryptLib.Eku", TestVerifyEKUsInSignature,            NULL, NULL, NULL },
 | |
|   { "TestVerifyEKUsWith3CertsInSignature()",  "CryptoPkg.BaseCryptLib.Eku", TestVerifyEKUsWith3CertsInSignature,  NULL, NULL, NULL },
 | |
|   { "TestVerifyEKUsWith2CertsInSignature()",  "CryptoPkg.BaseCryptLib.Eku", TestVerifyEKUsWith2CertsInSignature,  NULL, NULL, NULL },
 | |
|   { "TestVerifyEKUsWith1CertInSignature()",   "CryptoPkg.BaseCryptLib.Eku", TestVerifyEKUsWith1CertInSignature,   NULL, NULL, NULL },
 | |
|   { "TestVerifyEKUsWithMultipleEKUsInCert()", "CryptoPkg.BaseCryptLib.Eku", TestVerifyEKUsWithMultipleEKUsInCert, NULL, NULL, NULL },
 | |
|   { "TestEkusNotPresentInSignature()",        "CryptoPkg.BaseCryptLib.Eku", TestEkusNotPresentInSignature,        NULL, NULL, NULL },
 | |
|   { "TestProductId10001PresentInSignature()", "CryptoPkg.BaseCryptLib.Eku", TestProductId10001PresentInSignature, NULL, NULL, NULL },
 | |
|   { "TestOnlyOneEkuInListRequired()",         "CryptoPkg.BaseCryptLib.Eku", TestOnlyOneEkuInListRequired,         NULL, NULL, NULL },
 | |
|   { "TestNoEKUsInSignature()",                "CryptoPkg.BaseCryptLib.Eku", TestNoEKUsInSignature,                NULL, NULL, NULL },
 | |
|   { "TestInvalidParameters()",                "CryptoPkg.BaseCryptLib.Eku", TestInvalidParameters,                NULL, NULL, NULL },
 | |
|   { "TestEKUSubsetSupersetFails()",           "CryptoPkg.BaseCryptLib.Eku", TestEKUSubsetSupersetFails,           NULL, NULL, NULL },
 | |
| };
 | |
| 
 | |
| UINTN  mPkcs7EkuTestNum = ARRAY_SIZE (mPkcs7EkuTest);
 |