diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2017-01-08 13:54:01 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-01-09 13:58:57 -0500 |
commit | 1ae2324f732c9c4e2fa4ebd885fa1001b70d52e1 (patch) | |
tree | 9d63a575a90f854e8a338cf46e35ecc96d7f6794 /lib/string_helpers.c | |
parent | 2c956a60778cbb6a27e0c7a8a52a91378c90e1d1 (diff) | |
download | linux-1ae2324f732c9c4e2fa4ebd885fa1001b70d52e1.tar.bz2 |
siphash: implement HalfSipHash1-3 for hash tables
HalfSipHash, or hsiphash, is a shortened version of SipHash, which
generates 32-bit outputs using a weaker 64-bit key. It has *much* lower
security margins, and shouldn't be used for anything too sensitive, but
it could be used as a hashtable key function replacement, if the output
is never exposed, and if the security requirement is not too high.
The goal is to make this something that performance-critical jhash users
would be willing to use.
On 64-bit machines, HalfSipHash1-3 is slower than SipHash1-3, so we alias
SipHash1-3 to HalfSipHash1-3 on those systems.
64-bit x86_64:
[ 0.509409] test_siphash: SipHash2-4 cycles: 4049181
[ 0.510650] test_siphash: SipHash1-3 cycles: 2512884
[ 0.512205] test_siphash: HalfSipHash1-3 cycles: 3429920
[ 0.512904] test_siphash: JenkinsHash cycles: 978267
So, we map hsiphash() -> SipHash1-3
32-bit x86:
[ 0.509868] test_siphash: SipHash2-4 cycles: 14812892
[ 0.513601] test_siphash: SipHash1-3 cycles: 9510710
[ 0.515263] test_siphash: HalfSipHash1-3 cycles: 3856157
[ 0.515952] test_siphash: JenkinsHash cycles: 1148567
So, we map hsiphash() -> HalfSipHash1-3
hsiphash() is roughly 3 times slower than jhash(), but comes with a
considerable security improvement.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Reviewed-by: Jean-Philippe Aumasson <jeanphilippe.aumasson@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'lib/string_helpers.c')
0 files changed, 0 insertions, 0 deletions