Sample code for 30+ languages & platforms
Tcl

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 Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

set asn [new_CkAsn]

# Begin with loading ASN.1 from a binary DER/BER format file.
set success [CkAsn_LoadBinaryFile $asn "/Users/chilkat/testData/p7b/test.p7b"]
if {$success != 1} then {
    puts [CkAsn_lastErrorText $asn]
    delete_CkAsn $asn
    exit
}

# Convert ASN.1 to XML:
set strXml [CkAsn_asnToXml $asn]
if {[CkAsn_get_LastMethodSuccess $asn] != 1} then {
    puts [CkAsn_lastErrorText $asn]
    delete_CkAsn $asn
    exit
}

# The XML returned by AsnToXml will be compact and not pretty-formatted.
# Use Chilkat XML to format the XML better:
set xml [new_CkXml]

set success [CkXml_LoadXml $xml $strXml]
# Assuming success for this example..
# This is formatted better for human viewing:
puts [CkXml_getXml $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.
set strBase64 [CkAsn_getEncodedDer $asn "base64"]

# Load the ASN.1 from XML:
set asn2 [new_CkAsn]

set success [CkAsn_LoadAsnXml $asn2 [CkXml_getXml $xml]]
if {$success != 1} then {
    puts [CkAsn_lastErrorText $asn2]
    delete_CkAsn $asn
    delete_CkXml $xml
    delete_CkAsn $asn2
    exit
}

# Load the ASN.1 from an encoded string, such as base64:
set asn3 [new_CkAsn]

set success [CkAsn_LoadEncoded $asn3 $strBase64 "base64"]
if {$success != 1} then {
    puts [CkAsn_lastErrorText $asn3]
    delete_CkAsn $asn
    delete_CkXml $xml
    delete_CkAsn $asn2
    delete_CkAsn $asn3
    exit
}


delete_CkAsn $asn
delete_CkXml $xml
delete_CkAsn $asn2
delete_CkAsn $asn3