xref: /openbsd-src/gnu/usr.bin/perl/cpan/Digest-SHA/t/nistbyte.t (revision f2da64fbbbf1b03f09f390ab01267c93dfd77c4c)
1# Test against SHA-1 Sample Vectors from NIST
2
3use strict;
4
5my $MODULE;
6
7BEGIN {
8	$MODULE = (-d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl";
9	eval "require $MODULE" || die $@;
10	$MODULE->import(qw());
11}
12
13BEGIN {
14	if ($ENV{PERL_CORE}) {
15		chdir 't' if -d 't';
16		@INC = '../lib';
17	}
18}
19
20my $nist_hashes = <<END_OF_NIST_HASHES;
21DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 ^
223CDF2936DA2FC556BFA533AB1EB59CE710AC80E5 ^
2319C1E2048FA7393CFBF2D310AD8209EC11D996E5 ^
24CA775D8C80FAA6F87FA62BECA6CA6089D63B56E5 ^
2571AC973D0E4B50AE9E5043FF4D615381120A25A0 ^
26A6B5B9F854CFB76701C3BDDBF374B3094EA49CBA ^
27D87A0EE74E4B9AD72E6847C87BDEEB3D07844380 ^
281976B8DD509FE66BF09C9A8D33534D4EF4F63BFD ^
295A78F439B6DB845BB8A558E4CEB106CD7B7FF783 ^
30F871BCE62436C1E280357416695EE2EF9B83695C ^
31END_OF_NIST_HASHES
32
33my @hashes = $nist_hashes =~ /\b[0-9A-F]{40}\b/g;
34
35my $nist_messages = <<END_OF_NIST_MESSAGES;
360 1 ^
375 0 2 1 2 1 2 ^
385 0 1 3 4 4 4 ^
397 0 4 3 4 4 1 4 4 ^
4010 0 4 1 5 3 4 4 3 1 3 4 ^
4110 0 3 1 6 5 5 1 3 6 6 4 ^
4213 1 3 2 5 3 3 3 4 6 6 1 4 6 2 ^
4316 1 3 5 5 1 2 1 3 3 6 3 5 2 3 5 7 2 ^
4415 1 8 1 5 3 2 7 4 5 6 7 3 3 1 6 3 ^
4515 1 4 6 8 2 1 4 2 5 1 6 8 8 6 4 7 ^
46END_OF_NIST_MESSAGES
47
48my @lines = split(/\n/, $nist_messages);
49
50print "1..", scalar(@hashes), "\n";
51my $testnum = 1;
52
53my $message = "";
54my $sha = $MODULE->new(1);
55for (@lines) {
56	next unless /^[\d ^]/;
57	$message .= $_;
58	next unless /\^\s*$/;
59	my @vals = $message =~ /\d+/g; $message = "";
60	my $count = shift(@vals);
61	my $bit = shift(@vals);
62	my $bitstr = "";
63	while (@vals) {
64		$bitstr .= $bit x shift(@vals);
65		$bit = 1 - $bit;
66	}
67	print "not " unless
68		uc($sha->add(pack("B*", $bitstr))->hexdigest)
69			eq shift(@hashes);
70	print "ok ", $testnum++, "\n";
71}
72