PureBasic
PureBasic
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 PureBasic Downloads
IncludeFile "CkBinData.pb"
IncludeFile "CkXml.pb"
IncludeFile "CkAsn.pb"
IncludeFile "CkDateTime.pb"
Procedure ChilkatExample()
success.i = 0
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
; Load a binary .crl file.
bdCrl.i = CkBinData::ckCreate()
If bdCrl.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkBinData::ckLoadFile(bdCrl,"qa_data/crl/ca1.crl")
If success <> 1
Debug "Failed to load CRL file."
CkBinData::ckDispose(bdCrl)
ProcedureReturn
EndIf
asn.i = CkAsn::ckCreate()
If asn.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkAsn::ckLoadBd(asn,bdCrl)
If success <> 1
Debug CkAsn::ckLastErrorText(asn)
CkBinData::ckDispose(bdCrl)
CkAsn::ckDispose(asn)
ProcedureReturn
EndIf
; Convert ASN.1 to XML and load into xml and re-emit for pretty printing..
xml.i = CkXml::ckCreate()
If xml.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkXml::ckLoadXml(xml,CkAsn::ckAsnToXml(asn))
success = CkXml::ckSaveXml(xml,"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
i.i
count_i.i
tagPath.s
j.i
count_j.i
k.i
count_k.i
revokedCertSerialHex.s
dateRevoked.s
dt.i = CkDateTime::ckCreate()
If dt.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
i = 0
count_i = CkXml::ckNumChildrenHavingTag(xml,"sequence")
While i < count_i
CkXml::setCkI(xml, i)
j = 0
count_j = CkXml::ckNumChildrenHavingTag(xml,"sequence[i]|sequence")
While j < count_j
CkXml::setCkJ(xml, j)
k = 0
count_k = CkXml::ckNumChildrenHavingTag(xml,"sequence[i]|sequence[j]|sequence")
While k < count_k
CkXml::setCkK(xml, k)
; Get the revoked certificate's serial number in uppercase hex.
revokedCertSerialHex = CkXml::ckGetChildContent(xml,"sequence[i]|sequence[j]|sequence[k]|int")
Debug "serial number: " + revokedCertSerialHex
; Get the date/time revoked. It will be a string formatted as "YYMMDDhhmmssZ", such as "181023093028Z"
dateRevoked = CkXml::ckGetChildContent(xml,"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:
CkDateTime::ckSetFromTimestamp(dt,dateRevoked)
Debug "date revoked: " + CkDateTime::ckGetAsRfc822(dt,0)
k = k + 1
Wend
j = j + 1
Wend
i = i + 1
Wend
CkBinData::ckDispose(bdCrl)
CkAsn::ckDispose(asn)
CkXml::ckDispose(xml)
CkDateTime::ckDispose(dt)
ProcedureReturn
EndProcedure