// Autogenerated by generate_tests.py, do not edit

// Hack to allow disabling type parameterized test cases.
// See https://github.com/google/googletest/issues/389
#define WRAPPED_TYPED_TEST_P(CaseName, TestName) \
  TYPED_TEST_P(CaseName, TestName)
#define WRAPPED_REGISTER_TYPED_TEST_CASE_P(CaseName, ...) \
  REGISTER_TYPED_TEST_CASE_P(CaseName, __VA_ARGS__)

template <typename PkitsTestDelegate>
class PkitsTest01SignatureVerification : public PkitsTest<PkitsTestDelegate> {};
TYPED_TEST_CASE_P(PkitsTest01SignatureVerification);

// 4.1.1 Valid Signatures Test1
WRAPPED_TYPED_TEST_P(PkitsTest01SignatureVerification,
                     Section1ValidSignaturesTest1) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "ValidCertificatePathTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.1.1";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.1.2 Invalid CA Signature Test2
WRAPPED_TYPED_TEST_P(PkitsTest01SignatureVerification,
                     Section1InvalidCASignatureTest2) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "BadSignedCACert",
                               "InvalidCASignatureTest2EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "BadSignedCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.1.2";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.1.3 Invalid EE Signature Test3
WRAPPED_TYPED_TEST_P(PkitsTest01SignatureVerification,
                     Section1InvalidEESignatureTest3) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "InvalidEESignatureTest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.1.3";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.1.4 Valid DSA Signatures Test4
WRAPPED_TYPED_TEST_P(PkitsTest01SignatureVerification,
                     Section1ValidDSASignaturesTest4) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "DSACACert",
                               "ValidDSASignaturesTest4EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "DSACACRL"};
  PkitsTestInfo info;
  info.test_number = "4.1.4";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.1.5 Valid DSA Parameter Inheritance Test5
WRAPPED_TYPED_TEST_P(PkitsTest01SignatureVerification,
                     Section1ValidDSAParameterInheritanceTest5) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "DSACACert",
                               "DSAParametersInheritedCACert",
                               "ValidDSAParameterInheritanceTest5EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "DSACACRL",
                              "DSAParametersInheritedCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.1.5";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.1.6 Invalid DSA Signature Test6
WRAPPED_TYPED_TEST_P(PkitsTest01SignatureVerification,
                     Section1InvalidDSASignatureTest6) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "DSACACert",
                               "InvalidDSASignatureTest6EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "DSACACRL"};
  PkitsTestInfo info;
  info.test_number = "4.1.6";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

WRAPPED_REGISTER_TYPED_TEST_CASE_P(PkitsTest01SignatureVerification,
                                   Section1ValidSignaturesTest1,
                                   Section1InvalidCASignatureTest2,
                                   Section1InvalidEESignatureTest3,
                                   Section1ValidDSASignaturesTest4,
                                   Section1ValidDSAParameterInheritanceTest5,
                                   Section1InvalidDSASignatureTest6);

template <typename PkitsTestDelegate>
class PkitsTest02ValidityPeriods : public PkitsTest<PkitsTestDelegate> {};
TYPED_TEST_CASE_P(PkitsTest02ValidityPeriods);

// 4.2.1 Invalid CA notBefore Date Test1
WRAPPED_TYPED_TEST_P(PkitsTest02ValidityPeriods,
                     Section2InvalidCAnotBeforeDateTest1) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "BadnotBeforeDateCACert",
                               "InvalidCAnotBeforeDateTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "BadnotBeforeDateCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.2.1";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.2.2 Invalid EE notBefore Date Test2
WRAPPED_TYPED_TEST_P(PkitsTest02ValidityPeriods,
                     Section2InvalidEEnotBeforeDateTest2) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "InvalidEEnotBeforeDateTest2EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.2.2";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.2.3 Valid pre2000 UTC notBefore Date Test3
WRAPPED_TYPED_TEST_P(PkitsTest02ValidityPeriods,
                     Section2Validpre2000UTCnotBeforeDateTest3) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "Validpre2000UTCnotBeforeDateTest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.2.3";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.2.4 Valid GeneralizedTime notBefore Date Test4
WRAPPED_TYPED_TEST_P(PkitsTest02ValidityPeriods,
                     Section2ValidGeneralizedTimenotBeforeDateTest4) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "ValidGeneralizedTimenotBeforeDateTest4EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.2.4";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.2.5 Invalid CA notAfter Date Test5
WRAPPED_TYPED_TEST_P(PkitsTest02ValidityPeriods,
                     Section2InvalidCAnotAfterDateTest5) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "BadnotAfterDateCACert",
                               "InvalidCAnotAfterDateTest5EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "BadnotAfterDateCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.2.5";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.2.6 Invalid EE notAfter Date Test6
WRAPPED_TYPED_TEST_P(PkitsTest02ValidityPeriods,
                     Section2InvalidEEnotAfterDateTest6) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "InvalidEEnotAfterDateTest6EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.2.6";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.2.7 Invalid pre2000 UTC EE notAfter Date Test7
WRAPPED_TYPED_TEST_P(PkitsTest02ValidityPeriods,
                     Section2Invalidpre2000UTCEEnotAfterDateTest7) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "Invalidpre2000UTCEEnotAfterDateTest7EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.2.7";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.2.8 Valid GeneralizedTime notAfter Date Test8
WRAPPED_TYPED_TEST_P(PkitsTest02ValidityPeriods,
                     Section2ValidGeneralizedTimenotAfterDateTest8) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "ValidGeneralizedTimenotAfterDateTest8EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.2.8";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

WRAPPED_REGISTER_TYPED_TEST_CASE_P(
    PkitsTest02ValidityPeriods,
    Section2InvalidCAnotBeforeDateTest1,
    Section2InvalidEEnotBeforeDateTest2,
    Section2Validpre2000UTCnotBeforeDateTest3,
    Section2ValidGeneralizedTimenotBeforeDateTest4,
    Section2InvalidCAnotAfterDateTest5,
    Section2InvalidEEnotAfterDateTest6,
    Section2Invalidpre2000UTCEEnotAfterDateTest7,
    Section2ValidGeneralizedTimenotAfterDateTest8);

template <typename PkitsTestDelegate>
class PkitsTest03VerifyingNameChaining : public PkitsTest<PkitsTestDelegate> {};
TYPED_TEST_CASE_P(PkitsTest03VerifyingNameChaining);

// 4.3.1 Invalid Name Chaining EE Test1
WRAPPED_TYPED_TEST_P(PkitsTest03VerifyingNameChaining,
                     Section3InvalidNameChainingEETest1) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "InvalidNameChainingTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.3.1";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.3.2 Invalid Name Chaining Order Test2
WRAPPED_TYPED_TEST_P(PkitsTest03VerifyingNameChaining,
                     Section3InvalidNameChainingOrderTest2) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "NameOrderingCACert",
                               "InvalidNameChainingOrderTest2EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "NameOrderCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.3.2";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.3.3 Valid Name Chaining Whitespace Test3
WRAPPED_TYPED_TEST_P(PkitsTest03VerifyingNameChaining,
                     Section3ValidNameChainingWhitespaceTest3) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "ValidNameChainingWhitespaceTest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.3.3";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.3.4 Valid Name Chaining Whitespace Test4
WRAPPED_TYPED_TEST_P(PkitsTest03VerifyingNameChaining,
                     Section3ValidNameChainingWhitespaceTest4) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "ValidNameChainingWhitespaceTest4EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.3.4";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.3.5 Valid Name Chaining Capitalization Test5
WRAPPED_TYPED_TEST_P(PkitsTest03VerifyingNameChaining,
                     Section3ValidNameChainingCapitalizationTest5) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "ValidNameChainingCapitalizationTest5EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.3.5";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.3.6 Valid Name Chaining UIDs Test6
WRAPPED_TYPED_TEST_P(PkitsTest03VerifyingNameChaining,
                     Section3ValidNameChainingUIDsTest6) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "UIDCACert",
                               "ValidNameUIDsTest6EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "UIDCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.3.6";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.3.7 Valid RFC3280 Mandatory Attribute Types Test7
WRAPPED_TYPED_TEST_P(PkitsTest03VerifyingNameChaining,
                     Section3ValidRFC3280MandatoryAttributeTypesTest7) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "RFC3280MandatoryAttributeTypesCACert",
                               "ValidRFC3280MandatoryAttributeTypesTest7EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "RFC3280MandatoryAttributeTypesCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.3.7";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.3.8 Valid RFC3280 Optional Attribute Types Test8
WRAPPED_TYPED_TEST_P(PkitsTest03VerifyingNameChaining,
                     Section3ValidRFC3280OptionalAttributeTypesTest8) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "RFC3280OptionalAttributeTypesCACert",
                               "ValidRFC3280OptionalAttributeTypesTest8EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "RFC3280OptionalAttributeTypesCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.3.8";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.3.9 Valid UTF8String Encoded Names Test9
WRAPPED_TYPED_TEST_P(PkitsTest03VerifyingNameChaining,
                     Section3ValidUTF8StringEncodedNamesTest9) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "UTF8StringEncodedNamesCACert",
                               "ValidUTF8StringEncodedNamesTest9EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "UTF8StringEncodedNamesCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.3.9";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.3.10 Valid Rollover from PrintableString to UTF8String Test10
WRAPPED_TYPED_TEST_P(
    PkitsTest03VerifyingNameChaining,
    Section3ValidRolloverfromPrintableStringtoUTF8StringTest10) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate",
      "RolloverfromPrintableStringtoUTF8StringCACert",
      "ValidRolloverfromPrintableStringtoUTF8StringTest10EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "RolloverfromPrintableStringtoUTF8StringCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.3.10";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.3.11 Valid UTF8String Case Insensitive Match Test11
WRAPPED_TYPED_TEST_P(PkitsTest03VerifyingNameChaining,
                     Section3ValidUTF8StringCaseInsensitiveMatchTest11) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "UTF8StringCaseInsensitiveMatchCACert",
                               "ValidUTF8StringCaseInsensitiveMatchTest11EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "UTF8StringCaseInsensitiveMatchCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.3.11";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

WRAPPED_REGISTER_TYPED_TEST_CASE_P(
    PkitsTest03VerifyingNameChaining,
    Section3InvalidNameChainingEETest1,
    Section3InvalidNameChainingOrderTest2,
    Section3ValidNameChainingWhitespaceTest3,
    Section3ValidNameChainingWhitespaceTest4,
    Section3ValidNameChainingCapitalizationTest5,
    Section3ValidNameChainingUIDsTest6,
    Section3ValidRFC3280MandatoryAttributeTypesTest7,
    Section3ValidRFC3280OptionalAttributeTypesTest8,
    Section3ValidUTF8StringEncodedNamesTest9,
    Section3ValidRolloverfromPrintableStringtoUTF8StringTest10,
    Section3ValidUTF8StringCaseInsensitiveMatchTest11);

GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(PkitsTest04BasicCertificateRevocationTests);
template <typename PkitsTestDelegate>
class PkitsTest04BasicCertificateRevocationTests
    : public PkitsTest<PkitsTestDelegate> {};
TYPED_TEST_CASE_P(PkitsTest04BasicCertificateRevocationTests);

// 4.4.1 Missing CRL Test1
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4MissingCRLTest1) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "NoCRLCACert",
                               "InvalidMissingCRLTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.1";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.4.2 Invalid Revoked CA Test2
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4InvalidRevokedCATest2) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "RevokedsubCACert", "InvalidRevokedCATest2EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL",
                              "RevokedsubCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.2";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.4.3 Invalid Revoked EE Test3
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4InvalidRevokedEETest3) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "InvalidRevokedEETest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.3";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.4.4 Invalid Bad CRL Signature Test4
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4InvalidBadCRLSignatureTest4) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "BadCRLSignatureCACert",
                               "InvalidBadCRLSignatureTest4EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "BadCRLSignatureCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.4";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.4.5 Invalid Bad CRL Issuer Name Test5
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4InvalidBadCRLIssuerNameTest5) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "BadCRLIssuerNameCACert",
                               "InvalidBadCRLIssuerNameTest5EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "BadCRLIssuerNameCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.5";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.4.6 Invalid Wrong CRL Test6
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4InvalidWrongCRLTest6) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "WrongCRLCACert",
                               "InvalidWrongCRLTest6EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "WrongCRLCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.6";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.4.7 Valid Two CRLs Test7
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4ValidTwoCRLsTest7) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "TwoCRLsCACert",
                               "ValidTwoCRLsTest7EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "TwoCRLsCAGoodCRL",
                              "TwoCRLsCABadCRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.7";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.4.8 Invalid Unknown CRL Entry Extension Test8
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4InvalidUnknownCRLEntryExtensionTest8) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "UnknownCRLEntryExtensionCACert",
                               "InvalidUnknownCRLEntryExtensionTest8EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "UnknownCRLEntryExtensionCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.8";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.4.9 Invalid Unknown CRL Extension Test9
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4InvalidUnknownCRLExtensionTest9) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "UnknownCRLExtensionCACert",
                               "InvalidUnknownCRLExtensionTest9EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "UnknownCRLExtensionCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.9";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.4.10 Invalid Unknown CRL Extension Test10
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4InvalidUnknownCRLExtensionTest10) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "UnknownCRLExtensionCACert",
                               "InvalidUnknownCRLExtensionTest10EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "UnknownCRLExtensionCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.10";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.4.11 Invalid Old CRL nextUpdate Test11
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4InvalidOldCRLnextUpdateTest11) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "OldCRLnextUpdateCACert",
                               "InvalidOldCRLnextUpdateTest11EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "OldCRLnextUpdateCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.11";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.4.12 Invalid pre2000 CRL nextUpdate Test12
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4Invalidpre2000CRLnextUpdateTest12) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "pre2000CRLnextUpdateCACert",
                               "Invalidpre2000CRLnextUpdateTest12EESeetheintrod"
                               "uctiontoSection4.4formoreinformation."};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "pre2000CRLnextUpdateCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.12";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.4.13 Valid GeneralizedTime CRL nextUpdate Test13
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4ValidGeneralizedTimeCRLnextUpdateTest13) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "GeneralizedTimeCRLnextUpdateCACert",
                               "ValidGeneralizedTimeCRLnextUpdateTest13EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "GeneralizedTimeCRLnextUpdateCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.13";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.4.14 Valid Negative Serial Number Test14
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4ValidNegativeSerialNumberTest14) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "NegativeSerialNumberCACert",
                               "ValidNegativeSerialNumberTest14EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "NegativeSerialNumberCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.14";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.4.15 Invalid Negative Serial Number Test15
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4InvalidNegativeSerialNumberTest15) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "NegativeSerialNumberCACert",
                               "InvalidNegativeSerialNumberTest15EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "NegativeSerialNumberCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.15";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.4.16 Valid Long Serial Number Test16
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4ValidLongSerialNumberTest16) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "LongSerialNumberCACert",
                               "ValidLongSerialNumberTest16EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "LongSerialNumberCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.16";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.4.17 Valid Long Serial Number Test17
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4ValidLongSerialNumberTest17) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "LongSerialNumberCACert",
                               "ValidLongSerialNumberTest17EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "LongSerialNumberCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.17";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.4.18 Invalid Long Serial Number Test18
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4InvalidLongSerialNumberTest18) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "LongSerialNumberCACert",
                               "InvalidLongSerialNumberTest18EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "LongSerialNumberCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.18";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.4.19 Valid Separate Certificate and CRL Keys Test19
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4ValidSeparateCertificateandCRLKeysTest19) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate",
      "SeparateCertificateandCRLKeysCertificateSigningCACert",
      "SeparateCertificateandCRLKeysCRLSigningCert",
      "ValidSeparateCertificateandCRLKeysTest19EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "SeparateCertificateandCRLKeysCRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.19";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.4.20 Invalid Separate Certificate and CRL Keys Test20
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4InvalidSeparateCertificateandCRLKeysTest20) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate",
      "SeparateCertificateandCRLKeysCertificateSigningCACert",
      "SeparateCertificateandCRLKeysCRLSigningCert",
      "InvalidSeparateCertificateandCRLKeysTest20EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "SeparateCertificateandCRLKeysCRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.20";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.4.21 Invalid Separate Certificate and CRL Keys Test21
