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