aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: fab2a491e907186b6cd8cc48f4fe058473bc67ef (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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 sanity checks (test vectors) for SipHash-2-4, the default
version of SipHash:

```C
  ./siphash24_test
```

verifies 64 test vectors, and

```C
  ./siphash24_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 tweaking the
lines
```C
#define cROUNDS 2
#define dROUNDS 4
```

Obviously, if the number of rounds is modified then the test vectors
won't verify.


128-bit tags (experimental)
---------------------------

In addition to the original SipHash, which returns 64-bit tags, this
reference code implements an experimental mode to return 128-bit tags.
This mode is enabled when the constant `DOUBLE` is defined.

Running 

```sh
  make double
```

will build `siphash24_test_double` and `siphash24_debug_double`.

SipHash with 128-bit tags targets PRF security with 128-bit key and
128-bit tags. In particular, any attack trying up to 2^s should
succeed with probability at most 2^(s - 128).

The **128-bit mode is experimental**, use at your own risk. 


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