WRAPPED_TYPED_TEST_P(PkitsTest04BasicCertificateRevocationTests,
                     Section4InvalidSeparateCertificateandCRLKeysTest21) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate",
      "SeparateCertificateandCRLKeysCA2CertificateSigningCACert",
      "SeparateCertificateandCRLKeysCA2CRLSigningCert",
      "InvalidSeparateCertificateandCRLKeysTest21EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "SeparateCertificateandCRLKeysCA2CRL"};
  PkitsTestInfo info;
  info.test_number = "4.4.21";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

WRAPPED_REGISTER_TYPED_TEST_CASE_P(
    PkitsTest04BasicCertificateRevocationTests,
    Section4MissingCRLTest1,
    Section4InvalidRevokedCATest2,
    Section4InvalidRevokedEETest3,
    Section4InvalidBadCRLSignatureTest4,
    Section4InvalidBadCRLIssuerNameTest5,
    Section4InvalidWrongCRLTest6,
    Section4ValidTwoCRLsTest7,
    Section4InvalidUnknownCRLEntryExtensionTest8,
    Section4InvalidUnknownCRLExtensionTest9,
    Section4InvalidUnknownCRLExtensionTest10,
    Section4InvalidOldCRLnextUpdateTest11,
    Section4Invalidpre2000CRLnextUpdateTest12,
    Section4ValidGeneralizedTimeCRLnextUpdateTest13,
    Section4ValidNegativeSerialNumberTest14,
    Section4InvalidNegativeSerialNumberTest15,
    Section4ValidLongSerialNumberTest16,
    Section4ValidLongSerialNumberTest17,
    Section4InvalidLongSerialNumberTest18,
    Section4ValidSeparateCertificateandCRLKeysTest19,
    Section4InvalidSeparateCertificateandCRLKeysTest20,
    Section4InvalidSeparateCertificateandCRLKeysTest21);

GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(PkitsTest05VerifyingPathswithSelfIssuedCertificates);
template <typename PkitsTestDelegate>
class PkitsTest05VerifyingPathswithSelfIssuedCertificates
    : public PkitsTest<PkitsTestDelegate> {};
TYPED_TEST_CASE_P(PkitsTest05VerifyingPathswithSelfIssuedCertificates);

// 4.5.1 Valid Basic Self-Issued Old With New Test1
WRAPPED_TYPED_TEST_P(PkitsTest05VerifyingPathswithSelfIssuedCertificates,
                     Section5ValidBasicSelfIssuedOldWithNewTest1) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "BasicSelfIssuedNewKeyCACert",
                               "BasicSelfIssuedNewKeyOldWithNewCACert",
                               "ValidBasicSelfIssuedOldWithNewTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "BasicSelfIssuedNewKeyCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.5.1";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.5.2 Invalid Basic Self-Issued Old With New Test2
WRAPPED_TYPED_TEST_P(PkitsTest05VerifyingPathswithSelfIssuedCertificates,
                     Section5InvalidBasicSelfIssuedOldWithNewTest2) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "BasicSelfIssuedNewKeyCACert",
                               "BasicSelfIssuedNewKeyOldWithNewCACert",
                               "InvalidBasicSelfIssuedOldWithNewTest2EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "BasicSelfIssuedNewKeyCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.5.2";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.5.3 Valid Basic Self-Issued New With Old Test3
WRAPPED_TYPED_TEST_P(PkitsTest05VerifyingPathswithSelfIssuedCertificates,
                     Section5ValidBasicSelfIssuedNewWithOldTest3) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "BasicSelfIssuedOldKeyCACert",
                               "BasicSelfIssuedOldKeyNewWithOldCACert",
                               "ValidBasicSelfIssuedNewWithOldTest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "BasicSelfIssuedOldKeySelfIssuedCertCRL",
                              "BasicSelfIssuedOldKeyCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.5.3";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.5.4 Valid Basic Self-Issued New With Old Test4
WRAPPED_TYPED_TEST_P(PkitsTest05VerifyingPathswithSelfIssuedCertificates,
                     Section5ValidBasicSelfIssuedNewWithOldTest4) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "BasicSelfIssuedOldKeyCACert",
                               "BasicSelfIssuedOldKeyNewWithOldCACert",
                               "ValidBasicSelfIssuedNewWithOldTest4EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "BasicSelfIssuedOldKeySelfIssuedCertCRL",
                              "BasicSelfIssuedOldKeyCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.5.4";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.5.5 Invalid Basic Self-Issued New With Old Test5
WRAPPED_TYPED_TEST_P(PkitsTest05VerifyingPathswithSelfIssuedCertificates,
                     Section5InvalidBasicSelfIssuedNewWithOldTest5) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "BasicSelfIssuedOldKeyCACert",
                               "BasicSelfIssuedOldKeyNewWithOldCACert",
                               "InvalidBasicSelfIssuedNewWithOldTest5EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "BasicSelfIssuedOldKeySelfIssuedCertCRL",
                              "BasicSelfIssuedOldKeyCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.5.5";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.5.6 Valid Basic Self-Issued CRL Signing Key Test6
WRAPPED_TYPED_TEST_P(PkitsTest05VerifyingPathswithSelfIssuedCertificates,
                     Section5ValidBasicSelfIssuedCRLSigningKeyTest6) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "BasicSelfIssuedCRLSigningKeyCACert",
                               "BasicSelfIssuedCRLSigningKeyCRLCert",
                               "ValidBasicSelfIssuedCRLSigningKeyTest6EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "BasicSelfIssuedCRLSigningKeyCRLCertCRL",
                              "BasicSelfIssuedCRLSigningKeyCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.5.6";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.5.7 Invalid Basic Self-Issued CRL Signing Key Test7
WRAPPED_TYPED_TEST_P(PkitsTest05VerifyingPathswithSelfIssuedCertificates,
                     Section5InvalidBasicSelfIssuedCRLSigningKeyTest7) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "BasicSelfIssuedCRLSigningKeyCACert",
                               "BasicSelfIssuedCRLSigningKeyCRLCert",
                               "InvalidBasicSelfIssuedCRLSigningKeyTest7EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "BasicSelfIssuedCRLSigningKeyCRLCertCRL",
                              "BasicSelfIssuedCRLSigningKeyCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.5.7";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.5.8 Invalid Basic Self-Issued CRL Signing Key Test8
WRAPPED_TYPED_TEST_P(PkitsTest05VerifyingPathswithSelfIssuedCertificates,
                     Section5InvalidBasicSelfIssuedCRLSigningKeyTest8) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "BasicSelfIssuedCRLSigningKeyCACert",
                               "BasicSelfIssuedCRLSigningKeyCRLCert",
                               "InvalidBasicSelfIssuedCRLSigningKeyTest8EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "BasicSelfIssuedCRLSigningKeyCRLCertCRL",
                              "BasicSelfIssuedCRLSigningKeyCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.5.8";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

WRAPPED_REGISTER_TYPED_TEST_CASE_P(
    PkitsTest05VerifyingPathswithSelfIssuedCertificates,
    Section5ValidBasicSelfIssuedOldWithNewTest1,
    Section5InvalidBasicSelfIssuedOldWithNewTest2,
    Section5ValidBasicSelfIssuedNewWithOldTest3,
    Section5ValidBasicSelfIssuedNewWithOldTest4,
    Section5InvalidBasicSelfIssuedNewWithOldTest5,
    Section5ValidBasicSelfIssuedCRLSigningKeyTest6,
    Section5InvalidBasicSelfIssuedCRLSigningKeyTest7,
    Section5InvalidBasicSelfIssuedCRLSigningKeyTest8);

template <typename PkitsTestDelegate>
class PkitsTest06VerifyingBasicConstraints
    : public PkitsTest<PkitsTestDelegate> {};
TYPED_TEST_CASE_P(PkitsTest06VerifyingBasicConstraints);

// 4.6.1 Invalid Missing basicConstraints Test1
WRAPPED_TYPED_TEST_P(PkitsTest06VerifyingBasicConstraints,
                     Section6InvalidMissingbasicConstraintsTest1) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "MissingbasicConstraintsCACert",
                               "InvalidMissingbasicConstraintsTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "MissingbasicConstraintsCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.6.1";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.6.2 Invalid cA False Test2
WRAPPED_TYPED_TEST_P(PkitsTest06VerifyingBasicConstraints,
                     Section6InvalidcAFalseTest2) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "basicConstraintsCriticalcAFalseCACert",
                               "InvalidcAFalseTest2EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "basicConstraintsCriticalcAFalseCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.6.2";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.6.3 Invalid cA False Test3
WRAPPED_TYPED_TEST_P(PkitsTest06VerifyingBasicConstraints,
                     Section6InvalidcAFalseTest3) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "basicConstraintsNotCriticalcAFalseCACert",
                               "InvalidcAFalseTest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "basicConstraintsNotCriticalcAFalseCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.6.3";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.6.4 Valid basicConstraints Not Critical Test4
WRAPPED_TYPED_TEST_P(PkitsTest06VerifyingBasicConstraints,
                     Section6ValidbasicConstraintsNotCriticalTest4) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "basicConstraintsNotCriticalCACert",
                               "ValidbasicConstraintsNotCriticalTest4EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "basicConstraintsNotCriticalCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.6.4";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.6.5 Invalid pathLenConstraint Test5
WRAPPED_TYPED_TEST_P(PkitsTest06VerifyingBasicConstraints,
                     Section6InvalidpathLenConstraintTest5) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "pathLenConstraint0CACert",
      "pathLenConstraint0subCACert", "InvalidpathLenConstraintTest5EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "pathLenConstraint0CACRL",
                              "pathLenConstraint0subCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.6.5";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.6.6 Invalid pathLenConstraint Test6
WRAPPED_TYPED_TEST_P(PkitsTest06VerifyingBasicConstraints,
                     Section6InvalidpathLenConstraintTest6) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "pathLenConstraint0CACert",
      "pathLenConstraint0subCACert", "InvalidpathLenConstraintTest6EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "pathLenConstraint0CACRL",
                              "pathLenConstraint0subCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.6.6";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.6.7 Valid pathLenConstraint Test7
WRAPPED_TYPED_TEST_P(PkitsTest06VerifyingBasicConstraints,
                     Section6ValidpathLenConstraintTest7) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "pathLenConstraint0CACert",
                               "ValidpathLenConstraintTest7EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "pathLenConstraint0CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.6.7";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.6.8 Valid pathLenConstraint Test8
WRAPPED_TYPED_TEST_P(PkitsTest06VerifyingBasicConstraints,
                     Section6ValidpathLenConstraintTest8) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "pathLenConstraint0CACert",
                               "ValidpathLenConstraintTest8EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "pathLenConstraint0CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.6.8";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.6.9 Invalid pathLenConstraint Test9
WRAPPED_TYPED_TEST_P(PkitsTest06VerifyingBasicConstraints,
                     Section6InvalidpathLenConstraintTest9) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "pathLenConstraint6CACert",
      "pathLenConstraint6subCA0Cert", "pathLenConstraint6subsubCA00Cert",
      "InvalidpathLenConstraintTest9EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "pathLenConstraint6CACRL",
                              "pathLenConstraint6subCA0CRL",
                              "pathLenConstraint6subsubCA00CRL"};
  PkitsTestInfo info;
  info.test_number = "4.6.9";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.6.10 Invalid pathLenConstraint Test10
