Skip to content

Chocobo1/Hash

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
March 14, 2023 20:47
src
May 4, 2023 17:17
March 14, 2023 20:39
March 14, 2023 20:39
September 6, 2017 16:29
September 6, 2017 16:29

Hash AppVeyor_badge GithubAction_badge

C++14 header-only easy-to-use hash library

What is included in this library:

Name Variants Website
BLAKE1 224, 256, 384, 512 https://131002.net/blake/
BLAKE2 BLAKE2b, BLAKE2s https://blake2.net/
CRC-32 http://create.stephan-brumme.com/crc32/
Fowler–Noll–Vo (FNV) FNV32_0, FNV32_1, FNV32_1a http://www.isthe.com/chongo/tech/comp/fnv/index.html
FNV64_0, FNV64_1, FNV64_1a
HAS-160 https://www.tta.or.kr/eng/new/standardization/eng_ttastddesc.jsp?stdno=TTAS.KO-12.0011/R2
HAS-V (unfinished) https://link.springer.com/chapter/10.1007%2F3-540-44983-3_15
MD2 https://tools.ietf.org/html/rfc1319
MD4 https://tools.ietf.org/html/rfc1320
MD5 https://tools.ietf.org/html/rfc1321
RIPEMD 128, 160, 256, 320 https://homes.esat.kuleuven.be/~bosselae/ripemd160.html
SipHash https://github.com/veorq/SipHash
SHA-1 https://tools.ietf.org/html/rfc3174
SHA-2 224, 256, 384, 512, 512-224, 512-256 https://tools.ietf.org/html/rfc6234
SHA-3 224, 256, 384, 512, SHAKE-128, SHAKE-256 https://keccak.team/index.html
SHA-3 derived functions CSHAKE-128, CSHAKE-256 http://csrc.nist.gov/groups/ST/hash/derived-functions.html
TupleHash-128, TupleHash-256
SM3 https://tools.ietf.org/html/draft-sca-cfrg-sm3-02
Tiger Tiger1-128, Tiger1-160, Tiger1-192 https://www.cs.technion.ac.il/~biham/Reports/Tiger/
Tiger2-128, Tiger2-160, Tiger2-192
WHIRLPOOL http://www.larc.usp.br/~pbarreto/WhirlpoolPage.html

If you are concerned about security, state-of-the-art performance or whatsoever issue, then take your time and go setup OpenSSL or other proven library

Now some features:

  • No/none tweaking knobs, it just works!
    Works out-of-the-box on little endian & big endian machines
  • Have similar performance to C implementations: see my rudimentary benchmark: Benchmark.md

Prerequisites

Usage

To use this library in your project:

  1. Download this repository and unzip it

  2. Use it like:

    // include the header
    #include "pathToLib/sha1.h"
    
    // If you are using C++14 or C++17, don't forget the "gsl" folder!
    
    void example()
    {
      // Get an instance
      Chocobo1::SHA1 sha1;
    
      // Feed data & data length to it
      sha1.addData("hello", 5);
    
      // ... or just
      sha1.addData("hello");
    
      // Tell it to wrap it up
      sha1.finalize();
    
      // Profit! oops, not really...
      std::string result = sha1.toString();
    
      // A one-liner
      std::string result2 = Chocobo1::SHA1().addData("hello").finalize().toString();
    
      // In byte array form
      auto bytes = Chocobo1::SHA1().addData("hello").finalize().toArray();  // std::array<uint8_t, 20>
    
      // Some hash algorithm provides constexpr result under C++17
      constexpr uint8_t data[] = {0x00, 0xFF};
      constexpr auto bytes2 = Chocobo1::SHA1().addData(data).finalize().toArray();
    }
  3. There is also a driver program included, you can find it at "src/program"

    1. Compile:

      cd src/program
      meson _builddir  # initialize build folder
      cd _builddir
      ninja            # call the `ninja` to build our program
    2. Run:

      $ ./hash -md5 /path/to/file

Run Tests

cd tests
meson _build
cd _build
ninja
./run_tests

Dependencies

  • Microsoft/GSL
    This library is only requried when compiling with C++14 and C++17. In C++20 or later, std::span will be used in place of gsl::span.
    No need to download or install it. This repository included a modified version that will compile locally (only for gsl::span related headers).

License

See LICENSE file

Like it?

Please consider donate

About

C++14 header-only easy-to-use cryptographic hash library

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages