Generated by generate_crl_test_data.py. Do not edit.

Leaf covered by CRLs and not revoked and has no crlDistributionPoints.
This tests the case where CheckCRL is called with a synthesized distributionPoint.

SEQUENCE {
  SEQUENCE {
    INTEGER { 1 }
    SEQUENCE {
      # sha256WithRSAEncryption
      OBJECT_IDENTIFIER { 1.2.840.113549.1.1.11 }
      NULL {}
    }
    SEQUENCE {
      SET {
        SEQUENCE {
          # commonName
          OBJECT_IDENTIFIER { 2.5.4.3 }
          UTF8String { "Test Intermediate CA" }
        }
      }
    }
    UTCTime { "170302001122Z" }
    UTCTime { "170602001122Z" }
  }
  SEQUENCE {
    # sha256WithRSAEncryption
    OBJECT_IDENTIFIER { 1.2.840.113549.1.1.11 }
    NULL {}
  }
  BIT_STRING { `0091924cb896e010f9afbbb946ff76203e39915dd23353743196256b04c594869475eb41441cf14fd9f83d2b1b7ccbd78527ebe5375ac502d0b7fd5416dc0972d6089b6d7cbb5c1af7068541ec292fb8a451325a1efc496886dc75cb32d625afe1c21e81d8689f183670009a4e4af8882bfb82c3301fc2412c1e4ecb1923ca9a12` }
}
-----BEGIN CRL-----
MIHmMFECAQEwDQYJKoZIhvcNAQELBQAwHzEdMBsGA1UEAwwUVGVzdCBJbnRlcm1l
ZGlhdGUgQ0EXDTE3MDMwMjAwMTEyMloXDTE3MDYwMjAwMTEyMlowDQYJKoZIhvcN
AQELBQADgYEAkZJMuJbgEPmvu7lG/3YgPjmRXdIzU3QxliVrBMWUhpR160FEHPFP
2fg9Kxt8y9eFJ+vlN1rFAtC3/VQW3Aly1gibbXy7XBr3BoVB7CkvuKRRMloe/Elo
htx1yzLWJa/hwh6B2GifGDZwAJpOSviIK/uCwzAfwkEsHk7LGSPKmhI=
-----END CRL-----

SEQUENCE {
  SEQUENCE {
    [0] {
      INTEGER { 2 }
    }
    INTEGER { 1 }
    SEQUENCE {
      # sha256WithRSAEncryption
      OBJECT_IDENTIFIER { 1.2.840.113549.1.1.11 }
      NULL {}
    }
    SEQUENCE {
      SET {
        SEQUENCE {
          # commonName
          OBJECT_IDENTIFIER { 2.5.4.3 }
          UTF8String { "Test CA" }
        }
      }
    }
    SEQUENCE {
      GeneralizedTime { "20170101000000Z" }
      GeneralizedTime { "20180101000000Z" }
    }
    SEQUENCE {
      SET {
        SEQUENCE {
          # commonName
          OBJECT_IDENTIFIER { 2.5.4.3 }
          UTF8String { "Test Intermediate CA" }
        }
      }
    }
    SEQUENCE {
      SEQUENCE {
        # rsaEncryption
        OBJECT_IDENTIFIER { 1.2.840.113549.1.1.1 }
        NULL {}
      }
      BIT_STRING {
        `00`
        SEQUENCE {
          INTEGER { `00ad1720bb9ea16d76a76a659decc0b5e4b3a93e3852d3899bb0fbff0d31e4996d5d488d8b169ffd1b0b030b4969ab99191190c4107b9c92be097d46d0835e993f546bd4b8cd2a508e7578c590ec667898a12cada775a2338059ec565fd177dc445a1008f665dbaffa0b1d34f390caa8c611cb6b126df75566db5bcfa5c5a6cc7d` }
          INTEGER { 65537 }
        }
      }
    }
    [3] {
      SEQUENCE {
        SEQUENCE {
          # keyUsage
          OBJECT_IDENTIFIER { 2.5.29.15 }
          BOOLEAN { `ff` }
          OCTET_STRING {
            BIT_STRING { `0106` }
          }
        }
        SEQUENCE {
          # basicConstraints
          OBJECT_IDENTIFIER { 2.5.29.19 }
          BOOLEAN { `ff` }
          OCTET_STRING {
            SEQUENCE {
              BOOLEAN { `ff` }
            }
          }
        }
      }
    }
  }
  SEQUENCE {
    # sha256WithRSAEncryption
    OBJECT_IDENTIFIER { 1.2.840.113549.1.1.11 }
    NULL {}
  }
  BIT_STRING { `00604b045a10bb186cc936b77d28093d479bd89627c762a53411d6060cba7acc7a4861fc27b35c2b1c50f55d4e2f96050bb6478780c1fa93136d20a0a8d26b14818485690860907b69519c1a22abfd508a5bb4da5825c00ccba70c2e362e056e5929176785566d06fd454369570fdaefe551a3a9e7fbb241a55986978f7accbe7d` }
}
-----BEGIN CA CERTIFICATE-----
MIIBzjCCATegAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdUZXN0
IENBMCIYDzIwMTcwMTAxMDAwMDAwWhgPMjAxODAxMDEwMDAwMDBaMB8xHTAbBgNV
BAMMFFRlc3QgSW50ZXJtZWRpYXRlIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
iQKBgQCtFyC7nqFtdqdqZZ3swLXks6k+OFLTiZuw+/8NMeSZbV1IjYsWn/0bCwML
SWmrmRkRkMQQe5ySvgl9RtCDXpk/VGvUuM0qUI51eMWQ7GZ4mKEsrad1ojOAWexW
X9F33ERaEAj2Zduv+gsdNPOQyqjGEctrEm33VWbbW8+lxabMfQIDAQABoyMwITAO
BgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOB
gQBgSwRaELsYbMk2t30oCT1Hm9iWJ8dipTQR1gYMunrMekhh/CezXCscUPVdTi+W
BQu2R4eAwfqTE20goKjSaxSBhIVpCGCQe2lRnBoiq/1Qilu02lglwAzLpwwuNi4F
blkpF2eFVm0G/UVDaVcP2u/lUaOp5/uyQaVZhpePesy+fQ==
-----END CA CERTIFICATE-----

