Coder Social home page Coder Social logo

ron4fun / hashlibplus Goto Github PK

View Code? Open in Web Editor NEW
26.0 5.0 10.0 1.36 MB

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.

License: Other

C++ 95.24% CMake 2.39% C 0.53% Python 1.48% Starlark 0.01% Shell 0.02% Batchfile 0.04% PowerShell 0.02% Objective-C 0.04% Objective-C++ 0.16% Roff 0.07%
cpp crc-algorithms murmurhash siphash md5 sha-hashes gost tiger snefru whirlpool

hashlibplus's Introduction

HashLibPlus License

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.

Available Algorithms

Hashes


Cyclic Redundancy Checks
  • All CRC Variants from CRC3 to CRC64 ✔️
Checksums
  • Adler32 ✔️
Non-Cryptographic Hash Functions

32 bit hashes
  • AP BKDR Bernstein Bernstein1 DEK DJB ELF FNV ✔️

  • FNV1a JS Jenkins3 Murmur2 MurmurHash3_x86_32 OneAtTime ✔️

  • PJW RS Rotating SDBM ShiftAndXor SuperFast XXHash32 ✔️

64 bit hashes
  • FNV64 FNV1a64 Murmur2_64 SipHash64_2_4 XXHash64 ✔️
128 bit hashes
  • MurmurHash3_x86_128 MurmurHash3_x64_128 SipHash128_2_4 ✔️
Cryptographic Hash Functions

  • 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 ✔️

Key Derivation Functions


Password Hashing Schemes (Password Based Key Derivation Functions)

  • PBKDF2 ✔️

  • Argon2 (2i, 2d and 2id variants) ✔️

  • Scrypt ✔️

MAC


  • HMAC (all supported hashes) ✔️

  • KMAC (KMAC128, KMAC256) ✔️

  • Blake2MAC (Blake2BMAC, Blake2SMAC) ✔️

XOF (Extendable Output Function)


  • Shake (Shake-128, Shake-256) ✔️

  • CShake (CShake-128, CShake-256) ✔️

  • Blake2X (Blake2XS, Blake2XB) ✔️

  • KMACXOF (KMAC128XOF, KMAC256XOF) ✔️

  • Blake3XOF ✔️

Usage Examples


#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;
}

Full Visual Studio project without CMake

Please consider using this version HashLibPlus-Reload instead.

How to build library

CMake


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

How to run test

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.

More on this library

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!

Other Implementations


If you want implementations in other languages, you can check out these

Tip Jar


  • 💵 Bitcoin: 1Mcci95WffSJnV6PsYG7KD1af1gDfUvLe6

hashlibplus's People

Contributors

ron4fun avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.