Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package perl-Digest-Perl-MD5 for
openSUSE:Factory checked in at 2026-02-12 17:25:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Digest-Perl-MD5 (Old)
and /work/SRC/openSUSE:Factory/.perl-Digest-Perl-MD5.new.1977 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Digest-Perl-MD5"
Thu Feb 12 17:25:49 2026 rev:11 rq:1332519 version:1.910.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/perl-Digest-Perl-MD5/perl-Digest-Perl-MD5.changes
2025-02-10 18:19:44.465545273 +0100
+++
/work/SRC/openSUSE:Factory/.perl-Digest-Perl-MD5.new.1977/perl-Digest-Perl-MD5.changes
2026-02-12 17:26:24.852865283 +0100
@@ -1,0 +2,16 @@
+Sun Feb 1 06:12:09 UTC 2026 - Tina Müller <[email protected]>
+
+- updated to 1.910.0 (1.91)
+ see /usr/share/doc/packages/perl-Digest-Perl-MD5/CHANGES
+
+ 1.91: Performance and maintenance release:
+ - ~11% performance improvement on 64-bit systems (reduced masking
overhead)
+ - Added GitHub Actions CI workflows
+ - Code reformatted with perltidy
+
+ 1.9: Bug fix release:
+ - RT#78392: Localize $_ to protect calling modules from clobbering
+ - RT#85872: Fixed /usr/bin/false shebang in tools/md5
+ - RT#86853: Fixed typos in documentation
+
+-------------------------------------------------------------------
Old:
----
Digest-Perl-MD5-1.9.tar.gz
New:
----
Digest-Perl-MD5-1.91.tar.gz
README.md
_scmsync.obsinfo
build.specials.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Digest-Perl-MD5.spec ++++++
--- /var/tmp/diff_new_pack.Sgbcl1/_old 2026-02-12 17:26:25.580896168 +0100
+++ /var/tmp/diff_new_pack.Sgbcl1/_new 2026-02-12 17:26:25.584896338 +0100
@@ -1,7 +1,7 @@
#
# spec file for package perl-Digest-Perl-MD5
#
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,15 +18,16 @@
%define cpan_name Digest-Perl-MD5
Name: perl-Digest-Perl-MD5
-Version: 1.900.0
+Version: 1.910.0
Release: 0
-# 1.9 -> normalize -> 1.900.0
-%define cpan_version 1.9
+# 1.91 -> normalize -> 1.910.0
+%define cpan_version 1.91
License: Artistic-1.0 OR GPL-1.0-or-later
Summary: Perl Implementation of Rivest's MD5 algorithm
URL: https://metacpan.org/release/%{cpan_name}
Source0:
https://cpan.metacpan.org/authors/id/D/DE/DELTA/%{cpan_name}-%{cpan_version}.tar.gz
Source1: cpanspec.yml
+Source100: README.md
BuildArch: noarch
BuildRequires: perl
BuildRequires: perl-macros
@@ -35,15 +36,15 @@
%{perl_requires}
%description
-This modules has the same interface as the much faster 'Digest::MD5'. So
-you can easily exchange them, e.g.
+This module has the same interface as the much faster 'Digest::MD5'. So you
+can easily exchange them, e.g.
BEGIN {
eval {
require Digest::MD5;
import Digest::MD5 'md5_hex'
};
- if ($@) { # ups, no Digest::MD5
+ if ($@) { # oops, no Digest::MD5
require Digest::Perl::MD5;
import Digest::Perl::MD5 'md5_hex'
}
@@ -56,7 +57,7 @@
Digest::Perl::MD5 and use Digest::MD5 as normal, it falls back to
Digest::Perl::MD5 if it cannot load its object files.
-For a detailed Documentation see the 'Digest::MD5' module.
+For detailed documentation see the 'Digest::MD5' module.
%prep
%autosetup -n %{cpan_name}-%{cpan_version} -p1
@@ -76,5 +77,5 @@
%perl_gen_filelist
%files -f %{name}.files
-%doc CHANGES rand.f
+%doc CHANGES rand.f README.md
++++++ Digest-Perl-MD5-1.9.tar.gz -> Digest-Perl-MD5-1.91.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Digest-Perl-MD5-1.9/CHANGES
new/Digest-Perl-MD5-1.91/CHANGES
--- old/Digest-Perl-MD5-1.9/CHANGES 2013-04-11 11:20:14.000000000 +0200
+++ new/Digest-Perl-MD5-1.91/CHANGES 2026-01-31 21:00:15.000000000 +0100
@@ -1,3 +1,13 @@
+1.91: Performance and maintenance release:
+ - ~11% performance improvement on 64-bit systems (reduced masking
overhead)
+ - Added GitHub Actions CI workflows
+ - Code reformatted with perltidy
+
+1.9: Bug fix release:
+ - RT#78392: Localize $_ to protect calling modules from clobbering
+ - RT#85872: Fixed /usr/bin/false shebang in tools/md5
+ - RT#86853: Fixed typos in documentation
+
1.8: Workaround for older perl
- Josh Clark suggested substr workaround needed by 5.004
@@ -19,7 +29,7 @@
1.4: Removed obsolete sum() function (hint from Guido Flohr)
round() function is now dynamically generated,
- different code for 32bit and 64bit architechtures.
+ different code for 32-bit and 64-bit architectures.
Global 'use integer' (except for rotate_left()).
Faster than 1.3.
@@ -32,5 +42,5 @@
Using 'use integer'.
1.0: Fix for big endian machines.
- Performancetuning.
+ Performance tuning.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Digest-Perl-MD5-1.9/MANIFEST
new/Digest-Perl-MD5-1.91/MANIFEST
--- old/Digest-Perl-MD5-1.9/MANIFEST 2013-12-14 14:08:23.000000000 +0100
+++ new/Digest-Perl-MD5-1.91/MANIFEST 2026-01-31 21:00:42.000000000 +0100
@@ -1,6 +1,6 @@
MANIFEST Your are reading it!
Makefile.PL Makefile Maker
-README Who's who, what's what
+README.md Who's who, what's what
lib/Digest/Perl/MD5.pm The cause of all this.
test.pl Test suite
tools/md5-test.pl Compare D::MD5 with D::P::MD5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Digest-Perl-MD5-1.9/META.json
new/Digest-Perl-MD5-1.91/META.json
--- old/Digest-Perl-MD5-1.9/META.json 2013-12-14 14:08:22.000000000 +0100
+++ new/Digest-Perl-MD5-1.91/META.json 2026-01-31 21:00:42.000000000 +0100
@@ -4,13 +4,13 @@
"Christian Lackas <[email protected]>"
],
"dynamic_config" : 1,
- "generated_by" : "ExtUtils::MakeMaker version 6.72, CPAN::Meta::Converter
version 2.120351",
+ "generated_by" : "ExtUtils::MakeMaker version 7.62, CPAN::Meta::Converter
version 2.150010",
"license" : [
"unknown"
],
"meta-spec" : {
"url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
- "version" : "2"
+ "version" : 2
},
"name" : "Digest-Perl-MD5",
"no_index" : {
@@ -37,5 +37,6 @@
}
},
"release_status" : "stable",
- "version" : "1.9"
+ "version" : "1.91",
+ "x_serialization_backend" : "JSON::PP version 4.06"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Digest-Perl-MD5-1.9/META.yml
new/Digest-Perl-MD5-1.91/META.yml
--- old/Digest-Perl-MD5-1.9/META.yml 2013-12-14 14:08:22.000000000 +0100
+++ new/Digest-Perl-MD5-1.91/META.yml 2026-01-31 21:00:42.000000000 +0100
@@ -3,20 +3,21 @@
author:
- 'Christian Lackas <[email protected]>'
build_requires:
- ExtUtils::MakeMaker: 0
+ ExtUtils::MakeMaker: '0'
configure_requires:
- ExtUtils::MakeMaker: 0
+ ExtUtils::MakeMaker: '0'
dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 6.72, CPAN::Meta::Converter version
2.120351'
+generated_by: 'ExtUtils::MakeMaker version 7.62, CPAN::Meta::Converter version
2.150010'
license: unknown
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
- version: 1.4
+ version: '1.4'
name: Digest-Perl-MD5
no_index:
directory:
- t
- inc
requires:
- Exporter: 0
-version: 1.9
+ Exporter: '0'
+version: '1.91'
+x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Digest-Perl-MD5-1.9/README.md
new/Digest-Perl-MD5-1.91/README.md
--- old/Digest-Perl-MD5-1.9/README.md 1970-01-01 01:00:00.000000000 +0100
+++ new/Digest-Perl-MD5-1.91/README.md 2026-01-22 09:47:47.000000000 +0100
@@ -0,0 +1,160 @@
+NAME
+ Digest::MD5::Perl - Perl implementation of Ron Rivest's MD5 Algorithm
+
+DISCLAIMER
+ This is not an interface (like "Digest::MD5") but a Perl implementation
+ of MD5. It is written in perl only and because of this it is slow but it
+ works without C-Code. You should use "Digest::MD5" instead of this
+ module if it is available. This module is only useful for
+
+ * computers where you cannot install "Digest::MD5" (e.g. lack of a
+ C-Compiler)
+
+ * hashing only small amounts of data (less than one million bytes). I
+ use it to hash passwords.
+
+ * educational purposes
+
+SYNOPSIS
+ # Functional style
+ use Digest::MD5 qw(md5 md5_hex md5_base64);
+
+ $hash = md5 $data;
+ $hash = md5_hex $data;
+ $hash = md5_base64 $data;
+
+
+ # OO style
+ use Digest::MD5;
+
+ $ctx = Digest::MD5->new;
+
+ $ctx->add($data);
+ $ctx->addfile(*FILE);
+
+ $digest = $ctx->digest;
+ $digest = $ctx->hexdigest;
+ $digest = $ctx->b64digest;
+
+DESCRIPTION
+ This module has the same interface as the much faster "Digest::MD5". So
+ you can easily exchange them, e.g.
+
+ BEGIN {
+ eval {
+ require Digest::MD5;
+ import Digest::MD5 'md5_hex'
+ };
+ if ($@) { # oops, no Digest::MD5
+ require Digest::Perl::MD5;
+ import Digest::Perl::MD5 'md5_hex'
+ }
+ }
+
+ If the "Digest::MD5" module is available it is used and if not you take
+ "Digest::Perl::MD5".
+
+ You can also install the Perl part of Digest::MD5 together with
+ Digest::Perl::MD5 and use Digest::MD5 as normal, it falls back to
+ Digest::Perl::MD5 if it cannot load its object files.
+
+ For detailed documentation see the "Digest::MD5" module.
+
+EXAMPLES
+ The simplest way to use this library is to import the md5_hex() function
+ (or one of its cousins):
+
+ use Digest::Perl::MD5 'md5_hex';
+ print 'Digest is ', md5_hex('foobarbaz'), "\n";
+
+ The above example would print out the message
+
+ Digest is 6df23dc03f9b54cc38a0fc1483df6e21
+
+ provided that the implementation is working correctly. The same checksum
+ can also be calculated in OO style:
+
+ use Digest::MD5;
+
+ $md5 = Digest::MD5->new;
+ $md5->add('foo', 'bar');
+ $md5->add('baz');
+ $digest = $md5->hexdigest;
+
+ print "Digest is $digest\n";
+
+ The digest methods are destructive. That means you can only call them
+ once and the $md5 object is reset after use. You can make a copy with
+ clone:
+
+ $md5->clone->hexdigest
+
+LIMITATIONS
+ This implementation of the MD5 algorithm has some limitations:
+
+ * It's slow, very slow. I've done my very best but Digest::MD5 is
+ still about 100 times faster. You can only hash data up to one
+ million bytes in an acceptable time. But it's very useful for
+ hashing small amounts of data like passwords.
+
+ * You can only hash up to 2^32 bits = 512 MB on 32-bit archs. But you
+ should use "Digest::MD5" for those amounts of data anyway.
+
+SEE ALSO
+ Digest::MD5
+
+ md5(1)
+
+ RFC 1321
+
+ tools/md5: a small BSD compatible md5 tool written in pure perl.
+
+COPYRIGHT
+ This library is free software; you can redistribute it and/or modify it
+ under the same terms as Perl itself.
+
+ Copyright 2000 Christian Lackas, Imperia Software Solutions
+ Copyright 1998-1999 Gisle Aas.
+ Copyright 1995-1996 Neil Winton.
+ Copyright 1991-1992 RSA Data Security, Inc.
+
+ The MD5 algorithm is defined in RFC 1321. The basic C code implementing
+ the algorithm is derived from that in the RFC and is covered by the
+ following copyright:
+
+ * Copyright (C) 1991-1992, RSA Data Security, Inc. Created 1991. All
+ rights reserved.
+
+ License to copy and use this software is granted provided that it is
+ identified as the "RSA Data Security, Inc. MD5 Message-Digest
+ Algorithm" in all material mentioning or referencing this software
+ or this function.
+
+ License is also granted to make and use derivative works provided
+ that such works are identified as "derived from the RSA Data
+ Security, Inc. MD5 Message-Digest Algorithm" in all material
+ mentioning or referencing the derived work.
+
+ RSA Data Security, Inc. makes no representations concerning either
+ the merchantability of this software or the suitability of this
+ software for any particular purpose. It is provided "as is" without
+ express or implied warranty of any kind.
+
+ These notices must be retained in any copies of any part of this
+ documentation and/or software.
+
+ This copyright does not prohibit distribution of any version of Perl
+ containing this extension under the terms of the GNU or Artistic
+ licenses.
+
+AUTHORS
+ The original MD5 interface was written by Neil Winton (<N.Winton (at)
+ axion.bt.co.uk>).
+
+ "Digest::MD5" was made by Gisle Aas <gisle (at) aas.no> (I took his
+ Interface and part of the documentation).
+
+ Thanks to Guido Flohr for his 'use integer'-hint.
+
+ This release was made by Christian Lackas <delta (at) lackas.net>.
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Digest-Perl-MD5-1.9/lib/Digest/Perl/MD5.pm
new/Digest-Perl-MD5-1.91/lib/Digest/Perl/MD5.pm
--- old/Digest-Perl-MD5-1.9/lib/Digest/Perl/MD5.pm 2013-12-13
22:56:02.000000000 +0100
+++ new/Digest-Perl-MD5-1.91/lib/Digest/Perl/MD5.pm 2026-01-22
10:49:18.000000000 +0100
@@ -6,8 +6,8 @@
@EXPORT_OK = qw(md5 md5_hex md5_base64);
-@ISA = 'Exporter';
-$VERSION = '1.9';
+@ISA = 'Exporter';
+$VERSION = '1.91';
# I-Vektor
sub A() { 0x67_45_23_01 }
@@ -20,73 +20,99 @@
# pad a message to a multiple of 64
sub padding {
- my $l = length (my $msg = shift() . chr(128));
- $msg .= "\0" x (($l%64<=56?56:120)-$l%64);
- $l = ($l-1)*8;
- $msg .= pack 'VV', $l & MAX , ($l >> 16 >> 16);
+ my $l = length( my $msg = shift() . chr(128) );
+ $msg .= "\0" x ( ( $l % 64 <= 56 ? 56 : 120 ) - $l % 64 );
+ $l = ( $l - 1 ) * 8;
+ $msg .= pack 'VV', $l & MAX, ( $l >> 16 >> 16 );
}
-
sub rotate_left($$) {
- #$_[0] << $_[1] | $_[0] >> (32 - $_[1]);
- #my $right = $_[0] >> (32 - $_[1]);
- #my $rmask = (1 << $_[1]) - 1;
- ($_[0] << $_[1]) | (( $_[0] >> (32 - $_[1]) ) & ((1 << $_[1]) - 1));
- #$_[0] << $_[1] | (($_[0]>> (32 - $_[1])) & (1 << (32 - $_[1])) - 1);
+
+ #$_[0] << $_[1] | $_[0] >> (32 - $_[1]);
+ #my $right = $_[0] >> (32 - $_[1]);
+ #my $rmask = (1 << $_[1]) - 1;
+ ( $_[0] << $_[1] ) |
+ ( ( $_[0] >> ( 32 - $_[1] ) ) & ( ( 1 << $_[1] ) - 1 ) );
+
+ #$_[0] << $_[1] | (($_[0]>> (32 - $_[1])) & (1 << (32 - $_[1])) - 1);
}
sub gen_code {
- # Discard upper 32 bits on 64 bit archs.
- my $MSK = ((1 << 16) << 16) ? ' & ' . MAX : '';
-# FF => "X0=rotate_left(((X1&X2)|(~X1&X3))+X0+X4+X6$MSK,X5)+X1$MSK;",
-# GG => "X0=rotate_left(((X1&X3)|(X2&(~X3)))+X0+X4+X6$MSK,X5)+X1$MSK;",
- my %f = (
- FF => "X0=rotate_left((X3^(X1&(X2^X3)))+X0+X4+X6$MSK,X5)+X1$MSK;",
- GG => "X0=rotate_left((X2^(X3&(X1^X2)))+X0+X4+X6$MSK,X5)+X1$MSK;",
- HH => "X0=rotate_left((X1^X2^X3)+X0+X4+X6$MSK,X5)+X1$MSK;",
- II => "X0=rotate_left((X2^(X1|(~X3)))+X0+X4+X6$MSK,X5)+X1$MSK;",
- );
- #unless ( (1 << 16) << 16) { %f = %{$CODES{'32bit'}} }
- #else { %f = %{$CODES{'64bit'}} }
-
- my %s = ( # shift lengths
- S11 => 7, S12 => 12, S13 => 17, S14 => 22, S21 => 5, S22 => 9, S23 =>
14,
- S24 => 20, S31 => 4, S32 => 11, S33 => 16, S34 => 23, S41 => 6, S42 =>
10,
- S43 => 15, S44 => 21
- );
-
- my $insert = "\n";
- while(defined( my $data = <DATA> )) {
- chomp $data;
- next unless $data =~ /^[FGHI]/;
- my ($func,@x) = split /,/, $data;
- my $c = $f{$func};
- $c =~ s/X(\d)/$x[$1]/g;
- $c =~ s/(S\d{2})/$s{$1}/;
- $c =~ s/^(.*)=rotate_left\((.*),(.*)\)\+(.*)$//;
-
- my $su = 32 - $3;
- my $sh = (1 << $3) - 1;
-
- $c = "$1=(((\$r=$2)<<$3)|((\$r>>$su)&$sh))+$4";
-
- #my $rotate = "(($2 << $3) || (($2 >> (32 - $3)) & (1 << $2) - 1)))";
- # $c = "\$r = $2;
- # $1 = ((\$r << $3) | ((\$r >> (32 - $3)) & ((1 << $3) - 1))) + $4";
- $insert .= "\t$c\n";
- }
- close DATA;
-
- my $dump = '
+
+ # Discard upper 32 bits on 64 bit archs.
+ my $MSK = ( ( 1 << 16 ) << 16 ) ? ' & ' . MAX : '';
+
+ # FF => "X0=rotate_left(((X1&X2)|(~X1&X3))+X0+X4+X6$MSK,X5)+X1$MSK;",
+ # GG => "X0=rotate_left(((X1&X3)|(X2&(~X3)))+X0+X4+X6$MSK,X5)+X1$MSK;",
+ # Only mask before rotate, not after; final mask in round() return
+ my %f = (
+ FF => "X0=rotate_left((X3^(X1&(X2^X3)))+X0+X4+X6$MSK,X5)+X1;",
+ GG => "X0=rotate_left((X2^(X3&(X1^X2)))+X0+X4+X6$MSK,X5)+X1;",
+ HH => "X0=rotate_left((X1^X2^X3)+X0+X4+X6$MSK,X5)+X1;",
+ II => "X0=rotate_left((X2^(X1|(~X3)))+X0+X4+X6$MSK,X5)+X1;",
+ );
+
+ #unless ( (1 << 16) << 16) { %f = %{$CODES{'32bit'}} }
+ #else { %f = %{$CODES{'64bit'}} }
+
+ my %s = ( # shift lengths
+ S11 => 7,
+ S12 => 12,
+ S13 => 17,
+ S14 => 22,
+ S21 => 5,
+ S22 => 9,
+ S23 => 14,
+ S24 => 20,
+ S31 => 4,
+ S32 => 11,
+ S33 => 16,
+ S34 => 23,
+ S41 => 6,
+ S42 => 10,
+ S43 => 15,
+ S44 => 21
+ );
+
+ my $insert = "\n";
+ while ( defined( my $data = <DATA> ) ) {
+ chomp $data;
+ next unless $data =~ /^[FGHI]/;
+ my ( $func, @x ) = split /,/, $data;
+ my $c = $f{$func};
+ $c =~ s/X(\d)/$x[$1]/g;
+ $c =~ s/(S\d{2})/$s{$1}/;
+ $c =~ s/^(.*)=rotate_left\((.*),(.*)\)\+(.*)$//;
+
+ my $su = 32 - $3;
+ my $sh = ( 1 << $3 ) - 1;
+
+ $c = "$1=(((\$r=$2)<<$3)|((\$r>>$su)&$sh))+$4";
+
+ #my $rotate = "(($2 << $3) || (($2 >> (32 - $3)) & (1 << $2) - 1)))";
+ # $c = "\$r = $2;
+ # $1 = ((\$r << $3) | ((\$r >> (32 - $3)) & ((1 << $3) - 1))) + $4";
+ $insert .= "\t$c\n";
+ }
+ close DATA;
+
+ my $dump = '
sub round {
my ($a,$b,$c,$d) = @_[0 .. 3];
my $r;' . $insert . '
- $_[0]+$a' . $MSK . ', $_[1]+$b ' . $MSK .
- ', $_[2]+$c' . $MSK . ', $_[3]+$d' . $MSK . ';
+ ($_[0]+$a)'
+ . $MSK
+ . ', ($_[1]+$b)'
+ . $MSK
+ . ', ($_[2]+$c)'
+ . $MSK
+ . ', ($_[3]+$d)'
+ . $MSK . ';
}';
- eval $dump;
- # print "$dump\n";
- # exit 0;
+ eval $dump;
+
+ # print "$dump\n";
+ # exit 0;
}
gen_code();
@@ -94,132 +120,134 @@
#########################################
# Private output converter functions:
sub _encode_hex { unpack 'H*', $_[0] }
+
sub _encode_base64 {
- my $res;
- while ($_[0] =~ /(.{1,45})/gs) {
- $res .= substr pack('u', $1), 1;
- chop $res;
- }
- $res =~ tr|` -_|AA-Za-z0-9+/|;#`
- chop $res; chop $res;
- $res
+ my $res;
+ while ( $_[0] =~ /(.{1,45})/gs ) {
+ $res .= substr pack( 'u', $1 ), 1;
+ chop $res;
+ }
+ $res =~ tr|` -_|AA-Za-z0-9+/|; #`
+ chop $res;
+ chop $res;
+ $res;
}
#########################################
# OOP interface:
sub new {
- my $proto = shift;
- my $class = ref $proto || $proto;
- my $self = {};
- bless $self, $class;
- $self->reset();
- $self
+ my $proto = shift;
+ my $class = ref $proto || $proto;
+ my $self = {};
+ bless $self, $class;
+ $self->reset();
+ $self;
}
sub reset {
- my $self = shift;
- delete $self->{_data};
- $self->{_state} = [A,B,C,D];
- $self->{_length} = 0;
- $self
+ my $self = shift;
+ delete $self->{_data};
+ $self->{_state} = [ A, B, C, D ];
+ $self->{_length} = 0;
+ $self;
}
sub add {
- my $self = shift;
- $self->{_data} .= join '', @_ if @_;
- my ($i,$c);
- for $i (0 .. (length $self->{_data})/64-1) {
- my @X = unpack 'V16', substr $self->{_data}, $i*64, 64;
- @{$self->{_state}} = round(@{$self->{_state}},@X);
- ++$c;
- }
- if ($c) {
- substr ($self->{_data}, 0, $c*64) = '';
- $self->{_length} += $c*64;
- }
- $self
+ my $self = shift;
+ $self->{_data} .= join '', @_ if @_;
+ my ( $i, $c );
+ for $i ( 0 .. ( length $self->{_data} ) / 64 - 1 ) {
+ my @X = unpack 'V16', substr $self->{_data}, $i * 64, 64;
+ @{ $self->{_state} } = round( @{ $self->{_state} }, @X );
+ ++$c;
+ }
+ if ($c) {
+ substr( $self->{_data}, 0, $c * 64 ) = '';
+ $self->{_length} += $c * 64;
+ }
+ $self;
}
sub finalize {
- my $self = shift;
- $self->{_data} .= chr(128);
+ my $self = shift;
+ $self->{_data} .= chr(128);
my $l = $self->{_length} + length $self->{_data};
- $self->{_data} .= "\0" x (($l%64<=56?56:120)-$l%64);
- $l = ($l-1)*8;
- $self->{_data} .= pack 'VV', $l & MAX , ($l >> 16 >> 16);
- $self->add();
- $self
+ $self->{_data} .= "\0" x ( ( $l % 64 <= 56 ? 56 : 120 ) - $l % 64 );
+ $l = ( $l - 1 ) * 8;
+ $self->{_data} .= pack 'VV', $l & MAX, ( $l >> 16 >> 16 );
+ $self->add();
+ $self;
}
sub addfile {
- my ($self,$fh) = @_;
- if (!ref($fh) && ref(\$fh) ne "GLOB") {
- require Symbol;
- $fh = Symbol::qualify($fh, scalar caller);
- }
- # $self->{_data} .= do{local$/;<$fh>};
- my $read = 0;
- my $buffer = '';
- $self->add($buffer) while $read = read $fh, $buffer, 8192;
- die __PACKAGE__, " read failed: $!" unless defined $read;
- $self
+ my ( $self, $fh ) = @_;
+ if ( !ref($fh) && ref( \$fh ) ne "GLOB" ) {
+ require Symbol;
+ $fh = Symbol::qualify( $fh, scalar caller );
+ }
+
+ # $self->{_data} .= do{local$/;<$fh>};
+ my $read = 0;
+ my $buffer = '';
+ $self->add($buffer) while $read = read $fh, $buffer, 8192;
+ die __PACKAGE__, " read failed: $!" unless defined $read;
+ $self;
}
sub add_bits {
- my $self = shift;
- return $self->add( pack 'B*', shift ) if @_ == 1;
- my ($b,$n) = @_;
- die __PACKAGE__, " Invalid number of bits\n" if $n%8;
- $self->add( substr $b, 0, $n/8 )
+ my $self = shift;
+ return $self->add( pack 'B*', shift ) if @_ == 1;
+ my ( $b, $n ) = @_;
+ die __PACKAGE__, " Invalid number of bits\n" if $n % 8;
+ $self->add( substr $b, 0, $n / 8 );
}
sub digest {
- my $self = shift;
- $self->finalize();
- my $res = pack 'V4', @{$self->{_state}};
- $self->reset();
- $res
+ my $self = shift;
+ $self->finalize();
+ my $res = pack 'V4', @{ $self->{_state} };
+ $self->reset();
+ $res;
}
sub hexdigest {
- _encode_hex($_[0]->digest)
+ _encode_hex( $_[0]->digest );
}
sub b64digest {
- _encode_base64($_[0]->digest)
+ _encode_base64( $_[0]->digest );
}
sub clone {
- my $self = shift;
- my $clone = {
- _state => [@{$self->{_state}}],
- _length => $self->{_length},
- _data => $self->{_data}
- };
- bless $clone, ref $self || $self;
+ my $self = shift;
+ my $clone = {
+ _state => [ @{ $self->{_state} } ],
+ _length => $self->{_length},
+ _data => $self->{_data}
+ };
+ bless $clone, ref $self || $self;
}
#########################################
# Procedural interface:
sub md5 {
- my $message = padding(join'',@_);
- my ($a,$b,$c,$d) = (A,B,C,D);
- my $i;
- for $i (0 .. (length $message)/64-1) {
- my @X = unpack 'V16', substr $message,$i*64,64;
- ($a,$b,$c,$d) = round($a,$b,$c,$d,@X);
- }
- pack 'V4',$a,$b,$c,$d;
+ my $message = padding( join '', @_ );
+ my ( $a, $b, $c, $d ) = ( A, B, C, D );
+ my $i;
+ for $i ( 0 .. ( length $message ) / 64 - 1 ) {
+ my @X = unpack 'V16', substr $message, $i * 64, 64;
+ ( $a, $b, $c, $d ) = round( $a, $b, $c, $d, @X );
+ }
+ pack 'V4', $a, $b, $c, $d;
}
-sub md5_hex { _encode_hex &md5 }
+sub md5_hex { _encode_hex &md5 }
sub md5_base64 { _encode_base64 &md5 }
-
1;
=head1 NAME
-Digest::MD5::Perl - Perl implementation of Ron Rivests MD5 Algorithm
+Digest::MD5::Perl - Perl implementation of Ron Rivest's MD5 Algorithm
=head1 DISCLAIMER
@@ -236,7 +264,7 @@
=item
-encrypting only small amounts of data (less than one million bytes). I use it
to
+hashing only small amounts of data (less than one million bytes). I use it to
hash passwords.
=item
@@ -269,7 +297,7 @@
=head1 DESCRIPTION
-This modules has the same interface as the much faster C<Digest::MD5>. So you
can
+This module has the same interface as the much faster C<Digest::MD5>. So you
can
easily exchange them, e.g.
BEGIN {
@@ -277,7 +305,7 @@
require Digest::MD5;
import Digest::MD5 'md5_hex'
};
- if ($@) { # ups, no Digest::MD5
+ if ($@) { # oops, no Digest::MD5
require Digest::Perl::MD5;
import Digest::Perl::MD5 'md5_hex'
}
@@ -290,7 +318,7 @@
and use Digest::MD5 as normal, it falls back to Digest::Perl::MD5 if it
cannot load its object files.
-For a detailed Documentation see the C<Digest::MD5> module.
+For detailed documentation see the C<Digest::MD5> module.
=head1 EXAMPLES
@@ -317,7 +345,7 @@
print "Digest is $digest\n";
The digest methods are destructive. That means you can only call them
-once and the $md5 objects is reset after use. You can make a copy with clone:
+once and the $md5 object is reset after use. You can make a copy with clone:
$md5->clone->hexdigest
@@ -330,12 +358,12 @@
=item
It's slow, very slow. I've done my very best but Digest::MD5 is still about
100 times faster.
-You can only encrypt Data up to one million bytes in an acceptable time. But
it's very useful
-for encrypting small amounts of data like passwords.
+You can only hash data up to one million bytes in an acceptable time. But it's
very useful
+for hashing small amounts of data like passwords.
=item
-You can only encrypt up to 2^32 bits = 512 MB on 32bit archs. But You should
+You can only hash up to 2^32 bits = 512 MB on 32-bit archs. But you should
use C<Digest::MD5> for those amounts of data anyway.
=back
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Digest-Perl-MD5-1.9/test.pl
new/Digest-Perl-MD5-1.91/test.pl
--- old/Digest-Perl-MD5-1.9/test.pl 2013-04-11 11:20:14.000000000 +0200
+++ new/Digest-Perl-MD5-1.91/test.pl 2026-01-22 09:49:33.000000000 +0100
@@ -5,7 +5,7 @@
use strict;
use lib './lib';
-BEGIN {plan tests => 7}
+BEGIN {plan tests => 9}
use Digest::Perl::MD5 qw(md5 md5_hex md5_base64);
++++++ README.md ++++++
## Build Results
Current state of perl in openSUSE:Factory is

The current state of perl in the devel project build (devel:languages:perl)

++++++ _scmsync.obsinfo ++++++
mtime: 1769926330
commit: 7166fbd6c2407a1c0b8448f9b519cffb987529ef862c7985f758e241034726a8
url: https://src.opensuse.org/perl/perl-Digest-Perl-MD5.git
revision: 7166fbd6c2407a1c0b8448f9b519cffb987529ef862c7985f758e241034726a8
projectscmsync: https://src.opensuse.org/perl/_ObsPrj
++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore 2026-02-08 21:48:59.000000000 +0100
@@ -0,0 +1 @@
+.osc