From: Dietmar Maurer Date: Wed, 28 May 2014 08:27:03 +0000 (+0200) Subject: add FVN digest X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=commitdiff_plain;h=2d3bca34dd8c334d0078c7e8ad1ae3ae02ce0681 add FVN digest Userful for short strings. --- 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;