WRAPPED_TYPED_TEST_P(PkitsTest06VerifyingBasicConstraints,
                     Section6InvalidpathLenConstraintTest10) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "pathLenConstraint6CACert",
      "pathLenConstraint6subCA0Cert", "pathLenConstraint6subsubCA00Cert",
      "InvalidpathLenConstraintTest10EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "pathLenConstraint6CACRL",
                              "pathLenConstraint6subCA0CRL",
                              "pathLenConstraint6subsubCA00CRL"};
  PkitsTestInfo info;
  info.test_number = "4.6.10";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.6.11 Invalid pathLenConstraint Test11
WRAPPED_TYPED_TEST_P(PkitsTest06VerifyingBasicConstraints,
                     Section6InvalidpathLenConstraintTest11) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "pathLenConstraint6CACert",
                               "pathLenConstraint6subCA1Cert",
                               "pathLenConstraint6subsubCA11Cert",
                               "pathLenConstraint6subsubsubCA11XCert",
                               "InvalidpathLenConstraintTest11EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "pathLenConstraint6CACRL",
                              "pathLenConstraint6subCA1CRL",
                              "pathLenConstraint6subsubCA11CRL",
                              "pathLenConstraint6subsubsubCA11XCRL"};
  PkitsTestInfo info;
  info.test_number = "4.6.11";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.6.12 Invalid pathLenConstraint Test12
WRAPPED_TYPED_TEST_P(PkitsTest06VerifyingBasicConstraints,
                     Section6InvalidpathLenConstraintTest12) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "pathLenConstraint6CACert",
                               "pathLenConstraint6subCA1Cert",
                               "pathLenConstraint6subsubCA11Cert",
                               "pathLenConstraint6subsubsubCA11XCert",
                               "InvalidpathLenConstraintTest12EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "pathLenConstraint6CACRL",
                              "pathLenConstraint6subCA1CRL",
                              "pathLenConstraint6subsubCA11CRL",
                              "pathLenConstraint6subsubsubCA11XCRL"};
  PkitsTestInfo info;
  info.test_number = "4.6.12";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.6.13 Valid pathLenConstraint Test13
WRAPPED_TYPED_TEST_P(PkitsTest06VerifyingBasicConstraints,
                     Section6ValidpathLenConstraintTest13) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "pathLenConstraint6CACert",
                               "pathLenConstraint6subCA4Cert",
                               "pathLenConstraint6subsubCA41Cert",
                               "pathLenConstraint6subsubsubCA41XCert",
                               "ValidpathLenConstraintTest13EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "pathLenConstraint6CACRL",
                              "pathLenConstraint6subCA4CRL",
                              "pathLenConstraint6subsubCA41CRL",
                              "pathLenConstraint6subsubsubCA41XCRL"};
  PkitsTestInfo info;
  info.test_number = "4.6.13";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.6.14 Valid pathLenConstraint Test14
WRAPPED_TYPED_TEST_P(PkitsTest06VerifyingBasicConstraints,
                     Section6ValidpathLenConstraintTest14) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "pathLenConstraint6CACert",
                               "pathLenConstraint6subCA4Cert",
                               "pathLenConstraint6subsubCA41Cert",
                               "pathLenConstraint6subsubsubCA41XCert",
                               "ValidpathLenConstraintTest14EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "pathLenConstraint6CACRL",
                              "pathLenConstraint6subCA4CRL",
                              "pathLenConstraint6subsubCA41CRL",
                              "pathLenConstraint6subsubsubCA41XCRL"};
  PkitsTestInfo info;
  info.test_number = "4.6.14";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.6.15 Valid Self-Issued pathLenConstraint Test15
WRAPPED_TYPED_TEST_P(PkitsTest06VerifyingBasicConstraints,
                     Section6ValidSelfIssuedpathLenConstraintTest15) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "pathLenConstraint0CACert",
                               "pathLenConstraint0SelfIssuedCACert",
                               "ValidSelfIssuedpathLenConstraintTest15EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "pathLenConstraint0CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.6.15";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.6.16 Invalid Self-Issued pathLenConstraint Test16
WRAPPED_TYPED_TEST_P(PkitsTest06VerifyingBasicConstraints,
                     Section6InvalidSelfIssuedpathLenConstraintTest16) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "pathLenConstraint0CACert",
      "pathLenConstraint0SelfIssuedCACert", "pathLenConstraint0subCA2Cert",
      "InvalidSelfIssuedpathLenConstraintTest16EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "pathLenConstraint0CACRL",
                              "pathLenConstraint0subCA2CRL"};
  PkitsTestInfo info;
  info.test_number = "4.6.16";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.6.17 Valid Self-Issued pathLenConstraint Test17
WRAPPED_TYPED_TEST_P(PkitsTest06VerifyingBasicConstraints,
                     Section6ValidSelfIssuedpathLenConstraintTest17) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "pathLenConstraint1CACert",
                               "pathLenConstraint1SelfIssuedCACert",
                               "pathLenConstraint1subCACert",
                               "pathLenConstraint1SelfIssuedsubCACert",
                               "ValidSelfIssuedpathLenConstraintTest17EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "pathLenConstraint1CACRL",
                              "pathLenConstraint1subCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.6.17";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

WRAPPED_REGISTER_TYPED_TEST_CASE_P(
    PkitsTest06VerifyingBasicConstraints,
    Section6InvalidMissingbasicConstraintsTest1,
    Section6InvalidcAFalseTest2,
    Section6InvalidcAFalseTest3,
    Section6ValidbasicConstraintsNotCriticalTest4,
    Section6InvalidpathLenConstraintTest5,
    Section6InvalidpathLenConstraintTest6,
    Section6ValidpathLenConstraintTest7,
    Section6ValidpathLenConstraintTest8,
    Section6InvalidpathLenConstraintTest9,
    Section6InvalidpathLenConstraintTest10,
    Section6InvalidpathLenConstraintTest11,
    Section6InvalidpathLenConstraintTest12,
    Section6ValidpathLenConstraintTest13,
    Section6ValidpathLenConstraintTest14,
    Section6ValidSelfIssuedpathLenConstraintTest15,
    Section6InvalidSelfIssuedpathLenConstraintTest16,
    Section6ValidSelfIssuedpathLenConstraintTest17);

template <typename PkitsTestDelegate>
class PkitsTest07KeyUsage : public PkitsTest<PkitsTestDelegate> {};
TYPED_TEST_CASE_P(PkitsTest07KeyUsage);

// 4.7.1 Invalid keyUsage Critical keyCertSign False Test1
WRAPPED_TYPED_TEST_P(PkitsTest07KeyUsage,
                     Section7InvalidkeyUsageCriticalkeyCertSignFalseTest1) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "keyUsageCriticalkeyCertSignFalseCACert",
      "InvalidkeyUsageCriticalkeyCertSignFalseTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "keyUsageCriticalkeyCertSignFalseCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.7.1";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.7.2 Invalid keyUsage Not Critical keyCertSign False Test2
WRAPPED_TYPED_TEST_P(PkitsTest07KeyUsage,
                     Section7InvalidkeyUsageNotCriticalkeyCertSignFalseTest2) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "keyUsageNotCriticalkeyCertSignFalseCACert",
      "InvalidkeyUsageNotCriticalkeyCertSignFalseTest2EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "keyUsageNotCriticalkeyCertSignFalseCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.7.2";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.7.3 Valid keyUsage Not Critical Test3
WRAPPED_TYPED_TEST_P(PkitsTest07KeyUsage,
                     Section7ValidkeyUsageNotCriticalTest3) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "keyUsageNotCriticalCACert",
                               "ValidkeyUsageNotCriticalTest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "keyUsageNotCriticalCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.7.3";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.7.4 Invalid keyUsage Critical cRLSign False Test4
WRAPPED_TYPED_TEST_P(PkitsTest07KeyUsage,
                     Section7InvalidkeyUsageCriticalcRLSignFalseTest4) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "keyUsageCriticalcRLSignFalseCACert",
                               "InvalidkeyUsageCriticalcRLSignFalseTest4EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "keyUsageCriticalcRLSignFalseCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.7.4";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.7.5 Invalid keyUsage Not Critical cRLSign False Test5
WRAPPED_TYPED_TEST_P(PkitsTest07KeyUsage,
                     Section7InvalidkeyUsageNotCriticalcRLSignFalseTest5) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "keyUsageNotCriticalcRLSignFalseCACert",
                               "InvalidkeyUsageNotCriticalcRLSignFalseTest5EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "keyUsageNotCriticalcRLSignFalseCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.7.5";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

WRAPPED_REGISTER_TYPED_TEST_CASE_P(
    PkitsTest07KeyUsage,
    Section7InvalidkeyUsageCriticalkeyCertSignFalseTest1,
    Section7InvalidkeyUsageNotCriticalkeyCertSignFalseTest2,
    Section7ValidkeyUsageNotCriticalTest3,
    Section7InvalidkeyUsageCriticalcRLSignFalseTest4,
    Section7InvalidkeyUsageNotCriticalcRLSignFalseTest5);

template <typename PkitsTestDelegate>
class PkitsTest08CertificatePolicies : public PkitsTest<PkitsTestDelegate> {};
TYPED_TEST_CASE_P(PkitsTest08CertificatePolicies);

// 4.8.1 All Certificates Same Policy Test1 (Subpart 1)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8AllCertificatesSamePolicyTest1Subpart1) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "ValidCertificatePathTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.1";
  info.should_validate = true;
  info.SetInitialExplicitPolicy(true);

  this->RunTest(certs, crls, info);
}

// 4.8.1 All Certificates Same Policy Test1 (Subpart 2)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8AllCertificatesSamePolicyTest1Subpart2) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "ValidCertificatePathTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.1";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-1");
  info.SetInitialExplicitPolicy(true);

  this->RunTest(certs, crls, info);
}

// 4.8.1 All Certificates Same Policy Test1 (Subpart 3)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8AllCertificatesSamePolicyTest1Subpart3) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "ValidCertificatePathTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.1";
  info.should_validate = false;
  info.SetInitialPolicySet("NIST-test-policy-2");
  info.SetInitialExplicitPolicy(true);
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.8.1 All Certificates Same Policy Test1 (Subpart 4)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8AllCertificatesSamePolicyTest1Subpart4) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "ValidCertificatePathTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.1";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-1,NIST-test-policy-2");
  info.SetInitialExplicitPolicy(true);

  this->RunTest(certs, crls, info);
}

// 4.8.2 All Certificates No Policies Test2 (Subpart 1)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8AllCertificatesNoPoliciesTest2Subpart1) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "NoPoliciesCACert",
                               "AllCertificatesNoPoliciesTest2EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "NoPoliciesCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.2";
  info.should_validate = true;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.8.2 All Certificates No Policies Test2 (Subpart 2)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8AllCertificatesNoPoliciesTest2Subpart2) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "NoPoliciesCACert",
                               "AllCertificatesNoPoliciesTest2EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "NoPoliciesCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.2";
  info.should_validate = false;
  info.SetInitialExplicitPolicy(true);
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.8.3 Different Policies Test3 (Subpart 1)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8DifferentPoliciesTest3Subpart1) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "PoliciesP2subCACert",
                               "DifferentPoliciesTest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL",
                              "PoliciesP2subCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.3";
  info.should_validate = true;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.8.3 Different Policies Test3 (Subpart 2)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8DifferentPoliciesTest3Subpart2) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "PoliciesP2subCACert",
                               "DifferentPoliciesTest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL",
                              "PoliciesP2subCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.3";
  info.should_validate = false;
  info.SetInitialExplicitPolicy(true);
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.8.3 Different Policies Test3 (Subpart 3)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8DifferentPoliciesTest3Subpart3) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "PoliciesP2subCACert",
                               "DifferentPoliciesTest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL",
                              "PoliciesP2subCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.3";
  info.should_validate = false;
  info.SetInitialPolicySet("NIST-test-policy-1,NIST-test-policy-2");
  info.SetInitialExplicitPolicy(true);
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.8.4 Different Policies Test4
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8DifferentPoliciesTest4) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "GoodsubCACert", "DifferentPoliciesTest4EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL",
                              "GoodsubCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.4";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.8.5 Different Policies Test5
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8DifferentPoliciesTest5) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "PoliciesP2subCA2Cert",
                               "DifferentPoliciesTest5EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL",
                              "PoliciesP2subCA2CRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.5";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.8.6 Overlapping Policies Test6 (Subpart 1)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8OverlappingPoliciesTest6Subpart1) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "PoliciesP1234CACert",
      "PoliciesP1234subCAP123Cert", "PoliciesP1234subsubCAP123P12Cert",
      "OverlappingPoliciesTest6EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "PoliciesP1234CACRL",
                              "PoliciesP1234subCAP123CRL",
                              "PoliciesP1234subsubCAP123P12CRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.6";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.8.6 Overlapping Policies Test6 (Subpart 2)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8OverlappingPoliciesTest6Subpart2) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "PoliciesP1234CACert",
      "PoliciesP1234subCAP123Cert", "PoliciesP1234subsubCAP123P12Cert",
      "OverlappingPoliciesTest6EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "PoliciesP1234CACRL",
                              "PoliciesP1234subCAP123CRL",
                              "PoliciesP1234subsubCAP123P12CRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.6";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-1");

  this->RunTest(certs, crls, info);
}

