HashLib4Pascal

From Lazarus wiki
Jump to navigationJump to search

HashLib4Pascal is a Delphi/FreePascal compatible library that provides an easy to use interface for computing hashes and checksums of strings (with a specified encoding), files, streams, byte arrays and untyped data to mention but a few. It also supports Incremental Hashing.

Supported Algorithms

non-cryptographic 32-bits hash algorithms
AP, BKDR, Bernstein, Bernstein1, DEK, DJB, ELF, FNV, FNV1a, JS, Jenkins3, Murmur2, MurmurHash3_x86_32, OneAtTime, PJW, RS, Rotating, SDBM, ShiftAndXor, SuperFast, XXHash32.
non-cryptographic 64-bits algorithms
FNV, FNV1a, Murmur2_64, SipHash2_4, XXHash64.
non-cryptographic 128-bits algorithms
MurmurHash3_x86_128, MurmurHash3_x64_128.
checksum algorithms
Adler32, All CRC Variants from CRC3 to CRC64.
cryptographic algorithms
GOST, Grindahl, HAS160, Haval, MD2, MD4, MD5, Panama, RadioGatun, RIPEMD, RIPEMD128, RIPEMD160, RIPEMD256, RIPEMD320, SHA0, SHA1, SHA2-224, SHA2-256, SHA2-384, SHA2-512, SHA2-512-224, SHA2-512-256, SHA3-224, SHA3-256, SHA3-384, SHA3-512, Keccak-224, Keccak-256, Keccak-288, Keccak-384, Keccak-512, Snefru128, Snefru256, Tiger, Tiger2, WhirlPool, Blake2B, Blake2S, Streebog (GOST3411_2012_256, GOST3411_2012_512), Shake_128, Shake_256.

HMAC for any of the above.

PBKDF2_HMAC for any of the above.

PBKDF_Argon2 (2i, 2d and 2id variants).

PBKDF_Scrypt.

Supported Compilers

  • FreePascal 3.0.0 and above.
  • Delphi 2010 and above.

Installing the Library

  • Method one: use the provided packages in the "Packages" folder.
  • Method two: add the Library path and Sub path to your project Search Path.

Example

HashLib4Pascal is not a visual component, so you won't click it off the component list. To add an installed non-visual component to your project, click on menu "Project > Project inspector ...". In the newly opened window, add a new dependency: "Add > New requirement" and you select "HashLib4PascalPackage" and click "OK" - now you can close the "Project inspector" window. Then in the "uses" section you need to add the modules needed to generate HMAC:

uses
  //...
  HlpIHashInfo, HlpConverters, HlpHashFactory;

And the code that generates the HMAC looks something like this:

procedure TForm1.Button1Click(Sender: TObject);
var
  LHMAC: IHMAC;
  tekst, secret_key, hmac512_value: String;
begin
  tekst := 'test';
  secret_key := '123';
  LHMAC := THashFactory.THMAC.CreateHMAC(THashFactory.TCrypto.CreateSHA2_512);
  LHMAC.Key := TConverters.ConvertStringToBytes(secret_key, TEncoding.UTF8);
  hmac512_value := LHMAC.ComputeString(tekst, TEncoding.UTF8).ToString();
  ShowMessage(hmac512_value);
end;

Unit Tests

For FPC

Simply compile and run "HashLib.Tests" project in "FreePascal.Tests" Folder.

For Delphi

Method one, using DUnit Test Runner: to build and run the unit tests for Delphi 10 Seattle (should be similar for other versions)

  • Open Project Options of Unit Test (HashLib.Tests) in "Delphi.Tests" Folder.
  • Change Target to All Configurations (Or "Base" In Older Delphi Versions.)
  • In Output directory add ".\$(Platform)\$(Config)" without the quotes.
  • In Search path add "$(BDS)\Source\DUnit\src" without the quotes.
  • In Unit output directory add "." without the quotes.
  • In Unit scope names (If Available), Delete "DUnitX" from the List.

Press Ok and save, then build and run.

Method two (using TestInsight, preferred).

  • Download and Install TestInsight.
  • Open Project Options of Unit Test (HashLib.Tests.TestInsight) in Delphi.Tests Folder.
  • Change Target to All Configurations (Or "Base" In Older Delphi Versions.)
  • In Unit scope names (If Available), Delete "DUnitX" from the List.
  • To Use TestInsight, right-click on the project, then select Enable for TestInsight or TestInsight Project. Save Project then Build and Run Test Project through TestInsight.

License

Licensed Under MIT License.

Download