HashLib4Pascal: what changed
Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.
Title: hashlib4pascal HashLib4Pascal
| Old | New | Line | |
|---|---|---|---|
| 1 | - | ||
| 1 | + | **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. | |
| 2 | + | ||
| 3 | + | ### Supported Algorithms | |
| 4 | + | ||
| 5 | + | non-cryptographic 32-bits hash algorithms | |
| 6 | + | AP, BKDR, Bernstein, Bernstein1, DEK, DJB, ELF, FNV, FNV1a, JS, Jenkins3, Murmur2, MurmurHash3_x86_32, OneAtTime, PJW, RS, Rotating, SDBM, ShiftAndXor, SuperFast, XXHash32. | |
| 7 | + | ||
| 8 | + | non-cryptographic 64-bits algorithms | |
| 9 | + | FNV, FNV1a, Murmur2_64, SipHash2_4, XXHash64. | |
| 10 | + | ||
| 11 | + | non-cryptographic 128-bits algorithms | |
| 12 | + | MurmurHash3_x86_128, MurmurHash3_x64_128. | |
| 13 | + | ||
| 14 | + | checksum algorithms | |
| 15 | + | Adler32, All CRC Variants from CRC3 to CRC64. | |
| 16 | + | ||
| 17 | + | cryptographic algorithms | |
| 18 | + | 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. | |
| 19 | + | ||
| 20 | + | HMAC for any of the above. | |
| 21 | + | ||
| 22 | + | PBKDF2_HMAC for any of the above. | |
| 23 | + | ||
| 24 | + | PBKDF_Argon2 (2i, 2d and 2id variants). | |
| 25 | + | ||
| 26 | + | PBKDF_Scrypt. | |
| 27 | + | ||
| 28 | + | ### Supported Compilers | |
| 29 | + | ||
| 30 | + | - FreePascal 3.0.0 and above. | |
| 31 | + | - Delphi 2010 and above. | |
| 32 | + | ||
| 33 | + | ### Installing the Library | |
| 34 | + | ||
| 35 | + | - Method one: use the provided packages in the "Packages" folder. | |
| 36 | + | - Method two: add the Library path and Sub path to your project Search Path. | |
| 37 | + | ||
| 38 | + | ### Example | |
| 39 | + | ||
| 40 | + | 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: | |
| 41 | + | ||
| 42 | + | ``` pascal | |
| 43 | + | uses | |
| 44 | + | //... | |
| 45 | + | HlpIHashInfo, HlpConverters, HlpHashFactory; | |
| 46 | + | ``` | |
| 47 | + | ||
| 48 | + | And the code that generates the HMAC looks something like this: | |
| 49 | + | ||
| 50 | + | ``` pascal | |
| 51 | + | procedure TForm1.Button1Click(Sender: TObject); | |
| 52 | + | var | |
| 53 | + | LHMAC: IHMAC; | |
| 54 | + | tekst, secret_key, hmac512_value: String; | |
| 55 | + | begin | |
| 56 | + | tekst := 'test'; | |
| 57 | + | secret_key := '123'; | |
| 58 | + | LHMAC := THashFactory.THMAC.CreateHMAC(THashFactory.TCrypto.CreateSHA2_512); | |
| 59 | + | LHMAC.Key := TConverters.ConvertStringToBytes(secret_key, TEncoding.UTF8); | |
| 60 | + | hmac512_value := LHMAC.ComputeString(tekst, TEncoding.UTF8).ToString(); | |
| 61 | + | ShowMessage(hmac512_value); | |
| 62 | + | end; | |
| 63 | + | ``` | |
| 64 | + | ||
| 65 | + | ### Unit Tests | |
| 66 | + | ||
| 67 | + | #### For FPC | |
| 68 | + | ||
| 69 | + | Simply compile and run "HashLib.Tests" project in "FreePascal.Tests" Folder. | |
| 70 | + | ||
| 71 | + | #### For Delphi | |
| 72 | + | ||
| 73 | + | Method one, using DUnit Test Runner: to build and run the unit tests for Delphi 10 Seattle (should be similar for other versions) | |
| 74 | + | ||
| 75 | + | - Open Project Options of Unit Test (HashLib.Tests) in "Delphi.Tests" Folder. | |
| 76 | + | - Change Target to All Configurations (Or "Base" In Older Delphi Versions.) | |
| 77 | + | - In Output directory add ".\\\$(Platform)\\\$(Config)" without the quotes. | |
| 78 | + | - In Search path add "\$(BDS)\Source\DUnit\src" without the quotes. | |
| 79 | + | - In Unit output directory add "." without the quotes. | |
| 80 | + | - In Unit scope names (If Available), Delete "DUnitX" from the List. | |
| 81 | + | ||
| 82 | + | Press Ok and save, then build and run. | |
| 83 | + | ||
| 84 | + | Method two (using TestInsight, preferred). | |
| 85 | + | ||
| 86 | + | - Download and Install TestInsight. | |
| 87 | + | - Open Project Options of Unit Test (HashLib.Tests.TestInsight) in **Delphi.Tests** Folder. | |
| 88 | + | - Change Target to All Configurations (Or "Base" In Older Delphi Versions.) | |
| 89 | + | - In Unit scope names (If Available), Delete "DUnitX" from the List. | |
| 90 | + | - 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. | |
| 91 | + | ||
| 92 | + | ### License | |
| 93 | + | ||
| 94 | + | Licensed Under MIT License. | |
| 95 | + | ||
| 96 | + | ### Download | |
| 97 | + | ||
| 98 | + | - <https://github.com/Xor-el/HashLib4Pascal> | |
| 99 | + | ||
| 100 | + | --- | |
| 101 | + | *From the Free Pascal wiki, page "HashLib4Pascal", as it stood on 2024-04-16 after a change by Alextp, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* | |
| 102 | + | Category: Libraries |