// 4.8.6 Overlapping Policies Test6 (Subpart 3)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8OverlappingPoliciesTest6Subpart3) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "PoliciesP1234CACert",
      "PoliciesP1234subCAP123Cert", "PoliciesP1234subsubCAP123P12Cert",
      "OverlappingPoliciesTest6EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "PoliciesP1234CACRL",
                              "PoliciesP1234subCAP123CRL",
                              "PoliciesP1234subsubCAP123P12CRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.6";
  info.should_validate = false;
  info.SetInitialPolicySet("NIST-test-policy-2");
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.8.7 Different Policies Test7
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8DifferentPoliciesTest7) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "PoliciesP123CACert", "PoliciesP123subCAP12Cert",
                               "PoliciesP123subsubCAP12P1Cert",
                               "DifferentPoliciesTest7EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "PoliciesP123CACRL",
                              "PoliciesP123subCAP12CRL",
                              "PoliciesP123subsubCAP12P1CRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.7";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.8.8 Different Policies Test8
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8DifferentPoliciesTest8) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "PoliciesP12CACert", "PoliciesP12subCAP1Cert",
                               "PoliciesP12subsubCAP1P2Cert",
                               "DifferentPoliciesTest8EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "PoliciesP12CACRL",
                              "PoliciesP12subCAP1CRL",
                              "PoliciesP12subsubCAP1P2CRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.8";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.8.9 Different Policies Test9
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8DifferentPoliciesTest9) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate",         "PoliciesP123CACert",
      "PoliciesP123subCAP12Cert",           "PoliciesP123subsubCAP12P2Cert",
      "PoliciesP123subsubsubCAP12P2P1Cert", "DifferentPoliciesTest9EE"};
  const char* const crls[] = {
      "TrustAnchorRootCRL", "PoliciesP123CACRL", "PoliciesP123subCAP12CRL",
      "PoliciesP123subsubCAP2P2CRL", "PoliciesP123subsubsubCAP12P2P1CRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.9";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.8.10 All Certificates Same Policies Test10 (Subpart 1)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8AllCertificatesSamePoliciesTest10Subpart1) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "PoliciesP12CACert",
                               "AllCertificatesSamePoliciesTest10EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "PoliciesP12CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.10";
  info.should_validate = true;
  info.SetUserConstrainedPolicySet("NIST-test-policy-1,NIST-test-policy-2");

  this->RunTest(certs, crls, info);
}

// 4.8.10 All Certificates Same Policies Test10 (Subpart 2)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8AllCertificatesSamePoliciesTest10Subpart2) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "PoliciesP12CACert",
                               "AllCertificatesSamePoliciesTest10EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "PoliciesP12CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.10";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-1");

  this->RunTest(certs, crls, info);
}

// 4.8.10 All Certificates Same Policies Test10 (Subpart 3)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8AllCertificatesSamePoliciesTest10Subpart3) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "PoliciesP12CACert",
                               "AllCertificatesSamePoliciesTest10EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "PoliciesP12CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.10";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-2");
  info.SetUserConstrainedPolicySet("NIST-test-policy-2");

  this->RunTest(certs, crls, info);
}

// 4.8.11 All Certificates AnyPolicy Test11 (Subpart 1)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8AllCertificatesAnyPolicyTest11Subpart1) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "anyPolicyCACert",
                               "AllCertificatesanyPolicyTest11EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "anyPolicyCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.11";
  info.should_validate = true;
  info.SetUserConstrainedPolicySet("anyPolicy");

  this->RunTest(certs, crls, info);
}

// 4.8.11 All Certificates AnyPolicy Test11 (Subpart 2)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8AllCertificatesAnyPolicyTest11Subpart2) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "anyPolicyCACert",
                               "AllCertificatesanyPolicyTest11EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "anyPolicyCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.11";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-1");

  this->RunTest(certs, crls, info);
}

// 4.8.12 Different Policies Test12
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8DifferentPoliciesTest12) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "PoliciesP3CACert",
                               "DifferentPoliciesTest12EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "PoliciesP3CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.12";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.8.13 All Certificates Same Policies Test13 (Subpart 1)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8AllCertificatesSamePoliciesTest13Subpart1) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "PoliciesP123CACert",
                               "AllCertificatesSamePoliciesTest13EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "PoliciesP123CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.13";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-1");

  this->RunTest(certs, crls, info);
}

// 4.8.13 All Certificates Same Policies Test13 (Subpart 2)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8AllCertificatesSamePoliciesTest13Subpart2) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "PoliciesP123CACert",
                               "AllCertificatesSamePoliciesTest13EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "PoliciesP123CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.13";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-2");
  info.SetUserConstrainedPolicySet("NIST-test-policy-2");

  this->RunTest(certs, crls, info);
}

// 4.8.13 All Certificates Same Policies Test13 (Subpart 3)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8AllCertificatesSamePoliciesTest13Subpart3) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "PoliciesP123CACert",
                               "AllCertificatesSamePoliciesTest13EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "PoliciesP123CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.13";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-3");
  info.SetUserConstrainedPolicySet("NIST-test-policy-3");

  this->RunTest(certs, crls, info);
}

// 4.8.14 AnyPolicy Test14 (Subpart 1)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8AnyPolicyTest14Subpart1) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "anyPolicyCACert",
                               "AnyPolicyTest14EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "anyPolicyCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.14";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-1");

  this->RunTest(certs, crls, info);
}

// 4.8.14 AnyPolicy Test14 (Subpart 2)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8AnyPolicyTest14Subpart2) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "anyPolicyCACert",
                               "AnyPolicyTest14EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "anyPolicyCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.14";
  info.should_validate = false;
  info.SetInitialPolicySet("NIST-test-policy-2");
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.8.15 User Notice Qualifier Test15
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8UserNoticeQualifierTest15) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "UserNoticeQualifierTest15EE"};
  const char* const crls[] = {"TrustAnchorRootCRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.15";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.8.16 User Notice Qualifier Test16
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8UserNoticeQualifierTest16) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "UserNoticeQualifierTest16EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.16";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.8.17 User Notice Qualifier Test17
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8UserNoticeQualifierTest17) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "UserNoticeQualifierTest17EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.17";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.8.18 User Notice Qualifier Test18 (Subpart 1)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8UserNoticeQualifierTest18Subpart1) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "PoliciesP12CACert",
                               "UserNoticeQualifierTest18EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "PoliciesP12CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.18";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-1");

  this->RunTest(certs, crls, info);
}

// 4.8.18 User Notice Qualifier Test18 (Subpart 2)
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8UserNoticeQualifierTest18Subpart2) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "PoliciesP12CACert",
                               "UserNoticeQualifierTest18EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "PoliciesP12CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.18";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-2");
  info.SetUserConstrainedPolicySet("NIST-test-policy-2");

  this->RunTest(certs, crls, info);
}

// 4.8.19 User Notice Qualifier Test19
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8UserNoticeQualifierTest19) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "UserNoticeQualifierTest19EE"};
  const char* const crls[] = {"TrustAnchorRootCRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.19";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.8.20 CPS Pointer Qualifier Test20
WRAPPED_TYPED_TEST_P(PkitsTest08CertificatePolicies,
                     Section8CPSPointerQualifierTest20) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "CPSPointerQualifierTest20EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.8.20";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-1");
  info.SetInitialExplicitPolicy(true);

  this->RunTest(certs, crls, info);
}

WRAPPED_REGISTER_TYPED_TEST_CASE_P(
    PkitsTest08CertificatePolicies,
    Section8AllCertificatesSamePolicyTest1Subpart1,
    Section8AllCertificatesSamePolicyTest1Subpart2,
    Section8AllCertificatesSamePolicyTest1Subpart3,
    Section8AllCertificatesSamePolicyTest1Subpart4,
    Section8AllCertificatesNoPoliciesTest2Subpart1,
    Section8AllCertificatesNoPoliciesTest2Subpart2,
    Section8DifferentPoliciesTest3Subpart1,
    Section8DifferentPoliciesTest3Subpart2,
    Section8DifferentPoliciesTest3Subpart3,
    Section8DifferentPoliciesTest4,
    Section8DifferentPoliciesTest5,
    Section8OverlappingPoliciesTest6Subpart1,
    Section8OverlappingPoliciesTest6Subpart2,
    Section8OverlappingPoliciesTest6Subpart3,
    Section8DifferentPoliciesTest7,
    Section8DifferentPoliciesTest8,
    Section8DifferentPoliciesTest9,
    Section8AllCertificatesSamePoliciesTest10Subpart1,
    Section8AllCertificatesSamePoliciesTest10Subpart2,
    Section8AllCertificatesSamePoliciesTest10Subpart3,
    Section8AllCertificatesAnyPolicyTest11Subpart1,
    Section8AllCertificatesAnyPolicyTest11Subpart2,
    Section8DifferentPoliciesTest12,
    Section8AllCertificatesSamePoliciesTest13Subpart1,
    Section8AllCertificatesSamePoliciesTest13Subpart2,
    Section8AllCertificatesSamePoliciesTest13Subpart3,
    Section8AnyPolicyTest14Subpart1,
    Section8AnyPolicyTest14Subpart2,
    Section8UserNoticeQualifierTest15,
    Section8UserNoticeQualifierTest16,
    Section8UserNoticeQualifierTest17,
    Section8UserNoticeQualifierTest18Subpart1,
    Section8UserNoticeQualifierTest18Subpart2,
    Section8UserNoticeQualifierTest19,
    Section8CPSPointerQualifierTest20);

template <typename PkitsTestDelegate>
class PkitsTest09RequireExplicitPolicy : public PkitsTest<PkitsTestDelegate> {};
TYPED_TEST_CASE_P(PkitsTest09RequireExplicitPolicy);

// 4.9.1 Valid RequireExplicitPolicy Test1
WRAPPED_TYPED_TEST_P(PkitsTest09RequireExplicitPolicy,
                     Section9ValidRequireExplicitPolicyTest1) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "requireExplicitPolicy10CACert",
                               "requireExplicitPolicy10subCACert",
                               "requireExplicitPolicy10subsubCACert",
                               "requireExplicitPolicy10subsubsubCACert",
                               "ValidrequireExplicitPolicyTest1EE"};
  const char* const crls[] = {
      "TrustAnchorRootCRL", "requireExplicitPolicy10CACRL",
      "requireExplicitPolicy10subCACRL", "requireExplicitPolicy10subsubCACRL",
      "requireExplicitPolicy10subsubsubCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.9.1";
  info.should_validate = true;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.9.2 Valid RequireExplicitPolicy Test2
WRAPPED_TYPED_TEST_P(PkitsTest09RequireExplicitPolicy,
                     Section9ValidRequireExplicitPolicyTest2) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "requireExplicitPolicy5CACert",
                               "requireExplicitPolicy5subCACert",
                               "requireExplicitPolicy5subsubCACert",
                               "requireExplicitPolicy5subsubsubCACert",
                               "ValidrequireExplicitPolicyTest2EE"};
  const char* const crls[] = {
      "TrustAnchorRootCRL", "requireExplicitPolicy5CACRL",
      "requireExplicitPolicy5subCACRL", "requireExplicitPolicy5subsubCACRL",
      "requireExplicitPolicy5subsubsubCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.9.2";
  info.should_validate = true;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.9.3 Invalid RequireExplicitPolicy Test3
WRAPPED_TYPED_TEST_P(PkitsTest09RequireExplicitPolicy,
                     Section9InvalidRequireExplicitPolicyTest3) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "requireExplicitPolicy4CACert",
                               "requireExplicitPolicy4subCACert",
                               "requireExplicitPolicy4subsubCACert",
                               "requireExplicitPolicy4subsubsubCACert",
                               "InvalidrequireExplicitPolicyTest3EE"};
  const char* const crls[] = {
      "TrustAnchorRootCRL", "requireExplicitPolicy4CACRL",
      "requireExplicitPolicy4subCACRL", "requireExplicitPolicy4subsubCACRL",
      "requireExplicitPolicy4subsubsubCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.9.3";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.9.4 Valid RequireExplicitPolicy Test4
WRAPPED_TYPED_TEST_P(PkitsTest09RequireExplicitPolicy,
                     Section9ValidRequireExplicitPolicyTest4) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "requireExplicitPolicy0CACert",
                               "requireExplicitPolicy0subCACert",
                               "requireExplicitPolicy0subsubCACert",
                               "requireExplicitPolicy0subsubsubCACert",
                               "ValidrequireExplicitPolicyTest4EE"};
  const char* const crls[] = {
      "TrustAnchorRootCRL", "requireExplicitPolicy0CACRL",
      "requireExplicitPolicy0subCACRL", "requireExplicitPolicy0subsubCACRL",
      "requireExplicitPolicy0subsubsubCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.9.4";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.9.5 Invalid RequireExplicitPolicy Test5
WRAPPED_TYPED_TEST_P(PkitsTest09RequireExplicitPolicy,
                     Section9InvalidRequireExplicitPolicyTest5) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "requireExplicitPolicy7CACert",
                               "requireExplicitPolicy7subCARE2Cert",
                               "requireExplicitPolicy7subsubCARE2RE4Cert",
                               "requireExplicitPolicy7subsubsubCARE2RE4Cert",
                               "InvalidrequireExplicitPolicyTest5EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "requireExplicitPolicy7CACRL",
                              "requireExplicitPolicy7subCARE2CRL",
                              "requireExplicitPolicy7subsubCARE2RE4CRL",
                              "requireExplicitPolicy7subsubsubCARE2RE4CRL"};
  PkitsTestInfo info;
  info.test_number = "4.9.5";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.9.6 Valid Self-Issued requireExplicitPolicy Test6
WRAPPED_TYPED_TEST_P(PkitsTest09RequireExplicitPolicy,
                     Section9ValidSelfIssuedrequireExplicitPolicyTest6) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "requireExplicitPolicy2CACert",
                               "requireExplicitPolicy2SelfIssuedCACert",
                               "ValidSelfIssuedrequireExplicitPolicyTest6EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "requireExplicitPolicy2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.9.6";
  info.should_validate = true;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.9.7 Invalid Self-Issued requireExplicitPolicy Test7
WRAPPED_TYPED_TEST_P(PkitsTest09RequireExplicitPolicy,
                     Section9InvalidSelfIssuedrequireExplicitPolicyTest7) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "requireExplicitPolicy2CACert",
                               "requireExplicitPolicy2SelfIssuedCACert",
                               "requireExplicitPolicy2subCACert",
                               "InvalidSelfIssuedrequireExplicitPolicyTest7EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "requireExplicitPolicy2CACRL",
                              "requireExplicitPolicy2subCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.9.7";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.9.8 Invalid Self-Issued requireExplicitPolicy Test8
