Skip to content

pdimov/hash2

Repository files navigation

Hash2, a hash function library

This library contains an extensible framework for implementing hashing algorithms that can support user-defined types, based on the paper "Types don't know #" by Howard Hinnant, Vinnie Falco and John Bytheway.

It also contains implementations of several popular hashing algorithms:

The hashing algorithms conform to the following concept:

struct HashAlgorithm
{
    typedef /*integral or array<unsigned char, N>*/ result_type; // result type
    typedef /*unsigned integral*/ size_type; // how is container.size() hashed

    HashAlgorithm(); // default-constructible
    explicit HashAlgorithm( uint64_t seed ); // seed-constructible
    HashAlgorithm( unsigned char const* seed, size_t n ); // seed-constructible

    HashAlgorithm( HashAlgorithm const& r ); // copy-constructible
    HashAlgorithm& operator=( HashAlgorithm const& r ); // assignable

    void update( void const* data, size_t n ); // feed bytes

    result_type result(); // obtain result; also advances state,
                          // and can be called multiple times
};

Supported compilers

The library requires C++11. The following compilers:

  • g++ 4.8 or later
  • clang++ 3.9 or later
  • Visual Studio 2015 and above

are being tested on Github Actions and Appveyor.

Documentation

None yet.

Planned Additions

  • Documentation (obv.)
  • SHA2-256, 384, 512
  • Support for endian-independent hashing
  • A std::hash-compatible adaptor
  • A type-erased hash_function
  • A hash2sum example

License

Distributed under the Boost Software License, Version 1.0.

About

A hash function library

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published