Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
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 Pascal (Lazarus/Delphi) Downloads
program ChilkatDemo;
// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
SysUtils,
CkDllLoader,
Chilkat.Crypt2,
Chilkat.StringBuilder;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
crypt: TCrypt2;
publicKey: string;
privateKey: string;
http_verb: string;
content_type: string;
x_bol_date: string;
uri: string;
sb: TStringBuilder;
mac: string;
sbHeader: TStringBuilder;
hdrValue: string;
begin
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
crypt := TCrypt2.Create;
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 := TStringBuilder.Create;
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);
WriteLn('[' + sb.GetAsString() + ']');
// Set the HMAC key:
crypt.SetMacKeyEncoded(privateKey,'ascii');
mac := crypt.MacStringENC(sb.GetAsString());
// The answer should be: nqzLWvXI1eBhBXrRx5NF23V5hS8Q1xWCloJzPi/RAts=
WriteLn(mac);
// The last step is to append the public key with the signature
sbHeader := TStringBuilder.Create;
sbHeader.Append(publicKey);
sbHeader.Append(':');
sbHeader.Append(mac);
hdrValue := sbHeader.GetAsString();
WriteLn(hdrValue);
crypt.Free;
sb.Free;
sbHeader.Free;
end;
// ---------------------------------------------------------------------------
begin
try
RunDemo;
except
on E: Exception do
WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
end;
WriteLn;
{$IFDEF MSWINDOWS}
WriteLn('Press Enter to exit...');
ReadLn;
{$ENDIF}
end.