Sample code for 30+ languages & platforms
Unicode C

ChartURL - Create a Signed URL

See more HTTP Misc Examples

Demonstrates how to create a signed URL for ChartURL.

Chilkat Unicode C Downloads

Unicode C
#include <C_CkCrypt2W.h>
#include <C_CkJsonObjectW.h>
#include <C_CkStringBuilderW.h>

void ChilkatSample(void)
    {
    HCkCrypt2W crypt;
    const wchar_t *key;
    const wchar_t *token;
    const wchar_t *slug;
    const wchar_t *data;
    HCkJsonObjectW json;
    const wchar_t *sig;
    HCkStringBuilderW sbUrl;

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    crypt = CkCrypt2W_Create();

    // Example key: "dek-d7a46236eda961a6c3c18ffcc6b077ba87d27e9ae85f7842c6d427c265dd5f69d5131308d93332353d4a55a4b1160fcf516515a4a9f0aa50fbf2d7a2e7d0f1c5"
    key = L"charturl-sign-encrypt-key";
    // Example token: "dt-RwYN"
    token = L"charturl-token";

    slug = L"weekly-activity";
    data = L"{ \"options\": {\"data\": {\"columns\": [[\"This Week\",10,13],[\"Last Week\",9,5]]}}}";

    CkCrypt2W_putHashAlgorithm(crypt,L"SHA256");
    CkCrypt2W_putMacAlgorithm(crypt,L"HMAC");
    CkCrypt2W_SetMacKeyString(crypt,key);
    CkCrypt2W_putEncodingMode(crypt,L"base64");

    json = CkJsonObjectW_Create();
    CkJsonObjectW_Load(json,data);
    wprintf(L"json = %s\n",CkJsonObjectW_emit(json));

    sig = CkCrypt2W_macStringENC(crypt,CkJsonObjectW_emit(json));

    sbUrl = CkStringBuilderW_Create();
    CkStringBuilderW_Append(sbUrl,L"https://charturl.com/i/");
    CkStringBuilderW_Append(sbUrl,token);
    CkStringBuilderW_Append(sbUrl,L"/");
    CkStringBuilderW_Append(sbUrl,slug);
    CkStringBuilderW_Append(sbUrl,L"?d=");
    CkStringBuilderW_Append(sbUrl,CkCrypt2W_encodeString(crypt,CkJsonObjectW_emit(json),L"utf-8",L"url"));
    CkStringBuilderW_Append(sbUrl,L"&s=");
    CkStringBuilderW_Append(sbUrl,CkCrypt2W_encodeString(crypt,sig,L"utf-8",L"url"));

    wprintf(L"Signed URL: %s\n",CkStringBuilderW_getAsString(sbUrl));


    CkCrypt2W_Dispose(crypt);
    CkJsonObjectW_Dispose(json);
    CkStringBuilderW_Dispose(sbUrl);

    }