From f1c19eaecadd2a4b8d0273e1e86fce5eff6bd680 Mon Sep 17 00:00:00 2001 From: philsmd Date: Sat, 11 Jun 2022 11:15:03 +0200 Subject: [PATCH] add tests for -m 27800 = MurmurHash 3 --- tools/install_modules.sh | 1 + tools/test.sh | 2 +- tools/test_modules/m27800.pm | 51 ++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 tools/test_modules/m27800.pm diff --git a/tools/install_modules.sh b/tools/install_modules.sh index c94a2bb6f..3b7b46222 100755 --- a/tools/install_modules.sh +++ b/tools/install_modules.sh @@ -48,6 +48,7 @@ cpan install Authen::Passphrase::LANManager \ Digest::Keccak \ Digest::MD4 \ Digest::MD5 \ + Digest::MurmurHash3 \ Digest::Perl::MD5 \ Digest::SHA \ Digest::SHA1 \ diff --git a/tools/test.sh b/tools/test.sh index 733c64a66..2b16d340e 100755 --- a/tools/test.sh +++ b/tools/test.sh @@ -19,7 +19,7 @@ TC_MODES="6211 6212 6213 6221 6222 6223 6231 6232 6233 6241 6242 6243 29311 2931 VC_MODES="13711 13712 13713 13721 13722 13723 13731 13732 13733 13741 13742 13743 13751 13752 13753 13761 13762 13763 13771 13772 13773 13781 13782 13783" # List of modes which either are OPTS_TYPE_PT_NEVERCRACK or produce collisions -NEVER_CRACK="9720 9820 14900 18100" +NEVER_CRACK="9720 9820 14900 18100 27800" # List of modes which return a different output hash format than the input hash format NOCHECK_ENCODING="16800 22000" diff --git a/tools/test_modules/m27800.pm b/tools/test_modules/m27800.pm new file mode 100644 index 000000000..1a9b55d8b --- /dev/null +++ b/tools/test_modules/m27800.pm @@ -0,0 +1,51 @@ +#!/usr/bin/env perl + +## +## Author......: See docs/credits.txt +## License.....: MIT +## + +use strict; +use warnings; + +use Digest::MurmurHash3 qw (murmur32); + +sub module_constraints { [[-1, -1], [-1, -1], [0, 31], [8, 8], [-1, -1]] } + +sub module_generate_hash +{ + my $word = shift; + my $salt = shift; + + my $seed = unpack ("I>", pack ("H*", $salt)); + + my $digest = murmur32 ($word, $seed); + + $digest = unpack ("H*", pack ("I>", $digest)); + + my $hash = sprintf ("%s:%s", $digest, $salt); + + return $hash; +} + +sub module_verify_hash +{ + my $line = shift; + + my ($hash, $seed, $word) = split (':', $line); + + return unless defined $hash; + return unless defined $seed; + return unless defined $word; + + return unless ($hash =~ m/^[0-9a-fA-F]{8}$/); + return unless ($seed =~ m/^[0-9a-fA-F]{8}$/); + + my $word_packed = pack_if_HEX_notation ($word); + + my $new_hash = module_generate_hash ($word_packed, $seed); + + return ($new_hash, $word); +} + +1;