Commit | Line | Data |
747da336 |
1 | use strict; |
2 | |
3 | my $MODULE; |
4 | |
5 | BEGIN { |
72aa8e26 |
6 | $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; |
747da336 |
7 | eval "require $MODULE" || die $@; |
8 | $MODULE->import(qw()); |
9 | } |
10 | |
11 | BEGIN { |
12 | if ($ENV{PERL_CORE}) { |
13 | chdir 't' if -d 't'; |
14 | @INC = '../lib'; |
15 | } |
16 | } |
17 | |
18 | my $numtests = 4; |
19 | print "1..$numtests\n"; |
20 | |
21 | # Here's the bitstring to test against, and its SHA-1 digest |
22 | |
23 | my $ONEBITS = pack("B*", "1" x 80000); |
24 | my $digest = "11003389959355c2773af6b0f36d842fe430ec49"; |
25 | |
26 | my $state = $MODULE->new("sHa1"); |
27 | my $testnum = 1; |
28 | |
29 | $state->add_bits($ONEBITS, 80000); |
30 | print "not " unless $state->hexdigest eq $digest; |
31 | print "ok ", $testnum++, "\n"; |
32 | |
33 | # buffer using a series of increasingly large bitstrings |
34 | |
35 | # Note that (1 + 2 + ... + 399) + 200 = 80000 |
36 | |
37 | for (1 .. 399) { |
38 | $state->add_bits($ONEBITS, $_); |
39 | } |
40 | $state->add_bits($ONEBITS, 200); |
41 | |
42 | print "not " unless $state->hexdigest eq $digest; |
43 | print "ok ", $testnum++, "\n"; |
44 | |
45 | # create a buffer-alignment nuisance |
46 | |
47 | $state = $MODULE->new("1"); |
48 | |
49 | $state->add_bits($ONEBITS, 1); |
50 | for (1 .. 99) { |
51 | $state->add_bits($ONEBITS, 800); |
52 | } |
53 | $state->add_bits($ONEBITS, 799); |
54 | |
55 | print "not " unless $state->hexdigest eq $digest; |
56 | print "ok ", $testnum++, "\n"; |
57 | |
58 | # buffer randomly-sized bitstrings |
59 | |
60 | my $reps = 80000; |
61 | my $maxbits = 8 * 127; |
62 | |
63 | $state = $MODULE->new(1); |
64 | |
65 | while ($reps > $maxbits) { |
66 | my $num = int(rand($maxbits)); |
67 | $state->add_bits($ONEBITS, $num); |
68 | $reps -= $num; |
69 | } |
70 | $state->add_bits($ONEBITS, $reps); |
71 | |
72 | print "not " unless $state->hexdigest eq $digest; |
73 | print "ok ", $testnum++, "\n"; |