01.hash.t 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. use Test::More tests => 32;
  2. use File::Temp qw/tempfile/;
  3. use Digest::ssdeep qw/ssdeep_hash ssdeep_hash_file/;
  4. while (my $line = <DATA>) {
  5. next unless $line =~ /^\d+,/;
  6. my ($i, $hash, $file) = split /,/, $line;
  7. ok ( ssdeep_hash(rand_str($i)) eq $hash, "Tested $i characters long" );
  8. }
  9. # Test array output as well
  10. my @expected = qw{24 ivk6g/3pXNpRobD3qebULKLTTSOcHwbKLmp/j/FdkAs5n4QKnn6mU5kOHQpBVUQY Ek6g/3pX/ebD3qebcKLTTcmKm/Tkx5nP};
  11. my @got = ssdeep_hash(rand_str(1477));
  12. is_deeply ( \@got, \@expected, 'Array output' );
  13. # Test hash_file
  14. my ($fh, $filename) = tempfile();
  15. print $fh rand_str(11222);
  16. close $fh;
  17. @expected = qw{192 vuwl3pBbm9YPL2zSUnZBXGmy3977H63khOKmU4LoDdX7tbIi5h/GiLjNIpap7c6Q vuM3vmyp2ZBXGPPj8LapbIi//LLjKpYa};
  18. @got = ssdeep_hash_file($filename);
  19. is_deeply ( \@got, \@expected, 'Hash file (array output)' );
  20. my $expected = '192:vuwl3pBbm9YPL2zSUnZBXGmy3977H63khOKmU4LoDdX7tbIi5h/GiLjNIpap7c6Q:vuM3vmyp2ZBXGPPj8LapbIi//LLjKpYa';
  21. my $got = ssdeep_hash_file($filename);
  22. ok ( $got eq $expected, 'Hash file (string output)' );
  23. unlink $filename;
  24. sub rand_str {
  25. my $i = shift;
  26. srand($i);
  27. return join "", map chr(rand(256)), 1..$i;
  28. }
  29. __DATA__
  30. # Cannot use same-character string to test CTPH.
  31. # The random string is the result of:
  32. #
  33. # for $i = ...
  34. # srand($i);
  35. # print join "", map chr(rand(256)), 1..$i;'
  36. #
  37. # Bash:
  38. # for j in {1..35}; do i=$(echo "1.5^$j/1" | bc); echo -n $i,; i=$i perl -e '$i = $ENV{i}; srand($i); print join "", map chr(rand(256)), 1..$i;' | (ssdeep|grep -v filename) ; done > /tmp/gg
  39. #
  40. #
  41. # bytes,blocksize:hash1:hash2,"filename"
  42. 1,3:v:v,"stdin"
  43. 2,3:Mn:Mn,"stdin"
  44. 3,3:xn:x,"stdin"
  45. 5,3:L:L,"stdin"
  46. 7,3:dzfn:Nn,"stdin"
  47. 11,3:uc1gC:uc1gC,"stdin"
  48. 17,3:uxFtK263n:uxw,"stdin"
  49. 25,3:YtuzKZXO:YtuzKpO,"stdin"
  50. 38,3:sFbOyjIJhgGUnEn:sFiybE,"stdin"
  51. 57,3:PMomopd2UfXYppfj:PMx0QLffj,"stdin"
  52. 86,3:opgonrBMOZB12pieqyrxBRNTDidtHMi:h6rqO/1ITrxBWdT,"stdin"
  53. 129,3:IxbXw09OOwvKtc76KwgSYvTt3lnNNqyph:I9XwMptc76rYL/J,"stdin"
  54. 194,3:Pfo9vJGQBNx9W3wMR+9rKTALvZq48HSR9IELUfjnLRUfmDDfbqjT:Pfov7GgB8MLB71IELmjnNU+DDDqX,"stdin"
  55. 291,6:AfzKNnARBm8mPTRaWGuvJV7n5Z0XB6hL7mSgQHf:oglTRaWjV75eMF/,"stdin"
  56. 437,6:Oujj0YPmJZ+7WduliNE4A2fT+iuYS0PV66XlyQMXm/pIZb9MSm6jxEMUGSFoK/YH:M3kliNE4A27uqPc6MQMY7l69xilhDP+,"stdin"
  57. 774,12:SCUqMuapucCeqQX1EXdjv8/Q/KkdAj92uEpz5SrBa8fHc+dn3MRdYhNiwk:jMu6uvHNjvwQ/KOM0pzoYu3MmNib,"stdin"
  58. 781,24:t2KPOJaY8jGIvIStgvaB/Jb06mP+g0cnXMSNsn:20amIrF/rMwsn,"stdin"
  59. 790,12:EFFzuHf0r7rBnz0yE1IdHpciXyMVzgh+sShm9vZUXK7IGtNZ:E7hv1pciCM0SmBv7tX,"stdin"
  60. 985,24:RuzbjIE/Z+dONABU13ZDj5xzHdBoX975kc8eFFhX:RyXI5dVBexzHvCpXFDX,"stdin"
  61. 1477,24:ivk6g/3pXNpRobD3qebULKLTTSOcHwbKLmp/j/FdkAs5n4QKnn6mU5kOHQpBVUQY:Ek6g/3pX/ebD3qebcKLTTcmKm/Tkx5nP,"stdin"
  62. 2216,48:xYD4x+0DrgLQ337bompHHYsJ8cfF0iXWrnOwFK4B76axlaztA6R5WeHc998AvNbo:xa440D4Q3fompYsjt7XaOoXPsz+6R5Wg,"stdin"
  63. 3325,96:evgnpMXzamDB84B2lbdCvaNpPyJCfA1k9vTR1x1:7md72NIC2JatFTT,"stdin"
  64. 4987,96:gjSMDET+aSRpDP6dEtJnHVq+3FyDa5Skna3vJmTxiV0qDOcQOXjU:UHgbmDSAHVq+34e51nYxqkOqTU,"stdin"
  65. 7481,192:5rn1Ka+ZNuwPf004r/LI/za5ISVh00wEs8NWmOI:5rnkaMPf0lLsST+38Z,"stdin"
  66. 11222,192:vuwl3pBbm9YPL2zSUnZBXGmy3977H63khOKmU4LoDdX7tbIi5h/GiLjNIpap7c6Q:vuM3vmyp2ZBXGPPj8LapbIi//LLjKpYa,"stdin"
  67. 25251,384:HgEQu3dxfXKHYINP/4iKjxhEXuydSP16Vac9TrN+y5sPRa73le/ejEFJjXgNIWo:HgIPK4CojxhEXuGVac9TrNMm+/8NTo,"stdin"
  68. 37876,768:rCuHZxxXi6BXUfX6IFX6UTfrCt/aizyg2JJM4+GDcDXm9qkDftzCF:/HFLBXCcUkaimgKaQUXcXVzY,"stdin"
  69. 85222,1536:wiP27adNLE8kqAomXaQxWOQLqbEqW6OxqNNx+wVmxjlYvvqwnSea:Wa7LvkrvXatOTFOMNxDVmxuvJ4,"stdin"
  70. 287626,6144:vAj/s/W02dAPOeb8I29VgXa3t5MezyGSLh+5Tw/U91tl3/MCL6:IAd6AWetbK3t5j9SLE5R91thB2,"stdin"