WRAPPED_TYPED_TEST_P(PkitsTest09RequireExplicitPolicy,
                     Section9InvalidSelfIssuedrequireExplicitPolicyTest8) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "requireExplicitPolicy2CACert",
                               "requireExplicitPolicy2SelfIssuedCACert",
                               "requireExplicitPolicy2subCACert",
                               "requireExplicitPolicy2SelfIssuedsubCACert",
                               "InvalidSelfIssuedrequireExplicitPolicyTest8EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "requireExplicitPolicy2CACRL",
                              "requireExplicitPolicy2subCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.9.8";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

WRAPPED_REGISTER_TYPED_TEST_CASE_P(
    PkitsTest09RequireExplicitPolicy,
    Section9ValidRequireExplicitPolicyTest1,
    Section9ValidRequireExplicitPolicyTest2,
    Section9InvalidRequireExplicitPolicyTest3,
    Section9ValidRequireExplicitPolicyTest4,
    Section9InvalidRequireExplicitPolicyTest5,
    Section9ValidSelfIssuedrequireExplicitPolicyTest6,
    Section9InvalidSelfIssuedrequireExplicitPolicyTest7,
    Section9InvalidSelfIssuedrequireExplicitPolicyTest8);

template <typename PkitsTestDelegate>
class PkitsTest10PolicyMappings : public PkitsTest<PkitsTestDelegate> {};
TYPED_TEST_CASE_P(PkitsTest10PolicyMappings);

// 4.10.1 Valid Policy Mapping Test1 (Subpart 1)
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10ValidPolicyMappingTest1Subpart1) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "Mapping1to2CACert",
                               "ValidPolicyMappingTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "Mapping1to2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.1";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-1");

  this->RunTest(certs, crls, info);
}

// 4.10.1 Valid Policy Mapping Test1 (Subpart 2)
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10ValidPolicyMappingTest1Subpart2) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "Mapping1to2CACert",
                               "ValidPolicyMappingTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "Mapping1to2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.1";
  info.should_validate = false;
  info.SetInitialPolicySet("NIST-test-policy-2");
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.10.1 Valid Policy Mapping Test1 (Subpart 3)
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10ValidPolicyMappingTest1Subpart3) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "Mapping1to2CACert",
                               "ValidPolicyMappingTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "Mapping1to2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.1";
  info.should_validate = false;
  info.SetInitialPolicyMappingInhibit(true);
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.10.2 Invalid Policy Mapping Test2 (Subpart 1)
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10InvalidPolicyMappingTest2Subpart1) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "Mapping1to2CACert",
                               "InvalidPolicyMappingTest2EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "Mapping1to2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.2";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.10.2 Invalid Policy Mapping Test2 (Subpart 2)
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10InvalidPolicyMappingTest2Subpart2) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "Mapping1to2CACert",
                               "InvalidPolicyMappingTest2EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "Mapping1to2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.2";
  info.should_validate = false;
  info.SetInitialPolicyMappingInhibit(true);
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.10.3 Valid Policy Mapping Test3 (Subpart 1)
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10ValidPolicyMappingTest3Subpart1) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "P12Mapping1to3CACert",
      "P12Mapping1to3subCACert", "P12Mapping1to3subsubCACert",
      "ValidPolicyMappingTest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "P12Mapping1to3CACRL",
                              "P12Mapping1to3subCACRL",
                              "P12Mapping1to3subsubCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.3";
  info.should_validate = false;
  info.SetInitialPolicySet("NIST-test-policy-1");
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.10.3 Valid Policy Mapping Test3 (Subpart 2)
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10ValidPolicyMappingTest3Subpart2) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "P12Mapping1to3CACert",
      "P12Mapping1to3subCACert", "P12Mapping1to3subsubCACert",
      "ValidPolicyMappingTest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "P12Mapping1to3CACRL",
                              "P12Mapping1to3subCACRL",
                              "P12Mapping1to3subsubCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.3";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-2");
  info.SetUserConstrainedPolicySet("NIST-test-policy-2");

  this->RunTest(certs, crls, info);
}

// 4.10.4 Invalid Policy Mapping Test4
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10InvalidPolicyMappingTest4) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "P12Mapping1to3CACert",
      "P12Mapping1to3subCACert", "P12Mapping1to3subsubCACert",
      "InvalidPolicyMappingTest4EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "P12Mapping1to3CACRL",
                              "P12Mapping1to3subCACRL",
                              "P12Mapping1to3subsubCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.4";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.10.5 Valid Policy Mapping Test5 (Subpart 1)
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10ValidPolicyMappingTest5Subpart1) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "P1Mapping1to234CACert",
      "P1Mapping1to234subCACert", "ValidPolicyMappingTest5EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "P1Mapping1to234CACRL",
                              "P1Mapping1to234subCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.5";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-1");

  this->RunTest(certs, crls, info);
}

// 4.10.5 Valid Policy Mapping Test5 (Subpart 2)
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10ValidPolicyMappingTest5Subpart2) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "P1Mapping1to234CACert",
      "P1Mapping1to234subCACert", "ValidPolicyMappingTest5EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "P1Mapping1to234CACRL",
                              "P1Mapping1to234subCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.5";
  info.should_validate = false;
  info.SetInitialPolicySet("NIST-test-policy-6");
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.10.6 Valid Policy Mapping Test6 (Subpart 1)
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10ValidPolicyMappingTest6Subpart1) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "P1Mapping1to234CACert",
      "P1Mapping1to234subCACert", "ValidPolicyMappingTest6EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "P1Mapping1to234CACRL",
                              "P1Mapping1to234subCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.6";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-1");

  this->RunTest(certs, crls, info);
}

// 4.10.6 Valid Policy Mapping Test6 (Subpart 2)
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10ValidPolicyMappingTest6Subpart2) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "P1Mapping1to234CACert",
      "P1Mapping1to234subCACert", "ValidPolicyMappingTest6EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "P1Mapping1to234CACRL",
                              "P1Mapping1to234subCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.6";
  info.should_validate = false;
  info.SetInitialPolicySet("NIST-test-policy-6");
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.10.7 Invalid Mapping From anyPolicy Test7
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10InvalidMappingFromanyPolicyTest7) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "MappingFromanyPolicyCACert",
                               "InvalidMappingFromanyPolicyTest7EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "MappingFromanyPolicyCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.7";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.10.8 Invalid Mapping To anyPolicy Test8
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10InvalidMappingToanyPolicyTest8) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "MappingToanyPolicyCACert",
                               "InvalidMappingToanyPolicyTest8EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "MappingToanyPolicyCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.8";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.10.9 Valid Policy Mapping Test9
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10ValidPolicyMappingTest9) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "PanyPolicyMapping1to2CACert",
                               "ValidPolicyMappingTest9EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "PanyPolicyMapping1to2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.9";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.10.10 Invalid Policy Mapping Test10
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10InvalidPolicyMappingTest10) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "GoodsubCAPanyPolicyMapping1to2CACert",
                               "InvalidPolicyMappingTest10EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL",
                              "GoodsubCAPanyPolicyMapping1to2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.10";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.10.11 Valid Policy Mapping Test11
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10ValidPolicyMappingTest11) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "GoodCACert",
                               "GoodsubCAPanyPolicyMapping1to2CACert",
                               "ValidPolicyMappingTest11EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL",
                              "GoodsubCAPanyPolicyMapping1to2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.11";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.10.12 Valid Policy Mapping Test12 (Subpart 1)
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10ValidPolicyMappingTest12Subpart1) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "P12Mapping1to3CACert",
                               "ValidPolicyMappingTest12EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "P12Mapping1to3CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.12";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-1");

  this->RunTest(certs, crls, info);
}

// 4.10.12 Valid Policy Mapping Test12 (Subpart 2)
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10ValidPolicyMappingTest12Subpart2) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "P12Mapping1to3CACert",
                               "ValidPolicyMappingTest12EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "P12Mapping1to3CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.12";
  info.should_validate = true;
  info.SetInitialPolicySet("NIST-test-policy-2");
  info.SetUserConstrainedPolicySet("NIST-test-policy-2");

  this->RunTest(certs, crls, info);
}

// 4.10.13 Valid Policy Mapping Test13
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10ValidPolicyMappingTest13) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "P1anyPolicyMapping1to2CACert",
                               "ValidPolicyMappingTest13EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "P1anyPolicyMapping1to2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.13";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.10.14 Valid Policy Mapping Test14
WRAPPED_TYPED_TEST_P(PkitsTest10PolicyMappings,
                     Section10ValidPolicyMappingTest14) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "P1anyPolicyMapping1to2CACert",
                               "ValidPolicyMappingTest14EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "P1anyPolicyMapping1to2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.10.14";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

WRAPPED_REGISTER_TYPED_TEST_CASE_P(PkitsTest10PolicyMappings,
                                   Section10ValidPolicyMappingTest1Subpart1,
                                   Section10ValidPolicyMappingTest1Subpart2,
                                   Section10ValidPolicyMappingTest1Subpart3,
                                   Section10InvalidPolicyMappingTest2Subpart1,
                                   Section10InvalidPolicyMappingTest2Subpart2,
                                   Section10ValidPolicyMappingTest3Subpart1,
                                   Section10ValidPolicyMappingTest3Subpart2,
                                   Section10InvalidPolicyMappingTest4,
                                   Section10ValidPolicyMappingTest5Subpart1,
                                   Section10ValidPolicyMappingTest5Subpart2,
                                   Section10ValidPolicyMappingTest6Subpart1,
                                   Section10ValidPolicyMappingTest6Subpart2,
                                   Section10InvalidMappingFromanyPolicyTest7,
                                   Section10InvalidMappingToanyPolicyTest8,
                                   Section10ValidPolicyMappingTest9,
                                   Section10InvalidPolicyMappingTest10,
                                   Section10ValidPolicyMappingTest11,
                                   Section10ValidPolicyMappingTest12Subpart1,
                                   Section10ValidPolicyMappingTest12Subpart2,
                                   Section10ValidPolicyMappingTest13,
                                   Section10ValidPolicyMappingTest14);

template <typename PkitsTestDelegate>
class PkitsTest11InhibitPolicyMapping : public PkitsTest<PkitsTestDelegate> {};
TYPED_TEST_CASE_P(PkitsTest11InhibitPolicyMapping);

// 4.11.1 Invalid inhibitPolicyMapping Test1
WRAPPED_TYPED_TEST_P(PkitsTest11InhibitPolicyMapping,
                     Section11InvalidinhibitPolicyMappingTest1) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "inhibitPolicyMapping0CACert",
      "inhibitPolicyMapping0subCACert", "InvalidinhibitPolicyMappingTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "inhibitPolicyMapping0CACRL",
                              "inhibitPolicyMapping0subCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.11.1";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.11.2 Valid inhibitPolicyMapping Test2
WRAPPED_TYPED_TEST_P(PkitsTest11InhibitPolicyMapping,
                     Section11ValidinhibitPolicyMappingTest2) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "inhibitPolicyMapping1P12CACert",
      "inhibitPolicyMapping1P12subCACert", "ValidinhibitPolicyMappingTest2EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "inhibitPolicyMapping1P12CACRL",
                              "inhibitPolicyMapping1P12subCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.11.2";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.11.3 Invalid inhibitPolicyMapping Test3
WRAPPED_TYPED_TEST_P(PkitsTest11InhibitPolicyMapping,
                     Section11InvalidinhibitPolicyMappingTest3) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "inhibitPolicyMapping1P12CACert",
                               "inhibitPolicyMapping1P12subCACert",
                               "inhibitPolicyMapping1P12subsubCACert",
                               "InvalidinhibitPolicyMappingTest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "inhibitPolicyMapping1P12CACRL",
                              "inhibitPolicyMapping1P12subCACRL",
                              "inhibitPolicyMapping1P12subsubCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.11.3";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.11.4 Valid inhibitPolicyMapping Test4
WRAPPED_TYPED_TEST_P(PkitsTest11InhibitPolicyMapping,
                     Section11ValidinhibitPolicyMappingTest4) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "inhibitPolicyMapping1P12CACert",
                               "inhibitPolicyMapping1P12subCACert",
                               "inhibitPolicyMapping1P12subsubCACert",
                               "ValidinhibitPolicyMappingTest4EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "inhibitPolicyMapping1P12CACRL",
                              "inhibitPolicyMapping1P12subCACRL",
                              "inhibitPolicyMapping1P12subsubCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.11.4";
  info.should_validate = true;
  info.SetUserConstrainedPolicySet("NIST-test-policy-2");

  this->RunTest(certs, crls, info);
}

// 4.11.5 Invalid inhibitPolicyMapping Test5
WRAPPED_TYPED_TEST_P(PkitsTest11InhibitPolicyMapping,
                     Section11InvalidinhibitPolicyMappingTest5) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "inhibitPolicyMapping5CACert",
                               "inhibitPolicyMapping5subCACert",
                               "inhibitPolicyMapping5subsubCACert",
                               "inhibitPolicyMapping5subsubsubCACert",
                               "InvalidinhibitPolicyMappingTest5EE"};
  const char* const crls[] = {
      "TrustAnchorRootCRL", "inhibitPolicyMapping5CACRL",
      "inhibitPolicyMapping5subCACRL", "inhibitPolicyMapping5subsubCACRL",
      "inhibitPolicyMapping5subsubsubCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.11.5";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.11.6 Invalid inhibitPolicyMapping Test6
WRAPPED_TYPED_TEST_P(PkitsTest11InhibitPolicyMapping,
                     Section11InvalidinhibitPolicyMappingTest6) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "inhibitPolicyMapping1P12CACert",
                               "inhibitPolicyMapping1P12subCAIPM5Cert",
                               "inhibitPolicyMapping1P12subsubCAIPM5Cert",
                               "InvalidinhibitPolicyMappingTest6EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "inhibitPolicyMapping1P12CACRL",
                              "inhibitPolicyMapping1P12subCAIPM5CRL",
                              "inhibitPolicyMapping1P12subsubCAIPM5CRL"};
  PkitsTestInfo info;
  info.test_number = "4.11.6";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.11.7 Valid Self-Issued inhibitPolicyMapping Test7
