From 2d3bca34dd8c334d0078c7e8ad1ae3ae02ce0681 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Wed, 28 May 2014 10:27:03 +0200 Subject: [PATCH] add FVN digest Userful for short strings. --- data/PVE/Tools.pm | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/data/PVE/Tools.pm b/data/PVE/Tools.pm index 4ec4b18..647fe15 100644 --- a/data/PVE/Tools.pm +++ b/data/PVE/Tools.pm @@ -1019,4 +1019,26 @@ sub assert_if_modified { } } +# Digest for short strings +# like FNV32a, but we only return 31 bits (positive numbers) +sub fnv31a { + my ($string) = @_; + + my $hval = 0x811c9dc5; + + foreach my $c (unpack('C*', $string)) { + $hval ^= $c; + $hval += ( + (($hval << 1) ) + + (($hval << 4) ) + + (($hval << 7) ) + + (($hval << 8) ) + + (($hval << 24) ) ); + $hval = $hval & 0xffffffff; + } + return $hval & 0x7fffffff; +} + +sub fnv31a_hex { return sprintf("%X", fnv31a(@_)); } + 1; -- 2.39.2