Sample code for 30+ languages & platforms
PureBasic

Convert CRL PEM to XML

See more PEM Examples

Loads a CRL (Certificate Revocation List) from the PEM file format and converts to XML to allow for visual examination and parsing.

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

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkXml.pb"
IncludeFile "CkAsn.pb"
IncludeFile "CkPem.pb"

Procedure ChilkatExample()

    success.i = 0

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

    ; This example requires Chilkat v9.5.0.77 or greater.
    pem.i = CkPem::ckCreate()
    If pem.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkPem::setCkVerboseLogging(pem, 1)
    success = CkPem::ckLoadPemFile(pem,"qa_data/crl/sampleCrl.pem","password_not_used")
    If success <> 1
        Debug CkPem::ckLastErrorText(pem)
        CkPem::ckDispose(pem)
        ProcedureReturn
    EndIf

    numCrls.i = CkPem::ckNumCrls(pem)
    i.i = 0

    asn.i = CkAsn::ckCreate()
    If asn.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    xml.i = CkXml::ckCreate()
    If xml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    While i < numCrls

        ; Get the CRL as base64 (multi-line)
        crlBase64.s = CkPem::ckGetEncodedItem(pem,"crl","","base64_mime",i)
        If CkPem::ckLastMethodSuccess(pem) <> 1
            Debug CkPem::ckLastErrorText(pem)
            CkPem::ckDispose(pem)
            CkAsn::ckDispose(asn)
            CkXml::ckDispose(xml)
            ProcedureReturn
        EndIf

        Debug crlBase64

        success = CkAsn::ckLoadEncoded(asn,crlBase64,"base64")
        If success <> 1
            Debug CkAsn::ckLastErrorText(asn)
            CkPem::ckDispose(pem)
            CkAsn::ckDispose(asn)
            CkXml::ckDispose(xml)
            ProcedureReturn
        EndIf

        ; Convert ASN.1 to XML and load into xml and re-emit for pretty printing..
        CkXml::ckLoadXml(xml,CkAsn::ckAsnToXml(asn))
        Debug CkXml::ckGetXml(xml)

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

        Debug "-------------------------------------"
        i = i + 1
    Wend


    CkPem::ckDispose(pem)
    CkAsn::ckDispose(asn)
    CkXml::ckDispose(xml)


    ProcedureReturn
EndProcedure