Sample code for 30+ languages & platforms
Delphi ActiveX

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 Delphi ActiveX Downloads

Delphi ActiveX
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;

...

procedure TForm1.Button1Click(Sender: TObject);
var
crypt: TChilkatCrypt2;
publicKey: WideString;
privateKey: WideString;
http_verb: WideString;
content_type: WideString;
x_bol_date: WideString;
uri: WideString;
sb: TChilkatStringBuilder;
mac: WideString;
sbHeader: TChilkatStringBuilder;
hdrValue: WideString;

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

crypt := TChilkatCrypt2.Create(Self);

crypt.EncodingMode := 'base64';
crypt.HashAlgorithm := 'sha256';
crypt.MacAlgorithm := '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 := TChilkatStringBuilder.Create(Self);
sb.Append(http_verb);
sb.Append(#10 + #10);
sb.Append(content_type);
sb.Append(#10);
sb.Append(x_bol_date);
sb.Append(#10 + 'x-bol-date:');
sb.Append(x_bol_date);
sb.Append(#10);
sb.Append(uri);
Memo1.Lines.Add('[' + sb.GetAsString() + ']');

// Set the HMAC key:
crypt.SetMacKeyEncoded(privateKey,'ascii');
mac := crypt.MacStringENC(sb.GetAsString());

// The answer should be: nqzLWvXI1eBhBXrRx5NF23V5hS8Q1xWCloJzPi/RAts=
Memo1.Lines.Add(mac);

// The last step is to append the public key with the signature
sbHeader := TChilkatStringBuilder.Create(Self);
sbHeader.Append(publicKey);
sbHeader.Append(':');
sbHeader.Append(mac);

hdrValue := sbHeader.GetAsString();
Memo1.Lines.Add(hdrValue);
end;