Generated by generate_crl_test_data.py. Do not edit.

Leaf is revoked

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 {
      SEQUENCE {
        INTEGER { 105 }
        UTCTime { "170201001122Z" }
      }
      SEQUENCE {
        INTEGER { 5 }
        UTCTime { "170201001122Z" }
      }
      SEQUENCE {
        INTEGER { 106 }
        UTCTime { "170201001122Z" }
      }
    }
  }
  SEQUENCE {
    # sha256WithRSAEncryption
    OBJECT_IDENTIFIER { 1.2.840.113549.1.1.11 }
    NULL {}
  }
  BIT_STRING { `0011cc5c116d78337b3d2bd9724b4db3d75b8a81666726cb76774ad5cdc67410e55b2d05a47a272ed62640e53eaf9150e17c3153510e71c1b7df5093313b6b7f8f0abb95a9a64f9290c1d7f130b354a18b83ba2d7a9b5e19434dbba578890b4bda522c19862be404ebc78270fbdaebb61e6d5da8f05b919c0da0a7b2f7773cc13e` }
}
-----BEGIN CRL-----
MIIBJTCBjwIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRUZXN0IEludGVy
bWVkaWF0ZSBDQRcNMTcwMzAyMDAxMTIyWhcNMTcwNjAyMDAxMTIyWjA8MBICAWkX
DTE3MDIwMTAwMTEyMlowEgIBBRcNMTcwMjAxMDAxMTIyWjASAgFqFw0xNzAyMDEw
MDExMjJaMA0GCSqGSIb3DQEBCwUAA4GBABHMXBFteDN7PSvZcktNs9dbioFmZybL
dndK1c3GdBDlWy0FpHonLtYmQOU+r5FQ4XwxU1EOccG331CTMTtrf48Ku5Wppk+S
kMHX8TCzVKGLg7otepteGUNNu6V4iQtL2lIsGYYr5ATrx4Jw+9rrth5tXajwW5Gc
DaCnsvd3PME+
-----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 { `00d822bfcd639ed70cd80d463b773cbc2d3a7c6d1523802a3adfaa928ba5266c501291e4a1a9b4d74f86687716380febfa0241e17afef736f1f7cc3908c219e09d8226a583b3c9c7f50b5c696640125daa14915d7dc5190d949363020c856016ec495685657d2da812254a8a0493e2c5453eea8a3b3be249392be1ab06aaac7bcb` }
          INTEGER { 65537 }
        }
      }
    }
    [3] {
      SEQUENCE {
        SEQUENCE {
          # keyUsage
          OBJECT_IDENTIFIER { 2.5.29.15 }
          BOOLEAN { `ff` }
          OCTET_STRING {
            BIT_STRING { `0106` }
          }
        }
      }
    }
  }
  SEQUENCE {
    # sha256WithRSAEncryption
    OBJECT_IDENTIFIER { 1.2.840.113549.1.1.11 }
    NULL {}
  }
  BIT_STRING { `00564c8f891a5a03aab92dc18ab6f149027943c85a065b17d662af907c7b9a72135295c5768b63547d56ac24db2acc17de5b3efe864b3e1a3a40bd776488043bde40536c128b4070d0d42cdd59c61fd88e62727fb612836cee3914f8ed73eb45846814b3ac4ad9ff72ce914ac6758c919461029790753341135ca2aedcf41ca34b` }
}
-----BEGIN CA CERTIFICATE-----
MIIBvTCCASagAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdUZXN0
IENBMCIYDzIwMTcwMTAxMDAwMDAwWhgPMjAxODAxMDEwMDAwMDBaMB8xHTAbBgNV
BAMMFFRlc3QgSW50ZXJtZWRpYXRlIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
iQKBgQDYIr/NY57XDNgNRjt3PLwtOnxtFSOAKjrfqpKLpSZsUBKR5KGptNdPhmh3
FjgP6/oCQeF6/vc28ffMOQjCGeCdgialg7PJx/ULXGlmQBJdqhSRXX3FGQ2Uk2MC
DIVgFuxJVoVlfS2oEiVKigST4sVFPuqKOzviSTkr4asGqqx7ywIDAQABoxIwEDAO
BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADgYEAVkyPiRpaA6q5LcGKtvFJ
AnlDyFoGWxfWYq+QfHuachNSlcV2i2NUfVasJNsqzBfeWz7+hks+GjpAvXdkiAQ7
3kBTbBKLQHDQ1CzdWcYf2I5icn+2EoNs7jkU+O1z60WEaBSzrErZ/3LOkUrGdYyR
lGECl5B1M0ETXKKu3PQco0s=
-----END CA CERTIFICATE-----

