Sample code for 30+ languages & platforms
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

PureBasic
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