SEQUENCE {
  SEQUENCE {
    [0] {
      INTEGER { 2 }
    }
    INTEGER { 7 }
    SEQUENCE {
      # sha256WithRSAEncryption
      OBJECT_IDENTIFIER { 1.2.840.113549.1.1.11 }
      NULL {}
    }
    SEQUENCE {
      SET {
        SEQUENCE {
          # commonName
          OBJECT_IDENTIFIER { 2.5.4.3 }
          UTF8String { "Test Intermediate CA" }
        }
      }
    }
    SEQUENCE {
      GeneralizedTime { "20170101000000Z" }
      GeneralizedTime { "20180101000000Z" }
    }
    SEQUENCE {
      SET {
        SEQUENCE {
          # commonName
          OBJECT_IDENTIFIER { 2.5.4.3 }
          UTF8String { "Test Cert" }
        }
      }
    }
    SEQUENCE {
      SEQUENCE {
        # rsaEncryption
        OBJECT_IDENTIFIER { 1.2.840.113549.1.1.1 }
        NULL {}
      }
      BIT_STRING {
        `00`
        SEQUENCE {
          INTEGER { `00b8c0bec26a099fbc4ef454675953b15ef3048fdf1070d28376123c6479a7c2e4501afc202de597cb6b862337eba9572de84752eb628cd10effb34693a0d4d1b8ecd00dc18f5c76d04c0ebb58895df4bfc17088e183bc62a64c3d524942fa868da0c592d666cdb88baa9d7edb85b247c84660c9b64c5d00204f4752315df54e51` }
          INTEGER { 65537 }
        }
      }
    }
    [3] {
      SEQUENCE {
        SEQUENCE {
          # basicConstraints
          OBJECT_IDENTIFIER { 2.5.29.19 }
          BOOLEAN { `ff` }
          OCTET_STRING {
            SEQUENCE {}
          }
        }
      }
    }
  }
  SEQUENCE {
    # sha256WithRSAEncryption
    OBJECT_IDENTIFIER { 1.2.840.113549.1.1.11 }
    NULL {}
  }
  BIT_STRING { `003dc4429a30e9926a5554889f9366894e152b172b75718869be6f639f3bc8f911185a24dfadb865d27b9bcec7b64b503acb5784a5bdf65d8e757a567596d56ff01b542229f14a81c91408c8d8fff46b1b23a132e2773b392517ee3986c52bae5f0e25e5dae587c76a6ac62366b33ded781804b504abfb4ac667c48dfef0f112f2` }
}
-----BEGIN CERTIFICATE-----
MIIBvTCCASagAwIBAgIBBzANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRUZXN0
IEludGVybWVkaWF0ZSBDQTAiGA8yMDE3MDEwMTAwMDAwMFoYDzIwMTgwMTAxMDAw
MDAwWjAUMRIwEAYDVQQDDAlUZXN0IENlcnQwgZ8wDQYJKoZIhvcNAQEBBQADgY0A
MIGJAoGBALjAvsJqCZ+8TvRUZ1lTsV7zBI/fEHDSg3YSPGR5p8LkUBr8IC3ll8tr
hiM366lXLehHUutijNEO/7NGk6DU0bjs0A3Bj1x20EwOu1iJXfS/wXCI4YO8YqZM
PVJJQvqGjaDFktZmzbiLqp1+24WyR8hGYMm2TF0AIE9HUjFd9U5RAgMBAAGjEDAO
MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADgYEAPcRCmjDpkmpVVIifk2aJ
ThUrFyt1cYhpvm9jnzvI+REYWiTfrbhl0nubzse2S1A6y1eEpb32XY51elZ1ltVv
8BtUIinxSoHJFAjI2P/0axsjoTLidzs5JRfuOYbFK65fDiXl2uWHx2pqxiNmsz3t
eBgEtQSr+0rGZ8SN/vDxEvI=
-----END CERTIFICATE-----