From a10103ed9735b083200dfb78233fce325a9329dc Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Sat, 1 Nov 2025 14:21:37 -0700 Subject: Add hash library --- hash/src/fnv1a.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 hash/src/fnv1a.c (limited to 'hash/src/fnv1a.c') diff --git a/hash/src/fnv1a.c b/hash/src/fnv1a.c new file mode 100644 index 0000000..32cb538 --- /dev/null +++ b/hash/src/fnv1a.c @@ -0,0 +1,23 @@ +#include + +#include + +#define FNV_PRIME 2166136261 +#define FNV_OFFSET_BASIS 16777619 + +uint32_t fnv1a_32(const void* buffer, size_t size) { + assert(buffer); + return fnv1a32_update(fnv1a32_begin(), buffer, size); +} + +uint32_t fnv1a32_begin() { return FNV_PRIME; } + +uint32_t fnv1a32_update(uint32_t hash, const void* buffer, size_t size) { + assert(buffer); + const uint8_t* bytes = buffer; + for (size_t i = 0; i < size; i++) { + hash = hash ^ bytes[i]; + hash = hash * FNV_OFFSET_BASIS; + } + return hash; +} -- cgit v1.2.3