hashfunctions

generic hash functions and PRFs: Jenkins, FNV, siphash
git clone https://noulin.net/git/hashfunctions.git
Log | Files | Refs | LICENSE

commit 165c16127dbb1a25de99062b0c36d981804c6ab2
parent c9418c101c9c55c40b45e135a4e387b56195415a
Author: Remy Noulin <loader2x@gmail.com>
Date:   Fri,  9 Nov 2018 17:01:39 -0500

add fnv 1a 64 bit hash

hashfunctions.c | 11 +++++++++++
hashfunctions.h |  1 +
main.c          |  3 +++
package.yml     |  2 +-
4 files changed, 16 insertions(+), 1 deletion(-)

Diffstat:
Mhashfunctions.c | 11+++++++++++
Mhashfunctions.h | 1+
Mmain.c | 3+++
Mpackage.yml | 2+-
4 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/hashfunctions.c b/hashfunctions.c @@ -14,6 +14,17 @@ u32 strHashFNV1A(char *k) { } /** + * FNV 1-a string 64 bit hash. + */ +u64 strHashFNV1A64(char *k) { + u64 hash = 14695981039346656073ULL; + for (const u8* ptr = (const u8*)k; *ptr; ptr++) { + hash = (hash ^ *ptr) * 1099511628211ULL; + } + return hash; +} + +/** * Integer reversible hash function for 32 bits. * Implementation of the Robert Jenkins "4-byte Integer Hashing", * from http://burtleburtle.net/bob/hash/integer.html diff --git a/hashfunctions.h b/hashfunctions.h @@ -5,6 +5,7 @@ #include "md5.h" u32 strHashFNV1A(char *k); +u64 strHashFNV1A64(char *k); u32 u32Hash(u32 k); u64 u64Hash(u64 k); diff --git a/main.c b/main.c @@ -30,6 +30,9 @@ int main(int ARGC, char** ARGV) { // 32bit string hash logVarG(strHashFNV1A("the key")); + // 64bit string hash + logVarG(strHashFNV1A64("the key")); + // siphash logVarG(siphash("the key",strlen("the key"),hash_function_seed)); diff --git a/package.yml b/package.yml @@ -1,6 +1,6 @@ --- name: hashfunctions - version: 0.0.4 + version: 0.0.5 description: "generic hash functions and PRFs: Jenkins, FNV, siphash, murmur2, murmur3, md5" bin: ./hashfunctions.c cflags: -O3 -std=gnu11 -fPIC -pipe