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 = key = siphash message = "Short test message" hash_hex = siphash;
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 = key = 0xdeadbeef 0xcafebabe 0x8badf00d 0x1badb002 message = "Short test message" hash_hex = siphash;
The 64-bit hash can also be obtained as two 32-bit values with
hash(key, message)
:
var siphash = key = 0xdeadbeef 0xcafebabe 0x8badf00d 0x1badb002 message = "Short test message" hash = siphashhashkey message hash_msb = hashh hash_lsb = hashl;
A 53-bit unsigned integer can be obtained with hash_uint(key, message)
:
var siphash = key = siphash message = "Short test message" index = siphash;
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