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