X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=blobdiff_plain;f=data%2FPVE%2FTools.pm;fp=data%2FPVE%2FTools.pm;h=647fe15fad4a1bd97c41e0e5444de988fb7694db;hp=4ec4b18de3bb63c43cb829763d2edf9bfa6c666d;hb=2d3bca34dd8c334d0078c7e8ad1ae3ae02ce0681;hpb=1dad1ca5b9eb3c516b8a33b4b5eedc05c6ce772f 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;