A Scheme implementation of the SipHash family of hash functions.
SipHash is a cryptographically strong family of hash functions designed by Jean-Philippe Aumasson and Daniel J. Bernstein.
This library provides an implementation of these functions for CHICKEN Scheme.
When installing for CHICKEN Scheme, the numbers extension is required.
$ git clone git://bitbucket.org/evhan/siphash.git $ cd siphash $ chicken-install -test
Three functions are provided:
make-siphash constructs a hashing function.
It takes two positive integer arguments
d and returns a
hashing procedure of that number of compression and finalization rounds,
(make-siphash c d) => (procedure key) => (procedure message) => integer
siphash-4-8 are predefined hashing procedures.
Each takes one or two bytevector arguments, the key and message to hash,
and returns a positive integer.
key should have a length of 16, while
message may be any length. If
message isn't given, a prekeyed
hashing function is returned.
The SipHash specification recommends SipHash-2-4 for performance and SipHash-4-8 for cryptographic security.
(siphash-2-4 key) => (procedure message) => integer (siphash-2-4 key message) => integer (siphash-4-8 key) => (procedure message) => integer (siphash-4-8 key message) => integer
> (define key (bytevector 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) > (define msg (string->utf8 "The rain in Spain falls mainly on the plain.")) > (siphash-2-4 key msg) ; => 8751579407287093977 > (let ((hash (siphash-4-8 key))) (hash msg)) ; => 13472556437817646137 > (define siphash-8-16 (make-siphash 8 16)) > (siphash-8-16 key (string->utf8 "In Hertford, Hereford and Hampshire, hurricanes hardly ever happen.")) ; => 9275736844991428064
This library hasn't been tested on 32-bit systems, and may fall over if used on one. It's on the TODO.
Evan Hanson firstname.lastname@example.org
Copyright (c) 2013, Evan Hanson under a BSD-style license.
See LICENSE for full license information.