PureBasic
PureBasic
Convert ASN.1 to/from Binary DER, XML, and Base64
Demonstrates how to convert ASN.1 from and to any of the following formats: binary DER, Base64, and XML.Chilkat PureBasic Downloads
IncludeFile "CkAsn.pb"
IncludeFile "CkXml.pb"
Procedure ChilkatExample()
success.i = 0
asn.i = CkAsn::ckCreate()
If asn.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Begin with loading ASN.1 from a binary DER/BER format file.
success = CkAsn::ckLoadBinaryFile(asn,"/Users/chilkat/testData/p7b/test.p7b")
If success <> 1
Debug CkAsn::ckLastErrorText(asn)
CkAsn::ckDispose(asn)
ProcedureReturn
EndIf
; Convert ASN.1 to XML:
strXml.s = CkAsn::ckAsnToXml(asn)
If CkAsn::ckLastMethodSuccess(asn) <> 1
Debug CkAsn::ckLastErrorText(asn)
CkAsn::ckDispose(asn)
ProcedureReturn
EndIf
; The XML returned by AsnToXml will be compact and not pretty-formatted.
; Use Chilkat XML to format the XML better:
xml.i = CkXml::ckCreate()
If xml.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkXml::ckLoadXml(xml,strXml)
; Assuming success for this example..
; This is formatted better for human viewing:
Debug CkXml::ckGetXml(xml)
; Now get the ASN.1 in base64 format. Any encoding supported
; by Chilkat can be passed, such as "hex", "uu", "quoted-printable", "base32", "modbase64", etc.
strBase64.s = CkAsn::ckGetEncodedDer(asn,"base64")
; Load the ASN.1 from XML:
asn2.i = CkAsn::ckCreate()
If asn2.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkAsn::ckLoadAsnXml(asn2,CkXml::ckGetXml(xml))
If success <> 1
Debug CkAsn::ckLastErrorText(asn2)
CkAsn::ckDispose(asn)
CkXml::ckDispose(xml)
CkAsn::ckDispose(asn2)
ProcedureReturn
EndIf
; Load the ASN.1 from an encoded string, such as base64:
asn3.i = CkAsn::ckCreate()
If asn3.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkAsn::ckLoadEncoded(asn3,strBase64,"base64")
If success <> 1
Debug CkAsn::ckLastErrorText(asn3)
CkAsn::ckDispose(asn)
CkXml::ckDispose(xml)
CkAsn::ckDispose(asn2)
CkAsn::ckDispose(asn3)
ProcedureReturn
EndIf
CkAsn::ckDispose(asn)
CkXml::ckDispose(xml)
CkAsn::ckDispose(asn2)
CkAsn::ckDispose(asn3)
ProcedureReturn
EndProcedure