MurmurHash3 Finalization Mix

1.0.0 · active · verified Sun Apr 19

fmix is a JavaScript implementation of the MurmurHash3 x86 finalization mix function, a crucial step in the MurmurHash3 algorithm for generating high-quality hash values. The package provides a lightweight, single-purpose utility to apply this finalization step to a given 32-bit number. The current stable version is 1.0.0, released in July 2021. As a focused cryptographic utility, its release cadence is typically slow, with updates primarily addressing environmental compatibility or minor optimizations rather than new features, signifying a mature and stable API. It differentiates itself by offering only the finalization mix, allowing developers to integrate it into custom hashing implementations or use it alongside other MurmurHash3 components like `murmur-32` or `murmur-128` (from the same author) where modularity is desired, rather than a full end-to-end hashing solution. This allows for fine-grained control over the hashing process. The library is dependency-free, ensuring a minimal footprint.

Common errors

Warnings

Install

Imports

Quickstart

Demonstrates how to install `fmix` and compute the finalization mix for a given 32-bit number, showing its deterministic output.

import fmix from 'fmix';

// The fmix function applies the finalization steps of MurmurHash3
// to an input number, enhancing its distribution and mixing properties.
// This is typically the last step after all input data has been processed
// into a single 32-bit hash state.

const initialHashState = 0xdeadbeef; // Example 32-bit number (hexadecimal)
const finalHash = fmix(initialHashState);

console.log(`Initial hash state: 0x${initialHashState.toString(16)}`);
console.log(`Finalization mix result: ${finalHash}`);
console.log(`Finalization mix result (hex): 0x${finalHash.toString(16)}`);

// Example with a different input
const anotherState = 0x12345678;
const anotherFinalHash = fmix(anotherState);
console.log(`\nAnother state: 0x${anotherState.toString(16)}`);
console.log(`Another finalization mix result: ${anotherFinalHash}`);

// Illustrating the deterministic nature
const sameState = 0xdeadbeef;
const retryFinalHash = fmix(sameState);
console.log(`\nRe-applying to 0x${sameState.toString(16)}: ${retryFinalHash}`);

view raw JSON →