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.)
23 # Similarly, to update MacOS section, run with $ENV{MAC_MD5SUM} set.
25 if (ord "A" == 193) { # EBCDIC
27 b362148b17a451f0d81e0ebb2487756e Changes
28 5a591a47e8c40fe4b78c744111511c45 README
29 3157e2d2e27dacddea7c54efddc32520 MD5.pm
30 4850753428db9422e8e5f97b401d5a13 MD5.xs
31 276da0aa4e9a08b7fe09430c9c5690aa rfc1321.txt
33 } elsif ("\n" eq "\015") { # MacOS
35 cc90a85f89b397341f97c9279640fbf5 Changes
36 127952946201e6afc19eb41250c56871 README
37 d87ec77c963d27198b7427156167a5b3 MD5.pm
38 5be7049479ea47d7c257dabcae835720 MD5.xs
39 f9a35714ee1d1d0c5a3a80f4dbea956a rfc1321.txt
43 0106b67df0dbf9f4d65e9fc04907745b Changes
44 3519f3d02c7c91158f732f0f00064657 README
45 88c35ca46c7e8069fb5ae00c091c98d6 MD5.pm
46 1be293491bba726810f8e87671ee0328 MD5.xs
47 754b9db19f79dbc4992f7166eb0f37ce rfc1321.txt
51 if (!(-f "README") && -f "../README") {
52 chdir("..") or die "Can't chdir: $!";
58 eval { require MIME::Base64; };
60 print "# $@: Will not test base64 methods\n";
64 for (split /^/, $EXPECT) {
65 my($md5hex, $file) = split ' ';
67 if ($ENV{PERL_CORE}) {
68 if ($file eq 'rfc1321.txt') { # Don't have it in core.
69 print "ok ", ++$testno, " # Skip: PERL_CORE\n";
73 my @path = qw(ext Digest MD5);
74 my $path = File::Spec->updir;
76 $path = File::Spec->catdir($path, shift @path);
78 $file = File::Spec->catfile($path, $file);
80 # print "# file = $file\n";
82 warn "No such file: $file\n";
85 if ($ENV{EBCDIC_MD5SUM}) {
87 my $data = cat_file($file);
88 Encode::from_to($data, 'latin1', 'cp1047');
89 print md5_hex($data), " $base\n";
92 if ($ENV{MAC_MD5SUM}) {
93 my $data = cat_file($file);
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 (Perl 5.8.0 and later) in case of UTF-8 locales.
191 eval { binmode(FILE, ":bytes"); };