Skip to content

wilhelmliao/xxHash.NET

Repository files navigation

xxHash.NET

  • Build Status .NET Framework v4.0:NuGet version .NET core 2.0:NuGet version

A .NET implementation of xxHash.

Synopsis

Demo

.NET Fiddle(https://dotnetfiddle.net/dbgN2y)

xxHash API approach

The following snippet demonstrates computing the XXH32 hash value of the input string "test".

byte[] input = Encoding.ASCII.GetBytes("test");     // the data to be hashed
uint result = XXHash.XXH32(input);                  // compute the XXH32 hash value. => '1042293711'
                                                    // NOTE:
                                                    //   you can specified seed as the second parameter.

The following snippet computes the XXH32 hash value of the input file "test.doc".

Stream stream = File.OpenRead(@"C:\test.doc");      // the data to be hashed
XXHash.State32 state = XXHash.CreateState32();      // create and initialize a xxH states instance.
                                                    // NOTE:
                                                    //   xxHash require a xxH state object for keeping
                                                    //   data, seed, and vectors.
                                                    
XXHash.UpdateState32(state, stream);                // puts the file stream into specified xxH state.

uint result = XXHash.DigestState32(state);          // compute the XXH32 hash value.
Supported xxHash APIs:
original xxHash API name XXH32 XXH64
XXHnn() XXHash.XXH32() XXHash.XXH64()
XXHnn_state_t XXHash.State32 XXHash.State64
XXHnn_createState() XXHash.CreateState32() XXHash.CreateState64()
XXHnn_freeState() Not implemented Not implemented
XXHnn_reset() XXHash.ResetState32() XXHash.ResetState64()
XXHnn_update() XXHash.UpdateState32() XXHash.UpdateState64()
XXHnn_digest() XXHash.DigestState32() XXHash.DigestState64()

HashAlgorithm approach

In addition, the assembly also provides XXHash32 and XXHash64 the two implementation classes of System.Security.Cryptography.HashAlgorithm.

The following snippets demonstrate computing the XXH32 hash value with HashAlgorithm approach.

byte[] input = Encoding.ASCII.GetBytes("test");        // the data to be hashed.
using (HashAlgorithm xxhash = XXHash32.Create())
{
  byte[] result = xxhash.ComputeHash(input);           // compute the hash.
}

-- or --

byte[] input = Encoding.ASCII.GetBytes("test");        // the data to be hashed
using (HashAlgorithm xxhash = XXHash32.Create())
{
  xxhash.TransformFinalBlock(input, 0, input.Length);
  byte[] result = xxhash.Hash;                         // retrieves the hash value.
}

NOTE: XXH64 is also supported: you can use xxHash64 class instead of xxHash32.

Versioning


Copyright

Copyright (c) 2015 Wilhelm Liao. See LICENSE for further details.