A Javascript implementation of SipHash-2-4
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
test
.gitignore
.npmignore
LICENSE
README.md
bower.json
index.js
package.json

README.md

siphash.js

A pure Javascript implementation of SipHash-2-4

SipHash is a family of pseudorandom functions optimized for short inputs. Target applications include network traffic authentication and hash-table lookups protected against hash-flooding denial-of-service attacks. SipHash has well-defined security goals and competitive performance.

This package also includes implementations of SipHash-1-3, SipHash128, and SipHash128-1-3.

Installation

Server-side installation (io.js/nodejs):

$ npm install siphash

Browser-side/single-line minified version: use lib/siphash.js.min. or use Bower:

$ bower install siphash

Usage

var siphash = require("siphash"),
    key = siphash.string16_to_key("This is the key!"),
    message = "Short test message",
    hash_hex = siphash.hash_hex(key, message);

A key is an array of 4 integers, and each of them will be clamped to 32 bits in order to build a 128-bit key. For a random key, just generate 4 random integers instead of calling string16_to_key().

var siphash = require("siphash"),
    key = [ 0xdeadbeef, 0xcafebabe, 0x8badf00d, 0x1badb002 ],
    message = "Short test message",
    hash_hex = siphash.hash_hex(key, message);

The 64-bit hash can also be obtained as two 32-bit values with hash(key, message):

var siphash = require("siphash"),
    key = [ 0xdeadbeef, 0xcafebabe, 0x8badf00d, 0x1badb002 ],
    message = "Short test message",
    hash = siphash.hash(key, message),
    hash_msb = hash.h,
    hash_lsb = hash.l;

A 53-bit unsigned integer can be obtained with hash_uint(key, message):

var siphash = require("siphash"),
    key = siphash.string16_to_key("0123456789ABCDEF"),
    message = "Short test message",
    index = siphash.hash_uint(key, message);

SipHash-1-3

SipHash-1-3 is a faster variant of SipHash-2-4 with fewer rounds, which is still believed to be secure enough for typical uses. This variant is available here: siphash13.js

SipHash-double

Although not part of the module, an implementation of SipHash with 128-bit output is also available: siphash-double.js

SipHash-1-3 with a 128-bit output is also part of the package: siphash13-double.js