1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
# Test against long bitwise vectors from Jim Gillogly and Francois Grieu
#
# http://www.chiark.greenend.org.uk/pipermail/ukcrypto/1999-February/003538.html
use strict;
use FileHandle;
my $MODULE;
BEGIN {
$MODULE = (-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';
}
}
# SHA-1 Test Vectors
#
# In the following we use the notation bitstring#n to mean a bitstring
# repeated n (in decimal) times, and we use | for concatenation.
# Therefore 110#3|1 is 1101101101.
#
# Here is a set near 2^32 bits to test the roll-over in the length
# field from one to two 32-bit words:
#
# 110#1431655764|11 1eef5a18 969255a3 b1793a2a 955c7ec2 8cd221a5
# 110#1431655765| 7a1045b9 14672afa ce8d90e6 d19b3a6a da3cb879
# 110#1431655765|1 d5e09777 a94f1ea9 240874c4 8d9fecb6 b634256b
# 110#1431655765|11 eb256904 3c3014e5 1b2862ae 6eb5fb4e 0b851d99
#
# 011#1431655764|01 4CB0C4EF 69143D5B F34FC35F 1D4B19F6 ECCAE0F2
# 011#1431655765 47D92F91 1FC7BB74 DE00ADFC 4E981A81 05556D52
# 011#1431655765|0 A3D7438C 589B0B93 2AA91CC2 446F06DF 9ABC73F0
# 011#1431655765|01 3EEE3E1E 28DEDE2C A444D68D A5675B2F AAAB3203
my @vec110 = ( # 110 rep 1431655764
"11", "1eef5a18969255a3b1793a2a955c7ec28cd221a5",
"110", "7a1045b914672aface8d90e6d19b3a6ada3cb879",
"1101", "d5e09777a94f1ea9240874c48d9fecb6b634256b",
"11011", "eb2569043c3014e51b2862ae6eb5fb4e0b851d99"
);
my @vec011 = ( # 011 rep 1431655764
"01", "4cb0c4ef69143d5bf34fc35f1d4b19f6eccae0f2",
"011", "47d92f911fc7bb74de00adfc4e981a8105556d52",
"0110", "a3d7438c589b0b932aa91cc2446f06df9abc73f0",
"01101", "3eee3e1e28dede2ca444d68da5675b2faaab3203"
);
print "1..", scalar(@vec110) / 2 + scalar(@vec011) / 2, "\n";
my $STATE110 = "gglong0.tmp";
my $STATE011 = "gglong1.tmp";
END { 1 while unlink $STATE110, $STATE011 }
for ($STATE011, $STATE110) {
my $fh = FileHandle->new($_, "w");
for (1 .. 8) { my $line = <DATA>; print $fh $line }
$fh->close;
}
my $reps = 1 << 14;
my $loops = int(1431655764 / $reps);
my $rest = 3 * (1431655764 - $loops * $reps);
sub state110 {
my $i;
my $state;
my $bitstr;
$state = $MODULE->new(1);
if (-r $STATE110) {
if ($state->load($STATE110)) {
return($state);
}
}
$bitstr = pack("B*", "110" x $reps);
$state->reset;
for ($i = 0; $i < $loops; $i++) {
$state->add_bits($bitstr, 3 * $reps);
}
$state->add_bits($bitstr, $rest);
$state->dump($STATE110);
return($state);
}
sub state011 {
my $i;
my $state;
my $bitstr;
$state = $MODULE->new(1);
if (-r $STATE011) {
if ($state->load($STATE011)) {
return($state);
}
}
$bitstr = pack("B*", "011" x $reps);
$state->reset;
for ($i = 0; $i < $loops; $i++) {
$state->add_bits($bitstr, 3 * $reps);
}
$state->add_bits($bitstr, $rest);
$state->dump($STATE011);
return($state);
}
my $i;
my $testnum = 1;
my $state110 = state110();
for ($i = 0; $i < @vec110/2; $i++) {
my $state = $state110->clone;
$state->add_bits($vec110[2*$i]);
print "not " unless $state->hexdigest eq $vec110[2*$i+1];
print "ok ", $testnum++, "\n";
}
my $state011 = state011();
for ($i = 0; $i < @vec011/2; $i++) {
my $state = $state011->clone;
$state->add_bits($vec011[2*$i]);
print "not " unless $state->hexdigest eq $vec011[2*$i+1];
print "ok ", $testnum++, "\n";
}
__DATA__
alg:1
H:7950cbe2:86a45aa0:91ff7dff:29015b42:3912e764:00000000:00000000:00000000
block:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6
blockcnt:508
lenhh:0
lenhl:0
lenlh:0
lenll:4294967292
alg:1
H:dfc51a14:87b4a4b7:ecf19acd:8cbbe40e:03a435f8:00000000:00000000:00000000
block:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d:b6:db:6d
blockcnt:508
lenhh:0
lenhl:0
lenlh:0
lenll:4294967292
|