You are looking at historical revision 30095 of this page. It may differ significantly from its current revision.

siphash

Description

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.

The source for this egg is available at Bitbucket.

Requirements

API

Three functions are provided:

[procedure] (make-siphash c d) => procedure

make-siphash constructs a hashing function.

It takes two positive integer arguments c and d and returns a hashing procedure of that number of compression and finalization rounds, respectively.

The returned procedure's signature matches those of siphash-2-4 and siphash-4-8.

[procedure] (siphash-2-4 key) => (procedure message) => integer
[procedure] (siphash-2-4 key message) => integer
[procedure] (siphash-4-8 key) => (procedure message) => integer
[procedure] (siphash-4-8 key message) => integer

siphash-2-4 and siphash-4-8 are predefined hashing procedures.

Each takes one or two SRFI-4 u8vector 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.

Examples

> (define string->u8vector (compose blob->u8vector string->blob))
> (define key (u8vector 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15))
> (define msg (string->u8vector "The rain in Spain falls mainly on the plain."))

> (siphash-2-4 key msg)
; => 8751579407287093977

> ((siphash-4-8 key) msg)
; => 13472556437817646137

> ((make-siphash 8 16)
   key
   (string->u8vector
    "In Hertford, Hereford and Hampshire, hurricanes hardly ever happen."))
; => 9275736844991428064

Author

Evan Hanson

License

Copyright (c) 2013, Evan Hanson, 3-Clause BSD License.