Fix Digest::SHA test boilerplate.
[p5sagit/p5-mst-13.2.git] / ext / Digest / SHA / t / nistbyte.t
1 # Test against SHA-1 Sample Vectors from NIST
2 #
3 #       ref: http://csrc.nist.gov/cryptval/shs.html
4
5 use strict;
6
7 my $MODULE;
8
9 BEGIN {
10         $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl";
11         eval "require $MODULE" || die $@;
12         $MODULE->import(qw());
13 }
14
15 BEGIN {
16         if ($ENV{PERL_CORE}) {
17                 chdir 't' if -d 't';
18                 @INC = '../lib';
19         }
20 }
21
22 my $nist_hashes = <<END_OF_NIST_HASHES;
23 DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 ^
24 3CDF2936DA2FC556BFA533AB1EB59CE710AC80E5 ^
25 19C1E2048FA7393CFBF2D310AD8209EC11D996E5 ^
26 CA775D8C80FAA6F87FA62BECA6CA6089D63B56E5 ^
27 71AC973D0E4B50AE9E5043FF4D615381120A25A0 ^
28 A6B5B9F854CFB76701C3BDDBF374B3094EA49CBA ^
29 D87A0EE74E4B9AD72E6847C87BDEEB3D07844380 ^
30 1976B8DD509FE66BF09C9A8D33534D4EF4F63BFD ^
31 5A78F439B6DB845BB8A558E4CEB106CD7B7FF783 ^
32 F871BCE62436C1E280357416695EE2EF9B83695C ^
33 END_OF_NIST_HASHES
34
35 my @hashes = $nist_hashes =~ /\b[0-9A-F]{40}\b/g;
36
37 my $nist_messages = <<END_OF_NIST_MESSAGES;
38 0 1 ^
39 5 0 2 1 2 1 2 ^
40 5 0 1 3 4 4 4 ^
41 7 0 4 3 4 4 1 4 4 ^
42 10 0 4 1 5 3 4 4 3 1 3 4 ^
43 10 0 3 1 6 5 5 1 3 6 6 4 ^
44 13 1 3 2 5 3 3 3 4 6 6 1 4 6 2 ^
45 16 1 3 5 5 1 2 1 3 3 6 3 5 2 3 5 7 2 ^
46 15 1 8 1 5 3 2 7 4 5 6 7 3 3 1 6 3 ^
47 15 1 4 6 8 2 1 4 2 5 1 6 8 8 6 4 7 ^
48 END_OF_NIST_MESSAGES
49
50 my @lines = split(/\n/, $nist_messages);
51
52 print "1..", scalar(@hashes), "\n";
53 my $testnum = 1;
54
55 my $message = "";
56 my $sha = $MODULE->new(1);
57 for (@lines) {
58         next unless /^[\d ^]/;
59         $message .= $_;
60         next unless /\^\s*$/;
61         my @vals = $message =~ /\d+/g; $message = "";
62         my $count = shift(@vals);
63         my $bit = shift(@vals);
64         my $bitstr = "";
65         while (@vals) {
66                 $bitstr .= $bit x shift(@vals);
67                 $bit = 1 - $bit;
68         }
69         print "not " unless
70                 uc($sha->add(pack("B*", $bitstr))->hexdigest)
71                         eq shift(@hashes);
72         print "ok ", $testnum++, "\n";
73 }