Sample code for 30+ languages & platforms
Unicode C

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 Unicode C Downloads

Unicode C
#include <C_CkAsnW.h>
#include <C_CkXmlW.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkAsnW asn;
    const wchar_t *strXml;
    HCkXmlW xml;
    const wchar_t *strBase64;
    HCkAsnW asn2;
    HCkAsnW asn3;

    success = FALSE;

    asn = CkAsnW_Create();

    //  Begin with loading ASN.1 from a binary DER/BER format file.
    success = CkAsnW_LoadBinaryFile(asn,L"/Users/chilkat/testData/p7b/test.p7b");
    if (success != TRUE) {
        wprintf(L"%s\n",CkAsnW_lastErrorText(asn));
        CkAsnW_Dispose(asn);
        return;
    }

    //  Convert ASN.1 to XML:
    strXml = CkAsnW_asnToXml(asn);
    if (CkAsnW_getLastMethodSuccess(asn) != TRUE) {
        wprintf(L"%s\n",CkAsnW_lastErrorText(asn));
        CkAsnW_Dispose(asn);
        return;
    }

    //  The XML returned by AsnToXml will be compact and not pretty-formatted.
    //  Use Chilkat XML to format the XML better:
    xml = CkXmlW_Create();
    success = CkXmlW_LoadXml(xml,strXml);
    //  Assuming success for this example..
    //  This is formatted better for human viewing:
    wprintf(L"%s\n",CkXmlW_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.
    strBase64 = CkAsnW_getEncodedDer(asn,L"base64");

    //  Load the ASN.1 from XML:
    asn2 = CkAsnW_Create();
    success = CkAsnW_LoadAsnXml(asn2,CkXmlW_getXml(xml));
    if (success != TRUE) {
        wprintf(L"%s\n",CkAsnW_lastErrorText(asn2));
        CkAsnW_Dispose(asn);
        CkXmlW_Dispose(xml);
        CkAsnW_Dispose(asn2);
        return;
    }

    //  Load the ASN.1 from an encoded string, such as base64:
    asn3 = CkAsnW_Create();
    success = CkAsnW_LoadEncoded(asn3,strBase64,L"base64");
    if (success != TRUE) {
        wprintf(L"%s\n",CkAsnW_lastErrorText(asn3));
        CkAsnW_Dispose(asn);
        CkXmlW_Dispose(xml);
        CkAsnW_Dispose(asn2);
        CkAsnW_Dispose(asn3);
        return;
    }



    CkAsnW_Dispose(asn);
    CkXmlW_Dispose(xml);
    CkAsnW_Dispose(asn2);
    CkAsnW_Dispose(asn3);

    }