Data.HashFunction.Interfaces 3.1.2

dotnet add package Data.HashFunction.Interfaces --version 3.1.2                
NuGet\Install-Package Data.HashFunction.Interfaces -Version 3.1.2                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Data.HashFunction.Interfaces" Version="3.1.2" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Data.HashFunction.Interfaces --version 3.1.2                
#r "nuget: Data.HashFunction.Interfaces, 3.1.2"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Data.HashFunction.Interfaces as a Cake Addin
#addin nuget:?package=Data.HashFunction.Interfaces&version=3.1.2

// Install Data.HashFunction.Interfaces as a Cake Tool
#tool nuget:?package=Data.HashFunction.Interfaces&version=3.1.2                

<img src="https://github.com/user-attachments/assets/fc94c7e0-96c6-4dfd-a728-0fd15656b5a4">

Data.HashFunction License

This project was originally maintained at brandondahler/Data.HashFunction before 05/11/2022 (PT). It is maintained by Deskasoft International since then. Join our Discord at https://discord.gg/PrKery9 to discuss about our projects.

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.

Documentation Page

The new documentation page is available at https://deskasoft.dev/projects/data.hashfunction/.

Status

Master

Build Status

NuGet

Name Normal
Data.HashFunction.BernsteinHash Version Status
Data.HashFunction.Blake2 Version Status
Data.HashFunction.Blake3 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
  • Blake3
  • 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<HashAlgorithmT> - 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.

Versioning Guarantees

This library generally abides by Semantic Versioning. Packages are published in MAJOR.MINOR.PATCH version format.

Patch component

An increment of the PATCH component always indicates that an internal-only change was made, generally a bug fix. These changes will not affect the public-facing API in any way, and are always guaranteed to be forward/backwards-compatible with your codebase, any pre-compiled dependencies of your codebase.

Minor component

An increment of the MINOR component indicates that some addition was made to the library, and this addition may not be backwards-compatible with prior versions.

Major component

An increment of the MAJOR component indicates that breaking changes have been made to the library; consumers should check the release notes to determine what changes need to be made.

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.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.

NuGet packages (6)

Showing the top 5 NuGet packages that depend on Data.HashFunction.Interfaces:

Package Downloads
Data.HashFunction.Core

C# library to create a common interface to non-cryptographic hash functions (http://en.wikipedia.org/wiki/List_of_hash_functions#Non-cryptographic_hash_functions) and provide implementations of public hash functions. Includes wrapper for HashAlgorithm-based hash functions.

Data.HashFunction.MetroHash

Data.HashFunction implementation of MetroHash (https://github.com/jandrewrogers/MetroHash).

Data.HashFunction.FarmHash

Data.HashFunction implementation of FarmHash (https://github.com/google/farmhash).

Data.HashFunction.Blake2

Data.HashFunction implementation of BLAKE2 hash (http://blake2.net/).

Data.HashFunction.Blake3

Data.HashFunction implementation of BLAKE3 hash (https://en.wikipedia.org/wiki/BLAKE_(hash_function)#BLAKE3).

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
3.1.2 551 11/5/2024
3.1.1 497 11/5/2024
3.0.1 497 11/3/2024