11 use Digest::MD5 qw(md5 md5_hex md5_base64);
13 # To update the EBCDIC section even on a Latin 1 platform,
14 # run this script with $ENV{EBCDIC_MD5SUM} set to a true value.
15 # (You'll need to have Perl 5.7.3 or later, to have the Encode installed.)
16 # (And remember that under the Perl core distribution you should
17 # also have the $ENV{PERL_CORE} set to a true value.)
18 # Similarly, to update MacOS section, run with $ENV{MAC_MD5SUM} set.
21 if (ord "A" == 193) { # EBCDIC
23 f383935aa6f80a5eada3a365e0240db5 Changes
24 11e8028ee426273db6b6db270a8bb38c README
25 4c1cbf9fd2ca3611f8f76c0bc559bb91 MD5.pm
26 a6763f297e6346a0c541de105819b01c MD5.xs
27 276da0aa4e9a08b7fe09430c9c5690aa rfc1321.txt
29 } elsif ("\n" eq "\015") { # MacOS
31 531c4466c0d2e510628584f47fc5a589 Changes
32 c95549c6c5e1e1c078b27042f1dc850f README
33 58437b1015d43f47d78c37a2e06bc70c MD5.pm
34 dd630942214a791a56d18f477f8e423e MD5.xs
35 754b9db19f79dbc4992f7166eb0f37ce rfc1321.txt
38 # This is the output of: 'md5sum Changes README MD5.pm MD5.xs rfc1321.txt'
40 b3fdcedb2f50b051c2a9a9009b36ae57 Changes
41 c95549c6c5e1e1c078b27042f1dc850f README
42 58437b1015d43f47d78c37a2e06bc70c MD5.pm
43 dd630942214a791a56d18f477f8e423e MD5.xs
44 754b9db19f79dbc4992f7166eb0f37ce rfc1321.txt
48 if (!(-f "README") && -f "../README") {
49 chdir("..") or die "Can't chdir: $!";
55 eval { require MIME::Base64; };
57 print "# $@: Will not test base64 methods\n";
61 for (split /^/, $EXPECT) {
62 my($md5hex, $file) = split ' ';
65 if ($ENV{PERL_CORE}) {
66 if ($file eq 'rfc1321.txt') { # Don't have it in core.
67 print "ok ", ++$testno, " # Skip: PERL_CORE\n";
71 my @path = qw(ext Digest MD5);
72 my $path = File::Spec->updir;
74 $path = File::Spec->catdir($path, shift @path);
76 $file = File::Spec->catfile($path, $file);
78 # print "# file = $file\n";
80 warn "No such file: $file\n";
83 if ($ENV{EBCDIC_MD5SUM}) {
85 my $data = cat_file($file);
86 Encode::from_to($data, 'latin1', 'cp1047');
87 print md5_hex($data), " $base\n";
90 if ($ENV{MAC_MD5SUM}) {
92 my $data = cat_file($file);
93 Encode::from_to($data, 'latin1', 'MacRoman');
94 print md5_hex($data), " $base\n";
97 my $md5bin = pack("H*", $md5hex);
100 $md5b64 = MIME::Base64::encode($md5bin, "");
101 chop($md5b64); chop($md5b64); # remove padding
106 if (digest_file($file, 'digest') ne $md5bin) {
107 print "$file: Bad digest\n";
111 if (($got = digest_file($file, 'hexdigest')) ne $md5hex) {
112 print "$file: Bad hexdigest: got $got expected $md5hex\n";
116 if ($B64 && digest_file($file, 'b64digest') ne $md5b64) {
117 print "$file: Bad b64digest\n";
121 my $data = cat_file($file);
122 if (md5($data) ne $md5bin) {
123 print "$file: md5() failed\n";
126 if (md5_hex($data) ne $md5hex) {
127 print "$file: md5_hex() failed\n";
130 if ($B64 && md5_base64($data) ne $md5b64) {
131 print "$file: md5_base64() failed\n";
135 if (Digest::MD5->new->add($data)->digest ne $md5bin) {
136 print "$file: MD5->new->add(...)->digest failed\n";
139 if (Digest::MD5->new->add($data)->hexdigest ne $md5hex) {
140 print "$file: MD5->new->add(...)->hexdigest failed\n";
143 if ($B64 && Digest::MD5->new->add($data)->b64digest ne $md5b64) {
144 print "$file: MD5->new->add(...)->b64digest failed\n";
148 my @data = split //, $data;
149 if (md5(@data) ne $md5bin) {
150 print "$file: md5(\@data) failed\n";
153 if (Digest::MD5->new->add(@data)->digest ne $md5bin) {
154 print "$file: MD5->new->add(\@data)->digest failed\n";
157 my $md5 = Digest::MD5->new;
161 if ($md5->digest ne $md5bin) {
162 print "$file: $md5->add()-loop failed\n";
166 print "not " if $failed;
167 print "ok ", ++$testno, "\n";
173 my($file, $method) = @_;
174 $method ||= "digest";
175 #print "$file $method\n";
177 open(FILE, $file) or die "Can't open $file: $!";
178 my $digest = Digest::MD5->new->addfile(*FILE)->$method();
188 open(FILE, $file) or die "Can't open $file: $!";
190 # For PerlIO in case of UTF-8 locales.
191 eval 'binmode(FILE, ":bytes")' if $] >= 5.008;