#!/usr/bin/perl
# Adapted from http://gist.github.com/212780
use strict;
use warnings;
use Test::More tests => 7;
use Digest::Whirlpool;
#use Digest::MD5;
my @digesters;
for ( 1..5 ){
push @digesters, {
whirlpool => Digest::Whirlpool->new(),
#md5 => Digest::MD5->new()
};
}
# seeing that its constant accross instances.
for ( @digesters ) {
my $hex = $_->{whirlpool}->hexdigest();
my $hexd = $_->{whirlpool}->hexdigest();
is($hex, $hexd, "Whirlpool: Two digest with no input added are the same");
#$hex = $_->{md5}->hexdigest();
#$hexd = $_->{md5}->hexdigest();
#is($hex, $hexd, "MD5: Two digest with no input added are the same");
}
sub some_key
{
my $hash = shift;
if (my @keys = keys %$hash) {
return $keys[0];
}
return;
}
my $tests = 1000;
# seeing that within a single digester, the same empty value results in a pseudorandom sequence generation.
{
my (%whirl, %md5);
$digesters[0]->{whirlpool}->reset();
#$digesters[0]->{md5}->reset();
for ( 1..$tests ) {
my $digest = $digesters[0]->{whirlpool}->hexdigest;
$whirl{$digest} = 1;
}
is_deeply({ some_key(\%whirl) => 1 }, \%whirl, "Whirlpool: Should only have one digest");
#for ( 1..$tests ){
# my $digest = $digesters[0]->{md5}->hexdigest;
# $md5{ $digest } = 1;
#}
#is_deeply({ some_key(\%md5) => 1 }, \%md5, "MD5: Should only have one digest");
}
# seeing that the digester doesn't conform to the specification that the rest conform to
# with regard to hexdigest resetting the state.
{
my (%whirl, %md5);
$digesters[0]->{whirlpool}->reset();
#$digesters[0]->{md5}->reset();
for ( 1..$tests ) {
$digesters[0]->{whirlpool}->add('hello');
my $digest = $digesters[0]->{whirlpool}->hexdigest;
$whirl{$digest} = 1;
}
is_deeply({ some_key(\%whirl) => 1 }, \%whirl, "Whirlpool: Should only have one digest");
#for ( 1..$tests ){
# $digesters[0]->{md5}->add('hello');
# my $digest = $digesters[0]->{md5}->hexdigest;
# $md5{ $digest } = 1;
#}
#is_deeply({ some_key(\%md5) => 1 }, \%md5, "MD5: Should only have one digest");
}