HashLibPlus is a recommended C++11 hashing library that provides a fluent interface for computing hashes and checksums of strings, files, streams, bytearrays and untyped data to mention but a few.
It also supports Incremental Hashing, Cloning, NullDigest.
All CRC Variants from CRC3 to CRC64
✔️
Adler32
✔️
-
AP
BKDR
Bernstein
Bernstein1
DEK
DJB
ELF
FNV
✔️ -
FNV1a
JS
Jenkins3
Murmur2
MurmurHash3_x86_32
OneAtTime
✔️ -
PJW
RS
Rotating
SDBM
ShiftAndXor
SuperFast
XXHash32
✔️
FNV64
FNV1a64
Murmur2_64
SipHash64_2_4
XXHash64
✔️
MurmurHash3_x86_128
MurmurHash3_x64_128
SipHash128_2_4
✔️
-
MD2
✔️ -
MD4
✔️ -
MD5
✔️ -
SHA-0
✔️ -
SHA-1
✔️ -
SHA-2 (224, 256, 384, 512, 512-224, 512-256)
✔️ -
GOST 34.11-94
✔️ -
GOST R 34.11-2012 (AKA Streebog) (256, 512)
✔️ -
Grindahl (256, 512)
✔️ -
HAS160
✔️ -
RIPEMD (128, 256, 256, 320)
✔️ -
Tiger (128, 160, 192 (Rounds 3, 4, 5))
✔️ -
Tiger2 (128, 160, 192 (Rounds 3, 4, 5))
✔️ -
Snefru (128, 256)
✔️ -
Haval (128, 160, 192, 224, 256 (Rounds 3, 4, 5))
✔️ -
Panama
✔️ -
RadioGatun (RadioGatun32, RadioGatun64)
✔️ -
WhirlPool
✔️ -
Blake2B (160, 256, 384, 512)
✔️ -
Blake2S (128, 160, 224, 256)
✔️ -
SHA-3 (224, 256, 384, 512)
✔️ -
Keccak (224, 256, 288, 384, 512)
✔️ -
Blake2BP
✔️ -
Blake2SP
✔️ -
Blake3
✔️
-
PBKDF2
✔️ -
Argon2 (2i, 2d and 2id variants)
✔️ -
Scrypt
✔️
-
HMAC (all supported hashes)
✔️ -
KMAC (KMAC128, KMAC256)
✔️ -
Blake2MAC (Blake2BMAC, Blake2SMAC)
✔️
-
Shake (Shake-128, Shake-256)
✔️ -
CShake (CShake-128, CShake-256)
✔️ -
Blake2X (Blake2XS, Blake2XB)
✔️ -
KMACXOF (KMAC128XOF, KMAC256XOF)
✔️ -
Blake3XOF
✔️
#include "Base/HashFactory.h"
int main()
{
IHash hash = HashFactory::Crypto::CreateMD5();
IHash clone = hash->Clone();
IHMAC hmac = HashFactory::HMAC::CreateHMAC(hash);
hmac->SetKey(Converters::ConvertStringToBytes("password"));
IHashResult Result1 = hash->ComputeString("Hash");
IHashResult Result2 = hmac->ComputeString("Hash");
bool check = Result1->CompareTo(Result2);
return 0;
}
Please consider using this version HashLibPlus-Reload instead.
To build this library you should have CMake installed and configured on your local machine to work with any C++ compiler such as gcc, g++ and clang. If you already have visual studio installed on your local machine, cmake kind of automatically links with the compiler and therefore builds a visual studio project of the library for you. Visual Studio 2019
was used to build and compile this project. Goodluck! ;)
CMake version 2.30.3, was specifically used to compile this library.
Note: catch2 library was used as the test framework in the HashLibPlus.Tests
project.
Follow the steps below to build for x86 (32-bit) Release mode.
> cmake -G "Visual Studio 16 2019" -A Win32 -S {src_dir} -B {build_dir}
Example: cmake -G "Visual Studio 16 2019" -A Win32 -S . -B x86
Note: The .
used as the source directory indicates the current directory where the cmd interface is pointed to.
> cmake --build {src_dir} --config Release
Follow the steps below to build for x64 (64-bit) Release mode.
> cmake -G "Visual Studio 16 2019" -A x64 -S {src_dir} -B {build_dir}
Example: cmake -G "Visual Studio 16 2019" -A x64 -S . -B x64
Note: The .
used as the source directory indicates the current directory where the cmd interface is pointed to.
> cmake --build {src_dir} --config Release
This command is to build a Visual Studio
project files of the library, where {src_dir} is the parent directory. And {build_src} is the build directory depending on "x86" or "x64".
Download the project full release here
catch2 is the test framework used in this project because of its flexible nature.
To run the unitests in HashLibPlus.Tests project, locate HashLibPlus.Test.exe
in the Release folder of the built project.
The built project outputs two executables and a hashplus.lib
for linking with the Base/HashFactory.h
main header file.
- HashLibPlus.exe
This executable displays a benchmark test analysis of the compiled code speed with regards to your C.P.U capability.
- HashLibPlus.Test.exe
This executable hooks into catch2 process to allow for detailed test results, and other command line options that catch2 supports for those that wish to pass values to catch2 interface.
Depending on how experienced you are with CMake or catch2, you are always free to make pull requests and most especially plug in your favourite hash into the library which might not be available now. Bye!
If you want implementations in other languages, you can check out these
- SharpHash by Mbadiwe Nnaemeka Ronald
- HashLib4Pascal by Ugochukwu Mmaduekwe
- 💵 Bitcoin:
1Mcci95WffSJnV6PsYG7KD1af1gDfUvLe6