All Projects → brandondahler → Data.hashfunction

brandondahler / Data.hashfunction

Licence: mit
C# library to create a common interface to non-cryptographic hash functions.

Projects that are alternatives of or similar to Data.hashfunction

Plibsys
Highly portable C system library: threads and synchronization primitives, sockets (TCP, UDP, SCTP), IPv4 and IPv6, IPC, hash functions (MD5, SHA-1, SHA-2, SHA-3, GOST), binary trees (RB, AVL) and more. Native code performance.
Stars: ✭ 402 (+77.88%)
Mutual labels:  hash-functions
Smhasher
Hash function quality and speed tests
Stars: ✭ 719 (+218.14%)
Mutual labels:  hash-functions
Meow hash
Official version of the Meow hash, an extremely fast level 3 hash
Stars: ✭ 1,204 (+432.74%)
Mutual labels:  hash-functions
Crypto Hash
Tiny hashing module that uses the native crypto API in Node.js and the browser
Stars: ✭ 501 (+121.68%)
Mutual labels:  hash-functions
Multihash
Self describing hashes - for future proofing
Stars: ✭ 656 (+190.27%)
Mutual labels:  hash-functions
Java Crypto Utils
Java Cryptographic, Encoding and Hash Utilities
Stars: ✭ 15 (-93.36%)
Mutual labels:  hash-functions
T1ha
One of the fastest hash functions
Stars: ✭ 302 (+33.63%)
Mutual labels:  hash-functions
Hash Identifier
Software to identify the different types of hashes used to encrypt data and especially passwords
Stars: ✭ 198 (-12.39%)
Mutual labels:  hash-functions
Highwayhash
Native Go version of HighwayHash with optimized assembly implementations on Intel and ARM. Able to process over 10 GB/sec on a single core on Intel CPUs - https://en.wikipedia.org/wiki/HighwayHash
Stars: ✭ 670 (+196.46%)
Mutual labels:  hash-functions
Scala Hashing
Fast non-cryptographic hash functions for Scala
Stars: ✭ 66 (-70.8%)
Mutual labels:  hash-functions
Cdsa
A library of generic intrusive data structures and algorithms in ANSI C
Stars: ✭ 549 (+142.92%)
Mutual labels:  hash-functions
Zero Allocation Hashing
Zero-allocation hashing for Java
Stars: ✭ 561 (+148.23%)
Mutual labels:  hash-functions
Swift Crypto
Open-source implementation of a substantial portion of the API of Apple CryptoKit suitable for use on Linux platforms.
Stars: ✭ 1,005 (+344.69%)
Mutual labels:  hash-functions
Upash
🔒Unified API for password hashing algorithms
Stars: ✭ 484 (+114.16%)
Mutual labels:  hash-functions
Bitcoin Cryptography Library
Nayuki's implementation of cryptographic primitives used in Bitcoin.
Stars: ✭ 81 (-64.16%)
Mutual labels:  hash-functions
Rhash
Great utility for computing hash sums
Stars: ✭ 352 (+55.75%)
Mutual labels:  hash-functions
Streebog
GOST R 34.11-2012: RFC-6986 cryptographic hash function
Stars: ✭ 24 (-89.38%)
Mutual labels:  hash-functions
Python Hashes
Interesting (non-cryptographic) hashes implemented in pure Python.
Stars: ✭ 213 (-5.75%)
Mutual labels:  hash-functions
Mum Hash
Hashing functions and PRNGs based on them
Stars: ✭ 117 (-48.23%)
Mutual labels:  hash-functions
Nabhash
An extremely fast Non-crypto-safe AES Based Hash algorithm for Big Data
Stars: ✭ 62 (-72.57%)
Mutual labels:  hash-functions

Data.HashFunction License

Data.HashFunction is a C# library to create a common interface to non-cryptographic hash functions and provide implementations of public hash functions. It is licensed under the permissive and OSI approved MIT license.

All functionality of the library is tested using xUnit. A primary requirement for each release is 100% code coverage by these tests.

All code within the libarary is commented using Visual Studio-compatible XML comments.

Status

Master

Build Status Test Status

NuGet

