Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

HMAC Hex String

See more Encryption Examples

Demonstrates how to compute an HMAC using a hexidecimal key and data.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
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.BinData,
  Chilkat.Crypt2;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  crypt: TCrypt2;
  keyHex: string;
  dataHex: string;
  bd: TBinData;
  macHex: string;

begin
  success := False;

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

  crypt := TCrypt2.Create;

  //  Set the MAC algorithm to HMAC
  crypt.MacAlgorithm := 'hmac';

  //  Our HMAC key will be the bytes represented in the following hex string.
  //  In other words, the HMAC key is composed of the bytes 0x41, 0xC2, 0x1C, ...
  //  (It is not composed of the us-ascii string '4', '1', 'C', ...)
  keyHex := '41C21CB9D7A02FC5D4FADB9E4755B9DE';
  success := crypt.SetMacKeyEncoded(keyHex,'hex');

  //  Our desire is to HMAC the bytes represented in the following string:
  dataHex := 'C22078065B01460001000000010062043BF5B18228C8E02D17BCFE4E00561FA6DEC216EA97195CEB579942E275C21932258E3CD391E507FF4E7FD4C787A8447DA111C54A9C1795E7FF4C0BAA2EDA';

  //  We'll need to decode the hex to binary:
  bd := TBinData.Create;
  bd.AppendEncoded(dataHex,'hex');

  //  Do the HMAC-SHA256 hash and return as a hex string:
  crypt.EncodingMode := 'hex';
  crypt.HashAlgorithm := 'sha-256';
  macHex := crypt.MacBdENC(bd);
  WriteLn(macHex);


  crypt.Free;
  bd.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.