# SipHash Reference implementation of SipHash, a family of pseudorandom functions optimized for speed on short messages. SipHash was designed as a mitigation to [hash-flooding DoS attacks](https://131002.net/siphash/siphashdos_29c3_slides.pdf). It is now used in the hash tables implementation of Python, Ruby, Perl 5, etc. SipHash was designed by [Jean-Philippe Aumasson](https://131002.net) and [Daniel J. Bernstein](http://cr.yp.to). ## Usage Running ```sh make ``` will build tests for * SipHash-2-4, the default version of SipHash returning 64-bit tags * SipHash-2-4 with doubled tag size, i.e. 128-bit tags * HalfSipHash-2-4, a version of SipHash working with 32-bit words and returning 32-bit tags by default * HalfSipHash-2-4 with doubled tag size, i.e. 64-bit tags ```C ./test ``` verifies 64 test vectors, and ```C ./debug ``` does the same and prints intermediate values. The code can be adapted to implement SipHash-*c*-*d*, the version of SipHash with *c* compression rounds and *d* finalization rounds, by defining `cROUNDS` or `dROUNDS` when compiling. This can be done with `-D` command line arguments to many compilers such as below. ```sh gcc -Wall --std=c99 -DcROUNDS=2 -DdROUNDS=4 siphash.c halfsiphash.c test.c -o test ``` The `makefile` also takes *c* and *d* rounds values as parameters. ```sh make cROUNDS=2 dROUNDS=4 ``` Obviously, if the number of rounds is modified then the test vectors won't verify. ## Intellectual property The SipHash reference code is released under [CC0 license](https://creativecommons.org/publicdomain/zero/1.0/), a public domain-like licence. We aren't aware of any patents or patent applications relevant to SipHash, and we aren't planning to apply for any. ## References The [SipHash page](https://131002.net/siphash) includes * a list of third-party implementations and modules * a list of projects using SipHash * references to cryptanalysis results