Sample code for 30+ languages & platforms
Swift

Load .crl, Convert to XML, Get Revoked Serial Numbers and Dates

See more Certificates Examples

Load a binary .crl file (Certificate Revocation List), converts to XML, and then gets the revoked certificate serial numbers and revocation dates.

Note: This example requires Chilkat v9.5.0.77 or greater.

Chilkat Swift Downloads

Swift

func chilkatTest() {
    var success: Bool = false

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    // Load a binary .crl file.
    let bdCrl = CkoBinData()!
    success = bdCrl.loadFile(path: "qa_data/crl/ca1.crl")
    if success != true {
        print("Failed to load CRL file.")
        return
    }

    let asn = CkoAsn()!
    success = asn.loadBd(bd: bdCrl)
    if success != true {
        print("\(asn.lastErrorText!)")
        return
    }

    // Convert ASN.1 to XML and load into xml and re-emit for pretty printing..
    let xml = CkoXml()!
    xml.load(xmlData: asn.asnToXml())
    success = xml.save(path: "qa_output/crl.xml")

    // Use this online tool to generate parsing code from CRL XML: 
    // Generate Parsing Code from XML

    // Here's code to parse the XML.  This code was generated by the above tool,
    // and then we modified it by removing unneeded code and changing some names
    var i: Int
    var count_i: Int
    var tagPath: String?
    var j: Int
    var count_j: Int
    var k: Int
    var count_k: Int

    var revokedCertSerialHex: String?
    var dateRevoked: String?

    let dt = CkoDateTime()!

    i = 0
    count_i = xml.numChildrenHavingTag(tag: "sequence").intValue
    while i < count_i {
        xml.i = i

        j = 0
        count_j = xml.numChildrenHavingTag(tag: "sequence[i]|sequence").intValue
        while j < count_j {
            xml.j = j

            k = 0
            count_k = xml.numChildrenHavingTag(tag: "sequence[i]|sequence[j]|sequence").intValue
            while k < count_k {
                xml.k = k

                // Get the revoked certificate's serial number in uppercase hex.
                revokedCertSerialHex = xml.getChildContent(tagPath: "sequence[i]|sequence[j]|sequence[k]|int")
                print("serial number: \(revokedCertSerialHex!)")

                // Get the date/time revoked.  It will be a string formatted as "YYMMDDhhmmssZ", such as "181023093028Z"
                dateRevoked = xml.getChildContent(tagPath: "sequence[i]|sequence[j]|sequence[k]|utctime")

                // Starting in Chilkat v9.5.0.77, date/time strings formatted as YYMMDDhhmmssZ can be parsed as follows:
                dt.set(fromTimestamp: dateRevoked)
                print("date revoked: \(dt.get(asRfc822: false)!)")

                k = k + 1
            }

            j = j + 1
        }

        i = i + 1
    }


}