diff options
Diffstat (limited to 'ext/Digest-SHA/t/nistbit.t')
-rw-r--r-- | ext/Digest-SHA/t/nistbit.t | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/ext/Digest-SHA/t/nistbit.t b/ext/Digest-SHA/t/nistbit.t new file mode 100644 index 0000000000..8516195989 --- /dev/null +++ b/ext/Digest-SHA/t/nistbit.t @@ -0,0 +1,72 @@ +# Test against SHA-1 Sample Vectors from NIST +# +# ref: http://csrc.nist.gov/cryptval/shs.html + +use strict; + +my $MODULE; + +BEGIN { + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + eval "require $MODULE" || die $@; + $MODULE->import(qw()); +} + +BEGIN { + if ($ENV{PERL_CORE}) { + chdir 't' if -d 't'; + @INC = '../lib'; + } +} + +my $nist_hashes = <<END_OF_NIST_HASHES; +DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 ^ +59C4526AA2CC59F9A5F56B5579BA7108E7CCB61A ^ +6E42FB84067CFF056C43A49E484997AF23190879 ^ +C63FBB9A87171A176E6E054890E29A8C5F125F6C ^ +3109E33C1C4B9A0169D1599169D0E5A520A1E71C ^ +9195E1E73CC68D7170F44BD1D83CB624BC87FA0B ^ +64F7C374527278C0436DBC8DE5AABEC2BBF634BC ^ +154B622EA426FB151B1FF1BE1CE871752B9EDEB4 ^ +12BDD00FD4038756CBCF8ECDAD1B0CD862603CD8 ^ +6700F93E1691E83735279E167F67AF61FEE9813B ^ +END_OF_NIST_HASHES + +my @hashes = $nist_hashes =~ /\b[0-9A-F]{40}\b/g; + +my $nist_messages = <<END_OF_NIST_MESSAGES; +0 1 ^ +1 1 1 ^ +2 1 1 1 ^ +3 0 1 1 1 ^ +2 0 2 2 ^ +4 1 1 1 2 1 ^ +3 0 2 2 2 ^ +4 1 1 2 2 2 ^ +5 1 2 2 1 1 2 ^ +5 0 2 2 1 1 3 ^ +END_OF_NIST_MESSAGES + +my @lines = split(/\n/, $nist_messages); + +print "1..", scalar(@hashes), "\n"; +my $testnum = 1; + +my $message = ""; +my $sha = $MODULE->new(1); +for (@lines) { + next unless /^[\d ^]/; + $message .= $_; + next unless /\^\s*$/; + my @vals = $message =~ /\d+/g; $message = ""; + my $count = shift(@vals); + my $bit = shift(@vals); + my $bitstr = ""; + while (@vals) { + $bitstr .= $bit x shift(@vals); + $bit = 1 - $bit; + } + print "not " unless uc($sha->add_bits($bitstr)->hexdigest) + eq shift(@hashes); + print "ok ", $testnum++, "\n"; +} |