WRAPPED_TYPED_TEST_P(PkitsTest11InhibitPolicyMapping,
                     Section11ValidSelfIssuedinhibitPolicyMappingTest7) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "inhibitPolicyMapping1P1CACert",
                               "inhibitPolicyMapping1P1SelfIssuedCACert",
                               "inhibitPolicyMapping1P1subCACert",
                               "ValidSelfIssuedinhibitPolicyMappingTest7EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "inhibitPolicyMapping1P1CACRL",
                              "inhibitPolicyMapping1P1subCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.11.7";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.11.8 Invalid Self-Issued inhibitPolicyMapping Test8
WRAPPED_TYPED_TEST_P(PkitsTest11InhibitPolicyMapping,
                     Section11InvalidSelfIssuedinhibitPolicyMappingTest8) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "inhibitPolicyMapping1P1CACert",
                               "inhibitPolicyMapping1P1SelfIssuedCACert",
                               "inhibitPolicyMapping1P1subCACert",
                               "inhibitPolicyMapping1P1subsubCACert",
                               "InvalidSelfIssuedinhibitPolicyMappingTest8EE"};
  const char* const crls[] = {
      "TrustAnchorRootCRL", "inhibitPolicyMapping1P1CACRL",
      "inhibitPolicyMapping1P1subCACRL", "inhibitPolicyMapping1P1subsubCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.11.8";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.11.9 Invalid Self-Issued inhibitPolicyMapping Test9
WRAPPED_TYPED_TEST_P(PkitsTest11InhibitPolicyMapping,
                     Section11InvalidSelfIssuedinhibitPolicyMappingTest9) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "inhibitPolicyMapping1P1CACert",
                               "inhibitPolicyMapping1P1SelfIssuedCACert",
                               "inhibitPolicyMapping1P1subCACert",
                               "inhibitPolicyMapping1P1subsubCACert",
                               "InvalidSelfIssuedinhibitPolicyMappingTest9EE"};
  const char* const crls[] = {
      "TrustAnchorRootCRL", "inhibitPolicyMapping1P1CACRL",
      "inhibitPolicyMapping1P1subCACRL", "inhibitPolicyMapping1P1subsubCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.11.9";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.11.10 Invalid Self-Issued inhibitPolicyMapping Test10
WRAPPED_TYPED_TEST_P(PkitsTest11InhibitPolicyMapping,
                     Section11InvalidSelfIssuedinhibitPolicyMappingTest10) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "inhibitPolicyMapping1P1CACert",
                               "inhibitPolicyMapping1P1SelfIssuedCACert",
                               "inhibitPolicyMapping1P1subCACert",
                               "inhibitPolicyMapping1P1SelfIssuedsubCACert",
                               "InvalidSelfIssuedinhibitPolicyMappingTest10EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "inhibitPolicyMapping1P1CACRL",
                              "inhibitPolicyMapping1P1subCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.11.10";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.11.11 Invalid Self-Issued inhibitPolicyMapping Test11
WRAPPED_TYPED_TEST_P(PkitsTest11InhibitPolicyMapping,
                     Section11InvalidSelfIssuedinhibitPolicyMappingTest11) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "inhibitPolicyMapping1P1CACert",
                               "inhibitPolicyMapping1P1SelfIssuedCACert",
                               "inhibitPolicyMapping1P1subCACert",
                               "inhibitPolicyMapping1P1SelfIssuedsubCACert",
                               "InvalidSelfIssuedinhibitPolicyMappingTest11EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "inhibitPolicyMapping1P1CACRL",
                              "inhibitPolicyMapping1P1subCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.11.11";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

WRAPPED_REGISTER_TYPED_TEST_CASE_P(
    PkitsTest11InhibitPolicyMapping,
    Section11InvalidinhibitPolicyMappingTest1,
    Section11ValidinhibitPolicyMappingTest2,
    Section11InvalidinhibitPolicyMappingTest3,
    Section11ValidinhibitPolicyMappingTest4,
    Section11InvalidinhibitPolicyMappingTest5,
    Section11InvalidinhibitPolicyMappingTest6,
    Section11ValidSelfIssuedinhibitPolicyMappingTest7,
    Section11InvalidSelfIssuedinhibitPolicyMappingTest8,
    Section11InvalidSelfIssuedinhibitPolicyMappingTest9,
    Section11InvalidSelfIssuedinhibitPolicyMappingTest10,
    Section11InvalidSelfIssuedinhibitPolicyMappingTest11);

template <typename PkitsTestDelegate>
class PkitsTest12InhibitAnyPolicy : public PkitsTest<PkitsTestDelegate> {};
TYPED_TEST_CASE_P(PkitsTest12InhibitAnyPolicy);

// 4.12.1 Invalid inhibitAnyPolicy Test1
WRAPPED_TYPED_TEST_P(PkitsTest12InhibitAnyPolicy,
                     Section12InvalidinhibitAnyPolicyTest1) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "inhibitAnyPolicy0CACert",
                               "InvalidinhibitAnyPolicyTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "inhibitAnyPolicy0CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.12.1";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.12.2 Valid inhibitAnyPolicy Test2
WRAPPED_TYPED_TEST_P(PkitsTest12InhibitAnyPolicy,
                     Section12ValidinhibitAnyPolicyTest2) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "inhibitAnyPolicy0CACert",
                               "ValidinhibitAnyPolicyTest2EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "inhibitAnyPolicy0CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.12.2";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.12.3 inhibitAnyPolicy Test3 (Subpart 1)
WRAPPED_TYPED_TEST_P(PkitsTest12InhibitAnyPolicy,
                     Section12inhibitAnyPolicyTest3Subpart1) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "inhibitAnyPolicy1CACert",
      "inhibitAnyPolicy1subCA1Cert", "inhibitAnyPolicyTest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "inhibitAnyPolicy1CACRL",
                              "inhibitAnyPolicy1subCA1CRL"};
  PkitsTestInfo info;
  info.test_number = "4.12.3";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.12.3 inhibitAnyPolicy Test3 (Subpart 2)
WRAPPED_TYPED_TEST_P(PkitsTest12InhibitAnyPolicy,
                     Section12inhibitAnyPolicyTest3Subpart2) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "inhibitAnyPolicy1CACert",
      "inhibitAnyPolicy1subCA1Cert", "inhibitAnyPolicyTest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "inhibitAnyPolicy1CACRL",
                              "inhibitAnyPolicy1subCA1CRL"};
  PkitsTestInfo info;
  info.test_number = "4.12.3";
  info.should_validate = false;
  info.SetInitialInhibitAnyPolicy(true);
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.12.4 Invalid inhibitAnyPolicy Test4
WRAPPED_TYPED_TEST_P(PkitsTest12InhibitAnyPolicy,
                     Section12InvalidinhibitAnyPolicyTest4) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "inhibitAnyPolicy1CACert",
      "inhibitAnyPolicy1subCA1Cert", "InvalidinhibitAnyPolicyTest4EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "inhibitAnyPolicy1CACRL",
                              "inhibitAnyPolicy1subCA1CRL"};
  PkitsTestInfo info;
  info.test_number = "4.12.4";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.12.5 Invalid inhibitAnyPolicy Test5
WRAPPED_TYPED_TEST_P(PkitsTest12InhibitAnyPolicy,
                     Section12InvalidinhibitAnyPolicyTest5) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "inhibitAnyPolicy5CACert",
      "inhibitAnyPolicy5subCACert", "inhibitAnyPolicy5subsubCACert",
      "InvalidinhibitAnyPolicyTest5EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "inhibitAnyPolicy5CACRL",
                              "inhibitAnyPolicy5subCACRL",
                              "inhibitAnyPolicy5subsubCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.12.5";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.12.6 Invalid inhibitAnyPolicy Test6
WRAPPED_TYPED_TEST_P(PkitsTest12InhibitAnyPolicy,
                     Section12InvalidinhibitAnyPolicyTest6) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "inhibitAnyPolicy1CACert",
      "inhibitAnyPolicy1subCAIAP5Cert", "InvalidinhibitAnyPolicyTest6EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "inhibitAnyPolicy1CACRL",
                              "inhibitAnyPolicy1subCAIAP5CRL"};
  PkitsTestInfo info;
  info.test_number = "4.12.6";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.12.7 Valid Self-Issued inhibitAnyPolicy Test7
WRAPPED_TYPED_TEST_P(PkitsTest12InhibitAnyPolicy,
                     Section12ValidSelfIssuedinhibitAnyPolicyTest7) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "inhibitAnyPolicy1CACert",
      "inhibitAnyPolicy1SelfIssuedCACert", "inhibitAnyPolicy1subCA2Cert",
      "ValidSelfIssuedinhibitAnyPolicyTest7EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "inhibitAnyPolicy1CACRL",
                              "inhibitAnyPolicy1subCA2CRL"};
  PkitsTestInfo info;
  info.test_number = "4.12.7";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.12.8 Invalid Self-Issued inhibitAnyPolicy Test8
WRAPPED_TYPED_TEST_P(PkitsTest12InhibitAnyPolicy,
                     Section12InvalidSelfIssuedinhibitAnyPolicyTest8) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "inhibitAnyPolicy1CACert",
                               "inhibitAnyPolicy1SelfIssuedCACert",
                               "inhibitAnyPolicy1subCA2Cert",
                               "inhibitAnyPolicy1subsubCA2Cert",
                               "InvalidSelfIssuedinhibitAnyPolicyTest8EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "inhibitAnyPolicy1CACRL",
                              "inhibitAnyPolicy1subCA2CRL",
                              "inhibitAnyPolicy1subsubCA2CRL"};
  PkitsTestInfo info;
  info.test_number = "4.12.8";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

// 4.12.9 Valid Self-Issued inhibitAnyPolicy Test9
WRAPPED_TYPED_TEST_P(PkitsTest12InhibitAnyPolicy,
                     Section12ValidSelfIssuedinhibitAnyPolicyTest9) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "inhibitAnyPolicy1CACert",
                               "inhibitAnyPolicy1SelfIssuedCACert",
                               "inhibitAnyPolicy1subCA2Cert",
                               "inhibitAnyPolicy1SelfIssuedsubCA2Cert",
                               "ValidSelfIssuedinhibitAnyPolicyTest9EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "inhibitAnyPolicy1CACRL",
                              "inhibitAnyPolicy1subCA2CRL"};
  PkitsTestInfo info;
  info.test_number = "4.12.9";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.12.10 Invalid Self-Issued inhibitAnyPolicy Test10
WRAPPED_TYPED_TEST_P(PkitsTest12InhibitAnyPolicy,
                     Section12InvalidSelfIssuedinhibitAnyPolicyTest10) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "inhibitAnyPolicy1CACert",
      "inhibitAnyPolicy1SelfIssuedCACert", "inhibitAnyPolicy1subCA2Cert",
      "InvalidSelfIssuedinhibitAnyPolicyTest10EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "inhibitAnyPolicy1CACRL",
                              "inhibitAnyPolicy1subCA2CRL"};
  PkitsTestInfo info;
  info.test_number = "4.12.10";
  info.should_validate = false;
  info.SetUserConstrainedPolicySet("");

  this->RunTest(certs, crls, info);
}

WRAPPED_REGISTER_TYPED_TEST_CASE_P(
    PkitsTest12InhibitAnyPolicy,
    Section12InvalidinhibitAnyPolicyTest1,
    Section12ValidinhibitAnyPolicyTest2,
    Section12inhibitAnyPolicyTest3Subpart1,
    Section12inhibitAnyPolicyTest3Subpart2,
    Section12InvalidinhibitAnyPolicyTest4,
    Section12InvalidinhibitAnyPolicyTest5,
    Section12InvalidinhibitAnyPolicyTest6,
    Section12ValidSelfIssuedinhibitAnyPolicyTest7,
    Section12InvalidSelfIssuedinhibitAnyPolicyTest8,
    Section12ValidSelfIssuedinhibitAnyPolicyTest9,
    Section12InvalidSelfIssuedinhibitAnyPolicyTest10);

template <typename PkitsTestDelegate>
class PkitsTest13NameConstraints : public PkitsTest<PkitsTestDelegate> {};
TYPED_TEST_CASE_P(PkitsTest13NameConstraints);