SEQUENCE {
  SEQUENCE {
    [0] {
      INTEGER { 2 }
    }
    INTEGER { 5 }
    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 { `00b2b9316002947538fd87b0dd430ad82d8938f019ad260d909c351ed586b993b25304ffc9881eac4a7ea5aff12762f7cedb345450d9d90ffd049f374cf1f528ae38679ba1aeea2df1f264c5f1ce8573a5549fee8c4dbec9836fd602eccb31cdd269267cbf673432886e28e4c18d5d1494760186ff65b1d958dfcd0659f75fad5b` }
          INTEGER { 65537 }
        }
      }
    }
    [3] {
      SEQUENCE {
        SEQUENCE {
          # cRLDistributionPoints
          OBJECT_IDENTIFIER { 2.5.29.31 }
          OCTET_STRING {
            SEQUENCE {
              SEQUENCE {
                [0] {
                  [0] {
                    [6 PRIMITIVE] { "http://example.com/foo.crl" }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  SEQUENCE {
    # sha256WithRSAEncryption
    OBJECT_IDENTIFIER { 1.2.840.113549.1.1.11 }
    NULL {}
  }
  BIT_STRING { `004f29397e7969a2b6fb2cf3e3d1efa5f44183abd33454414f3a140f00203cfbd47d3f0cab3a98355a822641527096ee6ab757e8c602a635af4a7ed4272f9452cd82ce18a7354affa7b7664706c18f4161a65d09532c7fc01c4cadcd776331fe88beb1b4e6c37b245bc10aade8e644bc86844db1390da8b0df09077e59b6e85a8e` }
}
-----BEGIN CERTIFICATE-----
MIIB3DCCAUWgAwIBAgIBBTANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRUZXN0
IEludGVybWVkaWF0ZSBDQTAiGA8yMDE3MDEwMTAwMDAwMFoYDzIwMTgwMTAxMDAw
MDAwWjAUMRIwEAYDVQQDDAlUZXN0IENlcnQwgZ8wDQYJKoZIhvcNAQEBBQADgY0A
MIGJAoGBALK5MWAClHU4/Yew3UMK2C2JOPAZrSYNkJw1HtWGuZOyUwT/yYgerEp+
pa/xJ2L3zts0VFDZ2Q/9BJ83TPH1KK44Z5uhruot8fJkxfHOhXOlVJ/ujE2+yYNv
1gLsyzHN0mkmfL9nNDKIbijkwY1dFJR2AYb/ZbHZWN/NBln3X61bAgMBAAGjLzAt
MCsGA1UdHwQkMCIwIKAeoByGGmh0dHA6Ly9leGFtcGxlLmNvbS9mb28uY3JsMA0G
CSqGSIb3DQEBCwUAA4GBAE8pOX55aaK2+yzz49HvpfRBg6vTNFRBTzoUDwAgPPvU
fT8MqzqYNVqCJkFScJbuardX6MYCpjWvSn7UJy+UUs2CzhinNUr/p7dmRwbBj0Fh
pl0JUyx/wBxMrc13YzH+iL6xtObDeyRbwQqt6OZEvIaETbE5Daiw3wkHflm26FqO
-----END CERTIFICATE-----