C
C
Plaza API (bol.com) HMAC-SHA256 Authentication
See more Encryption Examples
Demonstrates how to compute the Authorization header for bol.com using HMAC-SHA256.Chilkat C Downloads
#include <C_CkCrypt2.h>
#include <C_CkStringBuilder.h>
void ChilkatSample(void)
{
HCkCrypt2 crypt;
const char *publicKey;
const char *privateKey;
const char *http_verb;
const char *content_type;
const char *x_bol_date;
const char *uri;
HCkStringBuilder sb;
const char *mac;
HCkStringBuilder sbHeader;
const char *hdrValue;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
crypt = CkCrypt2_Create();
CkCrypt2_putEncodingMode(crypt,"base64");
CkCrypt2_putHashAlgorithm(crypt,"sha256");
CkCrypt2_putMacAlgorithm(crypt,"hmac");
publicKey = "oRNWbHFXtAECmhnZmEndcjLIaSKbRMVE";
privateKey = "MaQHPOnmYkPZNgeRziPnQyyOJYytUbcFBVJBvbMKoDdpPqaZbaOiLUTWzPAkpPsZFZbJHrcoltdgpZolyNcgvvBaKcmkqFjucFzXhDONTsPAtHHyccQlLUZpkOuywMiOycDWcCySFsgpDiyGnCWCZJkNTtVdPxbSUTWVIFQiUxaPDYDXRQAVVTbSVZArAZkaLDLOoOvPzxSdhnkkJWzlQDkqsXNKfAIgAldrmyfROSyCGMCfvzdQdUQEaYZTPEoA";
// The string to sign is this:
// http_verb +'\n\n'+ content_type +'\n'+ x_bol_date +'\n'+ 'x-bol-date:'+ x_bol_date +'\n'+ uri
http_verb = "GET";
content_type = "application/xml";
x_bol_date = "Wed, 17 Feb 2016 00:00:00 GMT";
uri = "/services/rest/orders/v2";
// IMPORTANT: Notice the use of underscore and hyphen (dash) chars in x-bol-date vs. x_bol_date.
// In one place hypens are used. In two places, underscore chars are used.
sb = CkStringBuilder_Create();
CkStringBuilder_Append(sb,http_verb);
CkStringBuilder_Append(sb,"\n\n");
CkStringBuilder_Append(sb,content_type);
CkStringBuilder_Append(sb,"\n");
CkStringBuilder_Append(sb,x_bol_date);
CkStringBuilder_Append(sb,"\nx-bol-date:");
CkStringBuilder_Append(sb,x_bol_date);
CkStringBuilder_Append(sb,"\n");
CkStringBuilder_Append(sb,uri);
printf("[%s]\n",CkStringBuilder_getAsString(sb));
// Set the HMAC key:
CkCrypt2_SetMacKeyEncoded(crypt,privateKey,"ascii");
mac = CkCrypt2_macStringENC(crypt,CkStringBuilder_getAsString(sb));
// The answer should be: nqzLWvXI1eBhBXrRx5NF23V5hS8Q1xWCloJzPi/RAts=
printf("%s\n",mac);
// The last step is to append the public key with the signature
sbHeader = CkStringBuilder_Create();
CkStringBuilder_Append(sbHeader,publicKey);
CkStringBuilder_Append(sbHeader,":");
CkStringBuilder_Append(sbHeader,mac);
hdrValue = CkStringBuilder_getAsString(sbHeader);
printf("%s\n",hdrValue);
CkCrypt2_Dispose(crypt);
CkStringBuilder_Dispose(sb);
CkStringBuilder_Dispose(sbHeader);
}