Upgrade to Digest-SHA-5.47
[p5sagit/p5-mst-13.2.git] / ext / Digest / SHA / t / nistbit.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} || -d "src") ? "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 59C4526AA2CC59F9A5F56B5579BA7108E7CCB61A ^
25 6E42FB84067CFF056C43A49E484997AF23190879 ^
26 C63FBB9A87171A176E6E054890E29A8C5F125F6C ^
27 3109E33C1C4B9A0169D1599169D0E5A520A1E71C ^
28 9195E1E73CC68D7170F44BD1D83CB624BC87FA0B ^
29 64F7C374527278C0436DBC8DE5AABEC2BBF634BC ^
30 154B622EA426FB151B1FF1BE1CE871752B9EDEB4 ^
31 12BDD00FD4038756CBCF8ECDAD1B0CD862603CD8 ^
32 6700F93E1691E83735279E167F67AF61FEE9813B ^
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 1 1 1 ^
40 2 1 1 1 ^
41 3 0 1 1 1 ^
42 2 0 2 2 ^
43 4 1 1 1 2 1 ^
44 3 0 2 2 2 ^
45 4 1 1 2 2 2 ^
46 5 1 2 2 1 1 2 ^
47 5 0 2 2 1 1 3 ^
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 uc($sha->add_bits($bitstr)->hexdigest)
70                 eq shift(@hashes);
71         print "ok ", $testnum++, "\n";
72 }