--------------------------------------------------------------------------------
File:           ChainCreationInstructions.txt

Description:    This folder contains INI files that are required to generate
                the following test cert chains. Certs will be copied onto the
                file system AND MY store when they are generated by certreq.exe.

Note that typically certreq.exe operates on INF files, but in this folder
we use INI files so that our build system does not complain about INF's being
in the tree, but not in the CryptoPkg.dsc file.

To create your own certificates and signatures for testing, this file demonstrates
how the test certificate chains and signatures were created.

To create test signatures, run SignFirmwareWithEKUs.cmd (with SignTool.exe in
your path).  You can then use your favorite BinaryToHex converter to convert
the binary into a byte array that you can include in unit tests.

Copyright (C) Microsoft Corporation.  All Rights Reserved.
--------------------------------------------------------------------------------
Cert Chain:

       ------------------------------------------
      |                                          | // Root of trust. ECDSA P521 curve
      |          TestEKUParsingRoot              | // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
      |                                          | // CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE
       ------------------------------------------
                         ^
                         |
       ------------------------------------------
      |                                          | // Issues subordinate CAs. ECC P384 curve.
      |       TestEKUParsingPolicyCA             | // SHA 256 Key Usage:
      |                                          | // CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE
       ------------------------------------------
                         ^
                         |
       ------------------------------------------
      |                                          | // Issues end-entity (leaf) signers. ECC P256 curve.
      |        TestEKUParsingIssuingCA           | // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
      |                                          | // Enhanced Key Usage:
       ------------------------------------------  // 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing)
                         ^
                         |
          --------------------------------------
         /                                     /   // Leaf signer,  ECC P256 curve.
        /      TestEKUParsingLeafSigner       /    // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
       /                                     /     // Enhanced Key usages:
       --------------------------------------      // 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing)
                                                   // 1.3.6.1.4.1.311.76.9.21.1.N, N == Product ID.




---------------------------------------------------------------------------------


--- files required ---

TestEKUParsingRoot.ini               - This certificate is the root CA under which all CAs live.
TestEKUParsingPolicyCA.ini           - This policy CA will issue subordinate CA's with EKU constraints.
TestEKUParsingIssuingCA.ini          - CA to issue end-entity leafs.
TestEKUParsingLeafSigner.ini         - End-Entity leaf signer.
TestEKUParsingLeafSignerPid12345.ini - End-Entity, with EKU: 1.3.6.1.4.1.311.76.9.21.1.12345.
TestEKUParsingNoEKUsInSigner.ini     - Leaf with no EKU's specified.
TestEKUParsingLeafSignerPid1.ini     - Test with naming files ini, to get around build complaints.
--- Commands to execute ---

certreq.exe -new                                    TestEKUParsingRoot.ini               TestEKUParsingRoot.cer
certreq.exe -new -q -cert "TestEKUParsingRoot"      TestEKUParsingPolicyCA.ini           TestEKUParsingPolicyCA.cer
certreq.exe -new -q -cert "TestEKUParsingPolicyCA"  TestEKUParsingIssuingCA.ini          TestEKUParsingIssuingCA.cer
certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSigner.ini         TestEKUParsingLeafSigner.cer
certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSignerPid12345.ini TestEKUParsingLeafSignerPid12345.cer
certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingNoEKUsInSigner.ini     TestEKUParsingNoEKUsInSigner.cer
certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSignerPid1.ini     TestEKUParsingLeafSignerPid1.cer

---------------------------------------------------------------------------------

Then start mmc->Add certificates, Local Computer/open Personal/Certs and export the keys into the pfx files below.
Note:  You should see a little key on the top left of each cert icon, which means you have the private key
       for this cert.  If you don't see it something is wrong.  For each cert, right-click and do all tasks,
       export.  Yes, Export the private key.  PCKS#12 format, include all certs in path if possible.

       If we automated the call to certreq above, there is a PowerShell "PKI" cmdlet which has
       an Export-PfxCertificate command.

Passwords:  TestEKUParsingRoot.pfx               == TestEKUParsingRoot
            TestEKUParsingPolicyCA.pfx           == TestEKUParsingPolicyCA
            TestEKUParsingIssuingCA.pfx          == TestEKUParsingIssuingCA
            TestEKUParsingLeafSigner.pfx         == TestEKUParsingLeafSigner
            TestEKUParsingLeafSignerPid12345.pfx == TestEKUParsingLeafSignerPid12345
            TestEKUParsingNoEKUsInSigner.pfx     == TestEKUParsingNoEKUsInSigner