// 4.13.1 Valid DN nameConstraints Test1
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13ValidDNnameConstraintsTest1) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDN1CACert",
                               "ValidDNnameConstraintsTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN1CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.1";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.13.2 Invalid DN nameConstraints Test2
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidDNnameConstraintsTest2) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDN1CACert",
                               "InvalidDNnameConstraintsTest2EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN1CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.2";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.3 Invalid DN nameConstraints Test3
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidDNnameConstraintsTest3) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDN1CACert",
                               "InvalidDNnameConstraintsTest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN1CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.3";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.4 Valid DN nameConstraints Test4
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13ValidDNnameConstraintsTest4) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDN1CACert",
                               "ValidDNnameConstraintsTest4EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN1CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.4";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.13.5 Valid DN nameConstraints Test5
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13ValidDNnameConstraintsTest5) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDN2CACert",
                               "ValidDNnameConstraintsTest5EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.5";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.13.6 Valid DN nameConstraints Test6
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13ValidDNnameConstraintsTest6) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDN3CACert",
                               "ValidDNnameConstraintsTest6EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN3CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.6";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.13.7 Invalid DN nameConstraints Test7
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidDNnameConstraintsTest7) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDN3CACert",
                               "InvalidDNnameConstraintsTest7EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN3CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.7";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.8 Invalid DN nameConstraints Test8
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidDNnameConstraintsTest8) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDN4CACert",
                               "InvalidDNnameConstraintsTest8EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN4CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.8";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.9 Invalid DN nameConstraints Test9
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidDNnameConstraintsTest9) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDN4CACert",
                               "InvalidDNnameConstraintsTest9EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN4CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.9";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.10 Invalid DN nameConstraints Test10
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidDNnameConstraintsTest10) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDN5CACert",
                               "InvalidDNnameConstraintsTest10EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN5CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.10";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.11 Valid DN nameConstraints Test11
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13ValidDNnameConstraintsTest11) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDN5CACert",
                               "ValidDNnameConstraintsTest11EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN5CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.11";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.13.12 Invalid DN nameConstraints Test12
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidDNnameConstraintsTest12) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "nameConstraintsDN1CACert",
      "nameConstraintsDN1subCA1Cert", "InvalidDNnameConstraintsTest12EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN1CACRL",
                              "nameConstraintsDN1subCA1CRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.12";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.13 Invalid DN nameConstraints Test13
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidDNnameConstraintsTest13) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "nameConstraintsDN1CACert",
      "nameConstraintsDN1subCA2Cert", "InvalidDNnameConstraintsTest13EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN1CACRL",
                              "nameConstraintsDN1subCA2CRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.13";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.14 Valid DN nameConstraints Test14
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13ValidDNnameConstraintsTest14) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "nameConstraintsDN1CACert",
      "nameConstraintsDN1subCA2Cert", "ValidDNnameConstraintsTest14EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN1CACRL",
                              "nameConstraintsDN1subCA2CRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.14";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.13.15 Invalid DN nameConstraints Test15
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidDNnameConstraintsTest15) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "nameConstraintsDN3CACert",
      "nameConstraintsDN3subCA1Cert", "InvalidDNnameConstraintsTest15EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN3CACRL",
                              "nameConstraintsDN3subCA1CRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.15";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.16 Invalid DN nameConstraints Test16
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidDNnameConstraintsTest16) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "nameConstraintsDN3CACert",
      "nameConstraintsDN3subCA1Cert", "InvalidDNnameConstraintsTest16EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN3CACRL",
                              "nameConstraintsDN3subCA1CRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.16";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.17 Invalid DN nameConstraints Test17
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidDNnameConstraintsTest17) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "nameConstraintsDN3CACert",
      "nameConstraintsDN3subCA2Cert", "InvalidDNnameConstraintsTest17EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN3CACRL",
                              "nameConstraintsDN3subCA2CRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.17";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.18 Valid DN nameConstraints Test18
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13ValidDNnameConstraintsTest18) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "nameConstraintsDN3CACert",
      "nameConstraintsDN3subCA2Cert", "ValidDNnameConstraintsTest18EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN3CACRL",
                              "nameConstraintsDN3subCA2CRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.18";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.13.19 Valid Self-Issued DN nameConstraints Test19
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13ValidSelfIssuedDNnameConstraintsTest19) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "nameConstraintsDN1CACert",
      "nameConstraintsDN1SelfIssuedCACert", "ValidDNnameConstraintsTest19EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN1CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.19";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.13.20 Invalid Self-Issued DN nameConstraints Test20
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidSelfIssuedDNnameConstraintsTest20) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDN1CACert",
                               "InvalidDNnameConstraintsTest20EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN1CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.20";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.21 Valid RFC822 nameConstraints Test21
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13ValidRFC822nameConstraintsTest21) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsRFC822CA1Cert",
                               "ValidRFC822nameConstraintsTest21EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "nameConstraintsRFC822CA1CRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.21";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.13.22 Invalid RFC822 nameConstraints Test22
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidRFC822nameConstraintsTest22) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsRFC822CA1Cert",
                               "InvalidRFC822nameConstraintsTest22EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "nameConstraintsRFC822CA1CRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.22";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.23 Valid RFC822 nameConstraints Test23
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13ValidRFC822nameConstraintsTest23) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsRFC822CA2Cert",
                               "ValidRFC822nameConstraintsTest23EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "nameConstraintsRFC822CA2CRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.23";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.13.24 Invalid RFC822 nameConstraints Test24
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidRFC822nameConstraintsTest24) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsRFC822CA2Cert",
                               "InvalidRFC822nameConstraintsTest24EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "nameConstraintsRFC822CA2CRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.24";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.25 Valid RFC822 nameConstraints Test25
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13ValidRFC822nameConstraintsTest25) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsRFC822CA3Cert",
                               "ValidRFC822nameConstraintsTest25EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "nameConstraintsRFC822CA3CRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.25";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.13.26 Invalid RFC822 nameConstraints Test26
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidRFC822nameConstraintsTest26) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsRFC822CA3Cert",
                               "InvalidRFC822nameConstraintsTest26EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "nameConstraintsRFC822CA3CRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.26";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.27 Valid DN and RFC822 nameConstraints Test27
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13ValidDNandRFC822nameConstraintsTest27) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDN1CACert",
                               "nameConstraintsDN1subCA3Cert",
                               "ValidDNandRFC822nameConstraintsTest27EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN1CACRL",
                              "nameConstraintsDN1subCA3CRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.27";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.13.28 Invalid DN and RFC822 nameConstraints Test28
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidDNandRFC822nameConstraintsTest28) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDN1CACert",
                               "nameConstraintsDN1subCA3Cert",
                               "InvalidDNandRFC822nameConstraintsTest28EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN1CACRL",
                              "nameConstraintsDN1subCA3CRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.28";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.29 Invalid DN and RFC822 nameConstraints Test29
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidDNandRFC822nameConstraintsTest29) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDN1CACert",
                               "nameConstraintsDN1subCA3Cert",
                               "InvalidDNandRFC822nameConstraintsTest29EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDN1CACRL",
                              "nameConstraintsDN1subCA3CRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.29";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.30 Valid DNS nameConstraints Test30
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13ValidDNSnameConstraintsTest30) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDNS1CACert",
                               "ValidDNSnameConstraintsTest30EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDNS1CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.30";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.13.31 Invalid DNS nameConstraints Test31
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidDNSnameConstraintsTest31) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDNS1CACert",
                               "InvalidDNSnameConstraintsTest31EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDNS1CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.31";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.32 Valid DNS nameConstraints Test32
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13ValidDNSnameConstraintsTest32) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDNS2CACert",
                               "ValidDNSnameConstraintsTest32EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDNS2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.32";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.13.33 Invalid DNS nameConstraints Test33
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidDNSnameConstraintsTest33) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDNS2CACert",
                               "InvalidDNSnameConstraintsTest33EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDNS2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.33";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.34 Valid URI nameConstraints Test34
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13ValidURInameConstraintsTest34) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsURI1CACert",
                               "ValidURInameConstraintsTest34EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsURI1CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.34";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.13.35 Invalid URI nameConstraints Test35
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidURInameConstraintsTest35) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsURI1CACert",
                               "InvalidURInameConstraintsTest35EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsURI1CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.35";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.36 Valid URI nameConstraints Test36
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13ValidURInameConstraintsTest36) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsURI2CACert",
                               "ValidURInameConstraintsTest36EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsURI2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.36";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.13.37 Invalid URI nameConstraints Test37
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidURInameConstraintsTest37) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsURI2CACert",
                               "InvalidURInameConstraintsTest37EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsURI2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.37";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.13.38 Invalid DNS nameConstraints Test38
WRAPPED_TYPED_TEST_P(PkitsTest13NameConstraints,
                     Section13InvalidDNSnameConstraintsTest38) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "nameConstraintsDNS1CACert",
                               "InvalidDNSnameConstraintsTest38EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "nameConstraintsDNS1CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.13.38";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

WRAPPED_REGISTER_TYPED_TEST_CASE_P(
    PkitsTest13NameConstraints,
    Section13ValidDNnameConstraintsTest1,
    Section13InvalidDNnameConstraintsTest2,
    Section13InvalidDNnameConstraintsTest3,
    Section13ValidDNnameConstraintsTest4,
    Section13ValidDNnameConstraintsTest5,
    Section13ValidDNnameConstraintsTest6,
    Section13InvalidDNnameConstraintsTest7,
    Section13InvalidDNnameConstraintsTest8,
    Section13InvalidDNnameConstraintsTest9,
    Section13InvalidDNnameConstraintsTest10,
    Section13ValidDNnameConstraintsTest11,
    Section13InvalidDNnameConstraintsTest12,
    Section13InvalidDNnameConstraintsTest13,
    Section13ValidDNnameConstraintsTest14,
    Section13InvalidDNnameConstraintsTest15,
    Section13InvalidDNnameConstraintsTest16,
    Section13InvalidDNnameConstraintsTest17,
    Section13ValidDNnameConstraintsTest18,
    Section13ValidSelfIssuedDNnameConstraintsTest19,
    Section13InvalidSelfIssuedDNnameConstraintsTest20,
    Section13ValidRFC822nameConstraintsTest21,
    Section13InvalidRFC822nameConstraintsTest22,
    Section13ValidRFC822nameConstraintsTest23,
    Section13InvalidRFC822nameConstraintsTest24,
    Section13ValidRFC822nameConstraintsTest25,
    Section13InvalidRFC822nameConstraintsTest26,
    Section13ValidDNandRFC822nameConstraintsTest27,
    Section13InvalidDNandRFC822nameConstraintsTest28,
    Section13InvalidDNandRFC822nameConstraintsTest29,
    Section13ValidDNSnameConstraintsTest30,
    Section13InvalidDNSnameConstraintsTest31,
    Section13ValidDNSnameConstraintsTest32,
    Section13InvalidDNSnameConstraintsTest33,
    Section13ValidURInameConstraintsTest34,
    Section13InvalidURInameConstraintsTest35,
    Section13ValidURInameConstraintsTest36,
    Section13InvalidURInameConstraintsTest37,
    Section13InvalidDNSnameConstraintsTest38);


GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(PkitsTest14DistributionPoints);
template <typename PkitsTestDelegate>
class PkitsTest14DistributionPoints : public PkitsTest<PkitsTestDelegate> {};
TYPED_TEST_CASE_P(PkitsTest14DistributionPoints);

