X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/14d7100dc1e40351ee02bd1c0d2f1496f547b9ec..573eadb534c42c4feace5e493cc135dd5e7b00d9:/unihash-check.pl diff --git a/unihash-check.pl b/unihash-check.pl new file mode 100644 index 0000000..72c3b9b --- /dev/null +++ b/unihash-check.pl @@ -0,0 +1,47 @@ +#! /usr/bin/perl + +my $MOD = 0x04c11db7; + +sub gfmul { + my ($x, $y) = @_; + my $a = 0; + + while ($y) { + if ($y & 1) { $a ^= $x }; + if ($x & 0x80000000) { $x <<= 1; $x ^= $MOD; } + else { $x <<= 1; } + $y >>= 1; + } + return $a; +} + +sub hash { + my ($k, $msg) = @_; + my $h = $k; + for (my $i = 0; $i < length $msg; $i++) { + my $m = ord(substr($msg, $i, 1)); + $h = gfmul($h ^ $m, $k); + } + printf " 0x%08x \"%s\" 0x%08x;\n", $k, $msg, $h; +} + +print <