Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
/ Hash Public

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

License

Notifications You must be signed in to change notification settings

Chocobo1/Hash

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

95 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 required 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

Sponsor this project

Contributors 3

  •  
  •  
  •  

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.