// 4.14.1 Valid distributionPoint Test1
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14ValiddistributionPointTest1) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "distributionPoint1CACert",
                               "ValiddistributionPointTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "distributionPoint1CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.1";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.14.2 Invalid distributionPoint Test2
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvaliddistributionPointTest2) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "distributionPoint1CACert",
                               "InvaliddistributionPointTest2EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "distributionPoint1CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.2";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.3 Invalid distributionPoint Test3
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvaliddistributionPointTest3) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "distributionPoint1CACert",
                               "InvaliddistributionPointTest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "distributionPoint1CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.3";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.4 Valid distributionPoint Test4
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14ValiddistributionPointTest4) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "distributionPoint1CACert",
                               "ValiddistributionPointTest4EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "distributionPoint1CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.4";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.14.5 Valid distributionPoint Test5
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14ValiddistributionPointTest5) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "distributionPoint2CACert",
                               "ValiddistributionPointTest5EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "distributionPoint2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.5";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.14.6 Invalid distributionPoint Test6
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvaliddistributionPointTest6) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "distributionPoint2CACert",
                               "InvaliddistributionPointTest6EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "distributionPoint2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.6";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.7 Valid distributionPoint Test7
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14ValiddistributionPointTest7) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "distributionPoint2CACert",
                               "ValiddistributionPointTest7EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "distributionPoint2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.7";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.14.8 Invalid distributionPoint Test8
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvaliddistributionPointTest8) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "distributionPoint2CACert",
                               "InvaliddistributionPointTest8EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "distributionPoint2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.8";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.9 Invalid distributionPoint Test9
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvaliddistributionPointTest9) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "distributionPoint2CACert",
                               "InvaliddistributionPointTest9EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "distributionPoint2CACRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.9";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.10 Valid No issuingDistributionPoint Test10
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14ValidNoissuingDistributionPointTest10) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "NoissuingDistributionPointCACert",
                               "ValidNoissuingDistributionPointTest10EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "NoissuingDistributionPointCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.10";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.14.11 Invalid onlyContainsUserCerts CRL Test11
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvalidonlyContainsUserCertsCRLTest11) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "onlyContainsUserCertsCACert",
                               "InvalidonlyContainsUserCertsTest11EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "onlyContainsUserCertsCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.11";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.12 Invalid onlyContainsCACerts CRL Test12
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvalidonlyContainsCACertsCRLTest12) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "onlyContainsCACertsCACert",
                               "InvalidonlyContainsCACertsTest12EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "onlyContainsCACertsCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.12";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.13 Valid onlyContainsCACerts CRL Test13
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14ValidonlyContainsCACertsCRLTest13) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "onlyContainsCACertsCACert",
                               "ValidonlyContainsCACertsTest13EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "onlyContainsCACertsCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.13";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.14.14 Invalid onlyContainsAttributeCerts Test14
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvalidonlyContainsAttributeCertsTest14) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "onlyContainsAttributeCertsCACert",
                               "InvalidonlyContainsAttributeCertsTest14EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "onlyContainsAttributeCertsCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.14";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.15 Invalid onlySomeReasons Test15
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvalidonlySomeReasonsTest15) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "onlySomeReasonsCA1Cert",
                               "InvalidonlySomeReasonsTest15EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "onlySomeReasonsCA1compromiseCRL",
                              "onlySomeReasonsCA1otherreasonsCRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.15";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.16 Invalid onlySomeReasons Test16
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvalidonlySomeReasonsTest16) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "onlySomeReasonsCA1Cert",
                               "InvalidonlySomeReasonsTest16EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "onlySomeReasonsCA1compromiseCRL",
                              "onlySomeReasonsCA1otherreasonsCRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.16";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.17 Invalid onlySomeReasons Test17
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvalidonlySomeReasonsTest17) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "onlySomeReasonsCA2Cert",
                               "InvalidonlySomeReasonsTest17EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "onlySomeReasonsCA2CRL1",
                              "onlySomeReasonsCA2CRL2"};
  PkitsTestInfo info;
  info.test_number = "4.14.17";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.18 Valid onlySomeReasons Test18
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14ValidonlySomeReasonsTest18) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "onlySomeReasonsCA3Cert",
                               "ValidonlySomeReasonsTest18EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "onlySomeReasonsCA3compromiseCRL",
                              "onlySomeReasonsCA3otherreasonsCRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.18";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.14.19 Valid onlySomeReasons Test19
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14ValidonlySomeReasonsTest19) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "onlySomeReasonsCA4Cert",
                               "ValidonlySomeReasonsTest19EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "onlySomeReasonsCA4compromiseCRL",
                              "onlySomeReasonsCA4otherreasonsCRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.19";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.14.20 Invalid onlySomeReasons Test20
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvalidonlySomeReasonsTest20) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "onlySomeReasonsCA4Cert",
                               "InvalidonlySomeReasonsTest20EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "onlySomeReasonsCA4compromiseCRL",
                              "onlySomeReasonsCA4otherreasonsCRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.20";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.21 Invalid onlySomeReasons Test21
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvalidonlySomeReasonsTest21) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "onlySomeReasonsCA4Cert",
                               "InvalidonlySomeReasonsTest21EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "onlySomeReasonsCA4compromiseCRL",
                              "onlySomeReasonsCA4otherreasonsCRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.21";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.22 Valid IDP with indirectCRL Test22
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14ValidIDPwithindirectCRLTest22) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "indirectCRLCA1Cert",
                               "ValidIDPwithindirectCRLTest22EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "indirectCRLCA1CRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.22";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.14.23 Invalid IDP with indirectCRL Test23
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvalidIDPwithindirectCRLTest23) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "indirectCRLCA1Cert",
                               "InvalidIDPwithindirectCRLTest23EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "indirectCRLCA1CRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.23";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.24 Valid IDP with indirectCRL Test24
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14ValidIDPwithindirectCRLTest24) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "indirectCRLCA2Cert", "indirectCRLCA1Cert",
                               "ValidIDPwithindirectCRLTest24EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "indirectCRLCA1CRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.24";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.14.25 Valid IDP with indirectCRL Test25
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14ValidIDPwithindirectCRLTest25) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "indirectCRLCA2Cert", "indirectCRLCA1Cert",
                               "ValidIDPwithindirectCRLTest25EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "indirectCRLCA1CRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.25";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.14.26 Invalid IDP with indirectCRL Test26
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvalidIDPwithindirectCRLTest26) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "indirectCRLCA2Cert", "indirectCRLCA1Cert",
                               "InvalidIDPwithindirectCRLTest26EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "indirectCRLCA1CRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.26";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.27 Invalid cRLIssuer Test27
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvalidcRLIssuerTest27) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "indirectCRLCA2Cert", "GoodCACert",
                               "InvalidcRLIssuerTest27EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "GoodCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.27";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.28 Valid cRLIssuer Test28
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14ValidcRLIssuerTest28) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "indirectCRLCA3Cert",
      "indirectCRLCA3cRLIssuerCert", "ValidcRLIssuerTest28EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "indirectCRLCA3CRL",
                              "indirectCRLCA3cRLIssuerCRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.28";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.14.29 Valid cRLIssuer Test29
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14ValidcRLIssuerTest29) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "indirectCRLCA3Cert",
      "indirectCRLCA3cRLIssuerCert", "ValidcRLIssuerTest29EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "indirectCRLCA3CRL",
                              "indirectCRLCA3cRLIssuerCRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.29";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.14.30 Valid cRLIssuer Test30
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14ValidcRLIssuerTest30) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate", "indirectCRLCA4Cert",
      "indirectCRLCA4cRLIssuerCert", "ValidcRLIssuerTest30EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "indirectCRLCA4cRLIssuerCRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.30";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.14.31 Invalid cRLIssuer Test31
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvalidcRLIssuerTest31) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "indirectCRLCA5Cert", "indirectCRLCA6Cert",
                               "InvalidcRLIssuerTest31EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "indirectCRLCA5CRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.31";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.32 Invalid cRLIssuer Test32
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvalidcRLIssuerTest32) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "indirectCRLCA5Cert", "indirectCRLCA6Cert",
                               "InvalidcRLIssuerTest32EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "indirectCRLCA5CRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.32";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.33 Valid cRLIssuer Test33
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14ValidcRLIssuerTest33) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "indirectCRLCA5Cert", "indirectCRLCA6Cert",
                               "ValidcRLIssuerTest33EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "indirectCRLCA5CRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.33";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.14.34 Invalid cRLIssuer Test34
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvalidcRLIssuerTest34) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "indirectCRLCA5Cert",
                               "InvalidcRLIssuerTest34EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "indirectCRLCA5CRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.34";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.14.35 Invalid cRLIssuer Test35
WRAPPED_TYPED_TEST_P(PkitsTest14DistributionPoints,
                     Section14InvalidcRLIssuerTest35) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "indirectCRLCA5Cert",
                               "InvalidcRLIssuerTest35EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "indirectCRLCA5CRL"};
  PkitsTestInfo info;
  info.test_number = "4.14.35";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

WRAPPED_REGISTER_TYPED_TEST_CASE_P(
    PkitsTest14DistributionPoints,
    Section14ValiddistributionPointTest1,
    Section14InvaliddistributionPointTest2,
    Section14InvaliddistributionPointTest3,
    Section14ValiddistributionPointTest4,
    Section14ValiddistributionPointTest5,
    Section14InvaliddistributionPointTest6,
    Section14ValiddistributionPointTest7,
    Section14InvaliddistributionPointTest8,
    Section14InvaliddistributionPointTest9,
    Section14ValidNoissuingDistributionPointTest10,
    Section14InvalidonlyContainsUserCertsCRLTest11,
    Section14InvalidonlyContainsCACertsCRLTest12,
    Section14ValidonlyContainsCACertsCRLTest13,
    Section14InvalidonlyContainsAttributeCertsTest14,
    Section14InvalidonlySomeReasonsTest15,
    Section14InvalidonlySomeReasonsTest16,
    Section14InvalidonlySomeReasonsTest17,
    Section14ValidonlySomeReasonsTest18,
    Section14ValidonlySomeReasonsTest19,
    Section14InvalidonlySomeReasonsTest20,
    Section14InvalidonlySomeReasonsTest21,
    Section14ValidIDPwithindirectCRLTest22,
    Section14InvalidIDPwithindirectCRLTest23,
    Section14ValidIDPwithindirectCRLTest24,
    Section14ValidIDPwithindirectCRLTest25,
    Section14InvalidIDPwithindirectCRLTest26,
    Section14InvalidcRLIssuerTest27,
    Section14ValidcRLIssuerTest28,
    Section14ValidcRLIssuerTest29,
    Section14ValidcRLIssuerTest30,
    Section14InvalidcRLIssuerTest31,
    Section14InvalidcRLIssuerTest32,
    Section14ValidcRLIssuerTest33,
    Section14InvalidcRLIssuerTest34,
    Section14InvalidcRLIssuerTest35);

GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(PkitsTest15DeltaCRLs);
template <typename PkitsTestDelegate>
class PkitsTest15DeltaCRLs : public PkitsTest<PkitsTestDelegate> {};
TYPED_TEST_CASE_P(PkitsTest15DeltaCRLs);

// 4.15.1 Invalid deltaCRLIndicator No Base Test1
WRAPPED_TYPED_TEST_P(PkitsTest15DeltaCRLs,
                     Section15InvaliddeltaCRLIndicatorNoBaseTest1) {
  const char* const certs[] = {"TrustAnchorRootCertificate",
                               "deltaCRLIndicatorNoBaseCACert",
                               "InvaliddeltaCRLIndicatorNoBaseTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL",
                              "deltaCRLIndicatorNoBaseCACRL"};
  PkitsTestInfo info;
  info.test_number = "4.15.1";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.15.2 Valid delta-CRL Test2
WRAPPED_TYPED_TEST_P(PkitsTest15DeltaCRLs, Section15ValiddeltaCRLTest2) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "deltaCRLCA1Cert",
                               "ValiddeltaCRLTest2EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "deltaCRLCA1CRL",
                              "deltaCRLCA1deltaCRL"};
  PkitsTestInfo info;
  info.test_number = "4.15.2";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.15.3 Invalid delta-CRL Test3
WRAPPED_TYPED_TEST_P(PkitsTest15DeltaCRLs, Section15InvaliddeltaCRLTest3) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "deltaCRLCA1Cert",
                               "InvaliddeltaCRLTest3EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "deltaCRLCA1CRL",
                              "deltaCRLCA1deltaCRL"};
  PkitsTestInfo info;
  info.test_number = "4.15.3";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.15.4 Invalid delta-CRL Test4
WRAPPED_TYPED_TEST_P(PkitsTest15DeltaCRLs, Section15InvaliddeltaCRLTest4) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "deltaCRLCA1Cert",
                               "InvaliddeltaCRLTest4EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "deltaCRLCA1CRL",
                              "deltaCRLCA1deltaCRL"};
  PkitsTestInfo info;
  info.test_number = "4.15.4";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.15.5 Valid delta-CRL Test5
WRAPPED_TYPED_TEST_P(PkitsTest15DeltaCRLs, Section15ValiddeltaCRLTest5) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "deltaCRLCA1Cert",
                               "ValiddeltaCRLTest5EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "deltaCRLCA1CRL",
                              "deltaCRLCA1deltaCRL"};
  PkitsTestInfo info;
  info.test_number = "4.15.5";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.15.6 Invalid delta-CRL Test6
WRAPPED_TYPED_TEST_P(PkitsTest15DeltaCRLs, Section15InvaliddeltaCRLTest6) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "deltaCRLCA1Cert",
                               "InvaliddeltaCRLTest6EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "deltaCRLCA1CRL",
                              "deltaCRLCA1deltaCRL"};
  PkitsTestInfo info;
  info.test_number = "4.15.6";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.15.7 Valid delta-CRL Test7
WRAPPED_TYPED_TEST_P(PkitsTest15DeltaCRLs, Section15ValiddeltaCRLTest7) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "deltaCRLCA1Cert",
                               "ValiddeltaCRLTest7EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "deltaCRLCA1CRL",
                              "deltaCRLCA1deltaCRL"};
  PkitsTestInfo info;
  info.test_number = "4.15.7";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.15.8 Valid delta-CRL Test8
WRAPPED_TYPED_TEST_P(PkitsTest15DeltaCRLs, Section15ValiddeltaCRLTest8) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "deltaCRLCA2Cert",
                               "ValiddeltaCRLTest8EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "deltaCRLCA2CRL",
                              "deltaCRLCA2deltaCRL"};
  PkitsTestInfo info;
  info.test_number = "4.15.8";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.15.9 Invalid delta-CRL Test9
WRAPPED_TYPED_TEST_P(PkitsTest15DeltaCRLs, Section15InvaliddeltaCRLTest9) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "deltaCRLCA2Cert",
                               "InvaliddeltaCRLTest9EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "deltaCRLCA2CRL",
                              "deltaCRLCA2deltaCRL"};
  PkitsTestInfo info;
  info.test_number = "4.15.9";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

// 4.15.10 Invalid delta-CRL Test10
WRAPPED_TYPED_TEST_P(PkitsTest15DeltaCRLs, Section15InvaliddeltaCRLTest10) {
  const char* const certs[] = {"TrustAnchorRootCertificate", "deltaCRLCA3Cert",
                               "InvaliddeltaCRLTest10EE"};
  const char* const crls[] = {"TrustAnchorRootCRL", "deltaCRLCA3CRL",
                              "deltaCRLCA3deltaCRL"};
  PkitsTestInfo info;
  info.test_number = "4.15.10";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

WRAPPED_REGISTER_TYPED_TEST_CASE_P(PkitsTest15DeltaCRLs,
                                   Section15InvaliddeltaCRLIndicatorNoBaseTest1,
                                   Section15ValiddeltaCRLTest2,
                                   Section15InvaliddeltaCRLTest3,
                                   Section15InvaliddeltaCRLTest4,
                                   Section15ValiddeltaCRLTest5,
                                   Section15InvaliddeltaCRLTest6,
                                   Section15ValiddeltaCRLTest7,
                                   Section15ValiddeltaCRLTest8,
                                   Section15InvaliddeltaCRLTest9,
                                   Section15InvaliddeltaCRLTest10);

template <typename PkitsTestDelegate>
class PkitsTest16PrivateCertificateExtensions
    : public PkitsTest<PkitsTestDelegate> {};
TYPED_TEST_CASE_P(PkitsTest16PrivateCertificateExtensions);

// 4.16.1 Valid Unknown Not Critical Certificate Extension Test1
WRAPPED_TYPED_TEST_P(
    PkitsTest16PrivateCertificateExtensions,
    Section16ValidUnknownNotCriticalCertificateExtensionTest1) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate",
      "ValidUnknownNotCriticalCertificateExtensionTest1EE"};
  const char* const crls[] = {"TrustAnchorRootCRL"};
  PkitsTestInfo info;
  info.test_number = "4.16.1";
  info.should_validate = true;

  this->RunTest(certs, crls, info);
}

// 4.16.2 Invalid Unknown Critical Certificate Extension Test2
WRAPPED_TYPED_TEST_P(PkitsTest16PrivateCertificateExtensions,
                     Section16InvalidUnknownCriticalCertificateExtensionTest2) {
  const char* const certs[] = {
      "TrustAnchorRootCertificate",
      "InvalidUnknownCriticalCertificateExtensionTest2EE"};
  const char* const crls[] = {"TrustAnchorRootCRL"};
  PkitsTestInfo info;
  info.test_number = "4.16.2";
  info.should_validate = false;

  this->RunTest(certs, crls, info);
}

WRAPPED_REGISTER_TYPED_TEST_CASE_P(
    PkitsTest16PrivateCertificateExtensions,
    Section16ValidUnknownNotCriticalCertificateExtensionTest1,
    Section16InvalidUnknownCriticalCertificateExtensionTest2);
