A FFI plugin package that implements xxHash, inspired by crypto.

The following hashing algorithms are supported:

  • XXH32
  • XXH64
  • XXH3 (XXH3-64, XXH3-128)

Usage

Digest on a single input

To hash a list of bytes, invoke the convert method on the xxh32, xxh64 or xxh3 objects.

import 'package:xxhash/xxhash.dart';
import 'dart:convert'; // for the utf8.encode method

void main() {
  var bytes = utf8.encode("foobar"); // data being hashed

  var digest = xxh32.convert(bytes);

  print("Digest as bytes: ${digest.bytes}");
  print("Digest as hex string: $digest");
}

Digest on chunked input

If the input data is not available as a single list of bytes, or needs to be chunked, use the chunked conversion approach.

Invoke the startChunkedConversion method to create a sink for the input data. On the sink, invoke the add method for each chunk of input data, and invoke the close method when all the chunks have been added. The digest can then be retrieved from the Sink<Digest> used to create the input data sink.

import 'dart:convert';

import 'package:convert/convert.dart';
import 'package:xxhash/xxhash.dart';

void main() {
  var firstChunk = utf8.encode("foo");
  var secondChunk = utf8.encode("bar");

  var output = AccumulatorSink<Digest>();
  var input = xxh32.startChunkedConversion(output);
  input.add(firstChunk);
  input.add(secondChunk); // call `add` for every chunk of input data
  input.close();
  var digest = output.events.single;

  print("Digest as bytes: ${digest.bytes}");
  print("Digest as hex string: $digest");
}

The above example uses the AccumulatorSink class that comes with the convert package. It is capable of accumulating multiple events, but in this usage only a single Digest is added to it when the data sink's close method is invoked.

Shared Dynamic Library

Linux

If not already installed, Run the following command to download libxxhash on Linux:

sudo apt install libxxhash

Windows

Run the following command to download libxxhash on Windows using MSYS:

pacman -S libxxhash

Make sure the MSYS/usr/bin is available to the system environment.

If Environment Variable is not available

xxhash can link the shared library using XXHASH.setDynamicLibraryPath.

The given folder path can be either absolute or relative to the current working directory.

XXHash.setDynamicLibraryPath("<path/to/folder>");

Libraries

xxhash
A library for the xxHash algorithm.