11 use Digest::MD5 qw(md5 md5_hex md5_base64);
14 # This is the output of: 'md5sum Changes README MD5.pm MD5.xs rfc1321.txt'
18 # To update the EBCDIC section even on a Latin 1 platform,
19 # run this script with $ENV{EBCDIC_MD5SUM} set to a true value.
20 # (You'll need to have Perl 5.7.3 or later, to have the Encode installed.)
21 # (And remember that under the Perl core distribution you should
22 # also have the $ENV{PERL_CORE} set to a true value.)
24 if (ord "A" == 193) { # EBCDIC
26 a1ee2b18d1e05bdde3a93009e7f9dfda Changes
27 5a591a47e8c40fe4b78c744111511c45 README
28 c9c83e6dbad5f41722338e67d4428077 MD5.pm
29 4850753428db9422e8e5f97b401d5a13 MD5.xs
30 276da0aa4e9a08b7fe09430c9c5690aa rfc1321.txt
34 3866f3543ef41421c6aed3f198e2e9f5 Changes
35 3519f3d02c7c91158f732f0f00064657 README
36 01cd8fd24bd46ce1db53074d2af6001a MD5.pm
37 1be293491bba726810f8e87671ee0328 MD5.xs
38 754b9db19f79dbc4992f7166eb0f37ce rfc1321.txt
42 if (!(-f "README") && -f "../README") {
43 chdir("..") or die "Can't chdir: $!";
49 eval { require MIME::Base64; };
51 print "# $@: Will not test base64 methods\n";
55 for (split /^/, $EXPECT) {
56 my($md5hex, $file) = split ' ';
58 if ($ENV{PERL_CORE}) {
59 if ($file eq 'rfc1321.txt') { # Don't have it in core.
60 print "ok ", ++$testno, " # Skip: PERL_CORE\n";
64 my @path = qw(ext Digest MD5);
65 my $path = File::Spec->updir;
67 $path = File::Spec->catdir($path, shift @path);
69 $file = File::Spec->catfile($path, $file);
71 # print "# file = $file\n";
73 warn "No such file: $file\n";
76 if ($ENV{EBCDIC_MD5SUM}) {
78 my $data = cat_file($file);
79 from_to($data, 'latin1', 'cp1047');
80 print md5_hex($data), " $base\n";
83 my $md5bin = pack("H*", $md5hex);
86 $md5b64 = MIME::Base64::encode($md5bin, "");
87 chop($md5b64); chop($md5b64); # remove padding
92 if (digest_file($file, 'digest') ne $md5bin) {
93 print "$file: Bad digest\n";
97 if (($got = digest_file($file, 'hexdigest')) ne $md5hex) {
98 print "$file: Bad hexdigest: got $got expected $md5hex\n";
102 if ($B64 && digest_file($file, 'b64digest') ne $md5b64) {
103 print "$file: Bad b64digest\n";
107 my $data = cat_file($file);
108 if (md5($data) ne $md5bin) {
109 print "$file: md5() failed\n";
112 if (md5_hex($data) ne $md5hex) {
113 print "$file: md5_hex() failed\n";
116 if ($B64 && md5_base64($data) ne $md5b64) {
117 print "$file: md5_base64() failed\n";
121 if (Digest::MD5->new->add($data)->digest ne $md5bin) {
122 print "$file: MD5->new->add(...)->digest failed\n";
125 if (Digest::MD5->new->add($data)->hexdigest ne $md5hex) {
126 print "$file: MD5->new->add(...)->hexdigest failed\n";
129 if ($B64 && Digest::MD5->new->add($data)->b64digest ne $md5b64) {
130 print "$file: MD5->new->add(...)->b64digest failed\n";
134 my @data = split //, $data;
135 if (md5(@data) ne $md5bin) {
136 print "$file: md5(\@data) failed\n";
139 if (Digest::MD5->new->add(@data)->digest ne $md5bin) {
140 print "$file: MD5->new->add(\@data)->digest failed\n";
143 my $md5 = Digest::MD5->new;
147 if ($md5->digest ne $md5bin) {
148 print "$file: $md5->add()-loop failed\n";
152 print "not " if $failed;
153 print "ok ", ++$testno, "\n";
159 my($file, $method) = @_;
160 $method ||= "digest";
161 #print "$file $method\n";
163 open(FILE, $file) or die "Can't open $file: $!";
164 my $digest = Digest::MD5->new->addfile(*FILE)->$method();
174 open(FILE, $file) or die "Can't open $file: $!";