1#!/usr/bin/perl
2
3# Adapted from http://gist.github.com/212780
4
5use strict;
6use warnings;
7
8use Test::More tests => 7;
9use Digest::Whirlpool;
10#use Digest::MD5;
11
12my @digesters;
13
14for ( 1..5 ){
15  push @digesters, {
16      whirlpool => Digest::Whirlpool->new(),
17      #md5 => Digest::MD5->new()
18  };
19}
20
21# seeing that its constant accross instances.
22
23for ( @digesters ) {
24  my $hex = $_->{whirlpool}->hexdigest();
25  my $hexd = $_->{whirlpool}->hexdigest();
26
27  is($hex, $hexd, "Whirlpool: Two digest with no input added are the same");
28
29  #$hex = $_->{md5}->hexdigest();
30  #$hexd = $_->{md5}->hexdigest();
31
32  #is($hex, $hexd, "MD5: Two digest with no input added are the same");
33}
34
35sub some_key
36{
37    my $hash = shift;
38    if (my @keys = keys %$hash) {
39        return $keys[0];
40    }
41    return;
42}
43
44my $tests = 1000;
45
46
47# seeing that within a single digester, the same empty value results in a pseudorandom sequence generation.
48{
49    my (%whirl, %md5);
50
51    $digesters[0]->{whirlpool}->reset();
52    #$digesters[0]->{md5}->reset();
53
54    for ( 1..$tests ) {
55        my $digest = $digesters[0]->{whirlpool}->hexdigest;
56        $whirl{$digest} = 1;
57    }
58
59    is_deeply({ some_key(\%whirl) => 1 }, \%whirl, "Whirlpool: Should only have one digest");
60
61    #for ( 1..$tests ){
62    #    my $digest = $digesters[0]->{md5}->hexdigest;
63    #    $md5{ $digest } = 1;
64    #}
65
66    #is_deeply({ some_key(\%md5) => 1 }, \%md5, "MD5: Should only have one digest");
67}
68
69
70# seeing that the digester doesn't conform to the specification that the rest conform to
71# with regard to hexdigest resetting the state.
72{
73    my (%whirl, %md5);
74
75    $digesters[0]->{whirlpool}->reset();
76    #$digesters[0]->{md5}->reset();
77
78    for ( 1..$tests ) {
79        $digesters[0]->{whirlpool}->add('hello');
80        my $digest = $digesters[0]->{whirlpool}->hexdigest;
81        $whirl{$digest} = 1;
82    }
83
84    is_deeply({ some_key(\%whirl) => 1 }, \%whirl, "Whirlpool: Should only have one digest");
85
86    #for ( 1..$tests ){
87    #    $digesters[0]->{md5}->add('hello');
88    #    my $digest = $digesters[0]->{md5}->hexdigest;
89    #    $md5{ $digest } = 1;
90    #}
91
92    #is_deeply({ some_key(\%md5) => 1 }, \%md5, "MD5: Should only have one digest");
93}
94