Name Normal
Data.HashFunction.Interfaces Version Status
Data.HashFunction.Core Version Status
Data.HashFunction.BernsteinHash Version Status
Data.HashFunction.Blake2 Version Status
Data.HashFunction.Buzhash Version Status
Data.HashFunction.CityHash Version Status
Data.HashFunction.CRC Version Status
Data.HashFunction.ELF64 Version Status
Data.HashFunction.FNV Version Status
Data.HashFunction.HashAlgorithm Version Status
Data.HashFunction.Jenkins Version Status
Data.HashFunction.MurmurHash Version Status
Data.HashFunction.Pearson Version Status
Data.HashFunction.SpookyHash Version Status
Data.HashFunction.xxHash Version Status

Implementations

All implementation packages depend on the Data.HashFunction.Interfaces and Data.HashFunction.Core NuGet packages.

The following hash functions have been implemented from the most reliable reference that could be found.

  • Bernstein Hash
    • BernsteinHash - Original
    • ModifiedBernsteinHash - Minor update that is said to result in better distribution
  • Blake2
    • Blake2b
  • BuzHash
    • BuzHashBase - Abstract implementation, there is no authoritative implementation
    • DefaultBuzHash - Concrete implementation, uses 256 random 64-bit integers
  • CityHash
  • CRC
    • CRC - Generalized implementation to allow any CRC parameters between 1 and 64 bits.
    • CRCStandards - 71 implementations on top of CRC that use the parameters defined by their respective standard. Standards and their parameters provided by CRC RevEng's catalogue.
  • ELF64
  • FNV
    • FNV1Base - Abstract base of the FNV-1 algorithms
    • FNV1 - Original
    • FNV1a - Minor variation of FNV-1
  • Hash Algorithm Wrapper
    • HashAlgorithmWrapper - Wraps existing instance of a .Net HashAlgorithm
    • HashAlgorithmWrapper - Wraps a managed instance of a .Net HashAlgorithm
  • Jenkins
    • JenkinsOneAtATime - Original
    • JenkinsLookup2 - Improvement upon One-at-a-Time hash function
    • JenkinsLookup3 - Further improvement upon Jenkins' Lookup2 hash function
  • Murmur Hash
    • MurmurHash1 - Original
    • MurmurHash2 - Improvement upon MurmurHash1
    • MurmurHash3 - Further improvement upon MurmurHash2, addresses minor flaws
  • Pearson hashing
    • PearsonBase - Abstract implementation, there is no authoritative implementation
    • WikipediaPearson - Concrete implementation, uses values from Wikipedia article
  • SpookyHash
    • SpookyHashV1 - Original
    • SpookyHashV2 - Improvement upon SpookyHashV1, fixes bug in original specification
  • xxHash
    • xxHash - Original and 64-bit version.

Each family of hash functions is contained within its own project and NuGet package.

Usage

The usage for all hash functions has been standardized and is accessible via the System.Data.HashFunction.IHashFunction and System.Data.HashFunction.IHashFunctionAsync interfaces. The core package, Data.HashFunction.Core, only contains abstract hash function implementations and base functionality for the library. In order to use a specific hashing algorithms, you will need to reference its implementation packages.

IHashFunction implementations should be immutable and stateles. All IHashFunction methods and members should be thread safe.

using System;
using System.Data.HashFunction;
using System.Data.HashFunction.Jenkins;

public class Program
{
    public static readonly IJenkinsOneAtATime _jenkinsOneAtATime = JenkinsOneAtATimeFactory.Instance.Create();
    public static void Main()
    {
        var hashValue = _jenkinsOneAtATime.ComputeHash("foobar");

        Console.WriteLine(hashValue.AsHexString());
    }
}

Release Notes

See Release Notes wiki page.

Contributing

Feel free to propose changes, notify of issues, or contribute code using GitHub! Submit issues and/or pull requests as necessary.

There are no special requirements for change proposal or issue notifications.

Code contributions should follow existing code's methodologies and style, along with XML comments for all public and protected namespaces, classes, and functions added.

License

Data.HashFunction is released under the terms of the MIT license. See LICENSE for more information or see http://opensource.org/licenses/MIT.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].