|
Packit |
fa4fcc |
# Test against SHA-1 Sample Vectors from NIST
|
|
Packit |
fa4fcc |
|
|
Packit |
fa4fcc |
use strict;
|
|
Packit |
fa4fcc |
use Digest::SHA;
|
|
Packit |
fa4fcc |
|
|
Packit |
fa4fcc |
my $nist_hashes = <
|
|
Packit |
fa4fcc |
DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 ^
|
|
Packit |
fa4fcc |
3CDF2936DA2FC556BFA533AB1EB59CE710AC80E5 ^
|
|
Packit |
fa4fcc |
19C1E2048FA7393CFBF2D310AD8209EC11D996E5 ^
|
|
Packit |
fa4fcc |
CA775D8C80FAA6F87FA62BECA6CA6089D63B56E5 ^
|
|
Packit |
fa4fcc |
71AC973D0E4B50AE9E5043FF4D615381120A25A0 ^
|
|
Packit |
fa4fcc |
A6B5B9F854CFB76701C3BDDBF374B3094EA49CBA ^
|
|
Packit |
fa4fcc |
D87A0EE74E4B9AD72E6847C87BDEEB3D07844380 ^
|
|
Packit |
fa4fcc |
1976B8DD509FE66BF09C9A8D33534D4EF4F63BFD ^
|
|
Packit |
fa4fcc |
5A78F439B6DB845BB8A558E4CEB106CD7B7FF783 ^
|
|
Packit |
fa4fcc |
F871BCE62436C1E280357416695EE2EF9B83695C ^
|
|
Packit |
fa4fcc |
END_OF_NIST_HASHES
|
|
Packit |
fa4fcc |
|
|
Packit |
fa4fcc |
my @hashes = $nist_hashes =~ /\b[0-9A-F]{40}\b/g;
|
|
Packit |
fa4fcc |
|
|
Packit |
fa4fcc |
my $nist_messages = <
|
|
Packit |
fa4fcc |
0 1 ^
|
|
Packit |
fa4fcc |
5 0 2 1 2 1 2 ^
|
|
Packit |
fa4fcc |
5 0 1 3 4 4 4 ^
|
|
Packit |
fa4fcc |
7 0 4 3 4 4 1 4 4 ^
|
|
Packit |
fa4fcc |
10 0 4 1 5 3 4 4 3 1 3 4 ^
|
|
Packit |
fa4fcc |
10 0 3 1 6 5 5 1 3 6 6 4 ^
|
|
Packit |
fa4fcc |
13 1 3 2 5 3 3 3 4 6 6 1 4 6 2 ^
|
|
Packit |
fa4fcc |
16 1 3 5 5 1 2 1 3 3 6 3 5 2 3 5 7 2 ^
|
|
Packit |
fa4fcc |
15 1 8 1 5 3 2 7 4 5 6 7 3 3 1 6 3 ^
|
|
Packit |
fa4fcc |
15 1 4 6 8 2 1 4 2 5 1 6 8 8 6 4 7 ^
|
|
Packit |
fa4fcc |
END_OF_NIST_MESSAGES
|
|
Packit |
fa4fcc |
|
|
Packit |
fa4fcc |
my @lines = split(/\n/, $nist_messages);
|
|
Packit |
fa4fcc |
|
|
Packit |
fa4fcc |
print "1..", scalar(@hashes), "\n";
|
|
Packit |
fa4fcc |
my $testnum = 1;
|
|
Packit |
fa4fcc |
|
|
Packit |
fa4fcc |
my $message = "";
|
|
Packit |
fa4fcc |
my $sha = Digest::SHA->new(1);
|
|
Packit |
fa4fcc |
for (@lines) {
|
|
Packit |
fa4fcc |
next unless /^[\d ^]/;
|
|
Packit |
fa4fcc |
$message .= $_;
|
|
Packit |
fa4fcc |
next unless /\^\s*$/;
|
|
Packit |
fa4fcc |
my @vals = $message =~ /\d+/g; $message = "";
|
|
Packit |
fa4fcc |
my $count = shift(@vals);
|
|
Packit |
fa4fcc |
my $bit = shift(@vals);
|
|
Packit |
fa4fcc |
my $bitstr = "";
|
|
Packit |
fa4fcc |
while (@vals) {
|
|
Packit |
fa4fcc |
$bitstr .= $bit x shift(@vals);
|
|
Packit |
fa4fcc |
$bit = 1 - $bit;
|
|
Packit |
fa4fcc |
}
|
|
Packit |
fa4fcc |
print "not " unless
|
|
Packit |
fa4fcc |
uc($sha->add(pack("B*", $bitstr))->hexdigest)
|
|
Packit |
fa4fcc |
eq shift(@hashes);
|
|
Packit |
fa4fcc |
print "ok ", $testnum++, "\n";
|
|
Packit |
fa4fcc |
}
|