Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package perl-Crypt-SaltedHash for 
openSUSE:Factory checked in at 2026-05-21 18:32:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Crypt-SaltedHash (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Crypt-SaltedHash.new.2084 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Crypt-SaltedHash"

Thu May 21 18:32:24 2026 rev:11 rq:1354455 version:0.110.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/perl-Crypt-SaltedHash/perl-Crypt-SaltedHash.changes  
    2013-08-07 20:48:52.000000000 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-Crypt-SaltedHash.new.2084/perl-Crypt-SaltedHash.changes
    2026-05-21 18:33:38.422105271 +0200
@@ -1,0 +2,18 @@
+Thu May 21 10:01:32 UTC 2026 - Tina Müller <[email protected]>
+
+- updated to 0.110.0 (0.11)
+   0.11      2026-05-20 14:05:07+01:00 Europe/London
+    - Fixed metadata
+    - Moved author tests into xt
+   0.10      2026-05-19
+    - Maintenance taken over by Robert Rothenberg <[email protected]>
+    - Updated the Git Repository
+    - Updated copyright year
+    - Minimum Perl version is v5.6.0
+    - Added missing prerequisites, fixes RT#116392
+    - Security: Use system randomness source to generate the salt 
CVE-2026-47372 bsc#1265927
+    - Security: Use constant-time comparison of hashes CVE-2026-47373 
bsc#1265912
+    - Deprecated module
+    - Updated README
+
+-------------------------------------------------------------------

Old:
----
  Crypt-SaltedHash-0.09.tar.gz

New:
----
  Crypt-SaltedHash-0.11.tar.gz
  README.md
  _scmsync.obsinfo
  build.specials.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Crypt-SaltedHash.spec ++++++
--- /var/tmp/diff_new_pack.uGJxkc/_old  2026-05-21 18:33:39.706158630 +0200
+++ /var/tmp/diff_new_pack.uGJxkc/_new  2026-05-21 18:33:39.706158630 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package perl-Crypt-SaltedHash
 #
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# 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
@@ -12,42 +12,47 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
 
+%define cpan_name Crypt-SaltedHash
 Name:           perl-Crypt-SaltedHash
-Version:        0.09
+Version:        0.110.0
 Release:        0
-%define cpan_name Crypt-SaltedHash
-Summary:        Perl interface to functions that assist in working
-License:        Artistic-1.0 or GPL-1.0+
-Group:          Development/Libraries/Perl
-Url:            http://search.cpan.org/dist/Crypt-SaltedHash/
-Source:         
http://www.cpan.org/authors/id/G/GS/GSHANK/%{cpan_name}-%{version}.tar.gz
+# 0.11 -> normalize -> 0.110.0
+%define cpan_version 0.11
+License:        Artistic-1.0 OR GPL-1.0-or-later
+Summary:        Perl interface to functions that assist in working with salted 
hashes
+URL:            https://metacpan.org/release/%{cpan_name}
+Source0:        
https://cpan.metacpan.org/authors/id/R/RR/RRWO/%{cpan_name}-%{cpan_version}.tar.gz
+Source100:      README.md
 BuildArch:      noarch
-BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  perl
 BuildRequires:  perl-macros
+BuildRequires:  perl(Crypt::SysRandom)
+BuildRequires:  perl(Module::Metadata)
 BuildRequires:  perl(Test::Fatal)
-#BuildRequires: perl(Crypt::SaltedHash)
+Requires:       perl(Crypt::SysRandom)
+Provides:       perl(Crypt::SaltedHash) = %{version}
+%undefine       __perllib_provides
 %{perl_requires}
 
 %description
 The 'Crypt::SaltedHash' module provides an object oriented interface to
 create salted (or seeded) hashes of clear text data. The original
 formalization of this concept comes from RFC-3112 and is extended by the
-use of different digital agorithms.
+use of different digital algorithms.
 
 %prep
-%setup -q -n %{cpan_name}-%{version}
+%autosetup -n %{cpan_name}-%{cpan_version} -p1
 
 %build
-%{__perl} Makefile.PL INSTALLDIRS=vendor
-%{__make} %{?_smp_mflags}
+perl Makefile.PL INSTALLDIRS=vendor
+%make_build
 
 %check
-%{__make} test
+make test
 
 %install
 %perl_make_install
@@ -55,6 +60,6 @@
 %perl_gen_filelist
 
 %files -f %{name}.files
-%defattr(-,root,root,755)
-%doc Changes LICENSE README
+%doc Changes doap.xml README
+%license LICENSE
 

++++++ Crypt-SaltedHash-0.09.tar.gz -> Crypt-SaltedHash-0.11.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/Changes 
new/Crypt-SaltedHash-0.11/Changes
--- old/Crypt-SaltedHash-0.09/Changes   2013-07-31 03:39:48.000000000 +0200
+++ new/Crypt-SaltedHash-0.11/Changes   2026-05-20 15:05:08.000000000 +0200
@@ -1,35 +1,49 @@
-Revision history for Perl extension Crypt::SaltedHash.
-
-0.09 Tue Jul 30
-    - add Test::Fatal test requires
-
-0.08 Tue Jul 30
-    - correct version in package
-
-0.07  Tue Jul 30
-    - switch to use Dist::Zilla
-    - fix bug with failed regex and localization of $1
-    - handle some uninitialized variables
-    - RT Bug #78505 for Crypt-SaltedHash: Noisy tests (Unescaped left brace in 
regex is deprecated)
-    - RT Bug #85627 for Crypt-SaltedHash: [PATCH] POD fix
-
-0.06  Sun Feb 28 01:55:22 2010
-    - added clear method
-       - add returns now $self
-
-0.05  Thu Aug 10 03:04:33 2006
-    - switched to Module::Build
-
-0.04  Thu Jan 26 04:56:56 2006
-       - algorithm recognition fixed
-
-0.03  Mon Nov 14 23:59:59 2005
-       - spelling fixed
-
-0.02  Mon Nov 14 17:54:00 2005
-    - fixed some bugs; added tests and documentation
-
-0.01  Sun Nov 13 05:41:23 2005
-    - original version; created by h2xs 1.23 with options
-               -XA -n Crypt::SaltedHash
-
+Revision history for Perl module Crypt::SaltedHash
+
+0.11      2026-05-20 14:05:07+01:00 Europe/London
+    - Fixed metadata
+    - Moved author tests into xt
+
+0.10 2026-05-19
+    - Maintenance taken over by Robert Rothenberg <[email protected]>
+    - Updated the Git Repository
+    - Updated copyright year
+    - Minimum Perl version is v5.6.0
+    - Added missing prerequisites, fixes RT#116392
+    - Security: Use system randomness source to generate the salt 
CVE-2026-47372
+    - Security: Use constant-time comparison of hashes CVE-2026-47373
+    - Deprecated module
+    - Updated README
+
+0.09 2013-07-30
+    - add Test::Fatal test requires
+
+0.08 2013-07-30
+    - correct version in package
+
+0.07  2013-07-30
+    - switch to use Dist::Zilla
+    - fix bug with failed regex and localization of $1
+    - handle some uninitialized variables
+    - RT Bug #78505 for Crypt-SaltedHash: Noisy tests (Unescaped left brace in 
regex is deprecated)
+    - RT Bug #85627 for Crypt-SaltedHash: [PATCH] POD fix
+
+0.06  2010-02-28
+    - added clear method
+    - add returns now $self
+
+0.05  2006-08-10
+    - switched to Module::Build
+
+0.04  2006-01-26
+    - algorithm recognition fixed
+
+0.03  2005-11-14
+    - spelling fixed
+
+0.02  2005-11-14
+    - fixed some bugs; added tests and documentation
+
+0.01  2005-11-13
+    - original version; created by h2xs 1.23 with options
+        -XA -n Crypt::SaltedHash
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/LICENSE 
new/Crypt-SaltedHash-0.11/LICENSE
--- old/Crypt-SaltedHash-0.09/LICENSE   2013-07-31 03:39:48.000000000 +0200
+++ new/Crypt-SaltedHash-0.11/LICENSE   2026-05-20 15:05:08.000000000 +0200
@@ -1,4 +1,4 @@
-This software is copyright (c) 2013 by Sascha Kiefer.
+This software is copyright (c) 2005-2006, 2010, 2013, 2026 by Sascha Kiefer 
<[email protected]>.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -12,7 +12,7 @@
 
 --- The GNU General Public License, Version 1, February 1989 ---
 
-This software is Copyright (c) 2013 by Sascha Kiefer.
+This software is Copyright (c) 2005-2006, 2010, 2013, 2026 by Sascha Kiefer 
<[email protected]>.
 
 This is free software, licensed under:
 
@@ -22,7 +22,7 @@
                      Version 1, February 1989
 
  Copyright (C) 1989 Free Software Foundation, Inc.
-                    51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+                    <https://fsf.org/>
 
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
@@ -236,8 +236,7 @@
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA  02110-1301 
USA
+    along with this program; if not, see <https://www.gnu.org/licenses/>.
 
 
 Also add information on how to contact you by electronic and paper mail.
@@ -264,116 +263,149 @@
   program `Gnomovision' (a program to direct compilers to make passes
   at assemblers) written by James Hacker.
 
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
+  <signature of Moe Ghoul>, 1 April 1989
+  Moe Ghoul, President of Vice
 
 That's all there is to it!
 
 
---- The Artistic License 1.0 ---
+--- The Perl Artistic License 1.0 ---
 
-This software is Copyright (c) 2013 by Sascha Kiefer.
+This software is Copyright (c) 2005-2006, 2010, 2013, 2026 by Sascha Kiefer 
<[email protected]>.
 
 This is free software, licensed under:
 
-  The Artistic License 1.0
+  The Perl Artistic License 1.0
 
-The Artistic License
 
-Preamble
 
-The intent of this document is to state the conditions under which a Package
-may be copied, such that the Copyright Holder maintains some semblance of
-artistic control over the development of the package, while giving the users of
-the package the right to use and distribute the Package in a more-or-less
-customary fashion, plus the right to make reasonable modifications.
+
+
+                         The "Artistic License"
+
+                                Preamble
+
+The intent of this document is to state the conditions under which a
+Package may be copied, such that the Copyright Holder maintains some
+semblance of artistic control over the development of the package,
+while giving the users of the package the right to use and distribute
+the Package in a more-or-less customary fashion, plus the right to make
+reasonable modifications.
 
 Definitions:
 
-  - "Package" refers to the collection of files distributed by the Copyright
-    Holder, and derivatives of that collection of files created through
-    textual modification. 
-  - "Standard Version" refers to such a Package if it has not been modified,
-    or has been modified in accordance with the wishes of the Copyright
-    Holder. 
-  - "Copyright Holder" is whoever is named in the copyright or copyrights for
-    the package. 
-  - "You" is you, if you're thinking about copying or distributing this 
Package.
-  - "Reasonable copying fee" is whatever you can justify on the basis of media
-    cost, duplication charges, time of people involved, and so on. (You will
-    not be required to justify it to the Copyright Holder, but only to the
-    computing community at large as a market that must bear the fee.) 
-  - "Freely Available" means that no fee is charged for the item itself, though
-    there may be fees involved in handling the item. It also means that
-    recipients of the item may redistribute it under the same conditions they
-    received it. 
+        "Package" refers to the collection of files distributed by the
+        Copyright Holder, and derivatives of that collection of files
+        created through textual modification.
+
+        "Standard Version" refers to such a Package if it has not been
+        modified, or has been modified in accordance with the wishes
+        of the Copyright Holder as specified below.
+
+        "Copyright Holder" is whoever is named in the copyright or
+        copyrights for the package.
+
+        "You" is you, if you're thinking about copying or distributing
+        this Package.
+
+        "Reasonable copying fee" is whatever you can justify on the
+        basis of media cost, duplication charges, time of people involved,
+        and so on.  (You will not be required to justify it to the
+        Copyright Holder, but only to the computing community at large
+        as a market that must bear the fee.)
+
+        "Freely Available" means that no fee is charged for the item
+        itself, though there may be fees involved in handling the item.
+        It also means that recipients of the item may redistribute it
+        under the same conditions they received it.
 
 1. You may make and give away verbatim copies of the source form of the
 Standard Version of this Package without restriction, provided that you
 duplicate all of the original copyright notices and associated disclaimers.
 
-2. You may apply bug fixes, portability fixes and other modifications derived
-from the Public Domain or from the Copyright Holder. A Package modified in such
-a way shall still be considered the Standard Version.
-
-3. You may otherwise modify your copy of this Package in any way, provided that
-you insert a prominent notice in each changed file stating how and when you
-changed that file, and provided that you do at least ONE of the following:
-
-  a) place your modifications in the Public Domain or otherwise make them
-     Freely Available, such as by posting said modifications to Usenet or an
-     equivalent medium, or placing the modifications on a major archive site
-     such as ftp.uu.net, or by allowing the Copyright Holder to include your
-     modifications in the Standard Version of the Package.
-
-  b) use the modified Package only within your corporation or organization.
-
-  c) rename any non-standard executables so the names do not conflict with
-     standard executables, which must also be provided, and provide a separate
-     manual page for each non-standard executable that clearly documents how it
-     differs from the Standard Version.
-
-  d) make other distribution arrangements with the Copyright Holder.
-
-4. You may distribute the programs of this Package in object code or executable
-form, provided that you do at least ONE of the following:
-
-  a) distribute a Standard Version of the executables and library files,
-     together with instructions (in the manual page or equivalent) on where to
-     get the Standard Version.
-
-  b) accompany the distribution with the machine-readable source of the Package
-     with your modifications.
-
-  c) accompany any non-standard executables with their corresponding Standard
-     Version executables, giving the non-standard executables non-standard
-     names, and clearly documenting the differences in manual pages (or
-     equivalent), together with instructions on where to get the Standard
-     Version.
+2. You may apply bug fixes, portability fixes and other modifications
+derived from the Public Domain or from the Copyright Holder.  A Package
+modified in such a way shall still be considered the Standard Version.
 
-  d) make other distribution arrangements with the Copyright Holder.
+3. You may otherwise modify your copy of this Package in any way, provided
+that you insert a prominent notice in each changed file stating how and
+when you changed that file, and provided that you do at least ONE of the
+following:
 
-5. You may charge a reasonable copying fee for any distribution of this
-Package.  You may charge any fee you choose for support of this Package. You
-may not charge a fee for this Package itself. However, you may distribute this
-Package in aggregate with other (possibly commercial) programs as part of a
-larger (possibly commercial) software distribution provided that you do not
-advertise this Package as a product of your own.
-
-6. The scripts and library files supplied as input to or produced as output
-from the programs of this Package do not automatically fall under the copyright
-of this Package, but belong to whomever generated them, and may be sold
-commercially, and may be aggregated with this Package.
+    a) place your modifications in the Public Domain or otherwise make them
+    Freely Available, such as by posting said modifications to Usenet or
+    an equivalent medium, or placing the modifications on a major archive
+    site such as uunet.uu.net, or by allowing the Copyright Holder to include
+    your modifications in the Standard Version of the Package.
+
+    b) use the modified Package only within your corporation or organization.
+
+    c) rename any non-standard executables so the names do not conflict
+    with standard executables, which must also be provided, and provide
+    a separate manual page for each non-standard executable that clearly
+    documents how it differs from the Standard Version.
 
-7. C or perl subroutines supplied by you and linked into this Package shall not
-be considered part of this Package.
+    d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or
+executable form, provided that you do at least ONE of the following:
+
+    a) distribute a Standard Version of the executables and library files,
+    together with instructions (in the manual page or equivalent) on where
+    to get the Standard Version.
+
+    b) accompany the distribution with the machine-readable source of
+    the Package with your modifications.
+
+    c) give non-standard executables non-standard names, and clearly
+    document the differences in manual pages (or equivalent), together
+    with instructions on where to get the Standard Version.
+
+    d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this
+Package.  You may charge any fee you choose for support of this
+Package.  You may not charge a fee for this Package itself.  However,
+you may distribute this Package in aggregate with other (possibly
+commercial) programs as part of a larger (possibly commercial) software
+distribution provided that you do not advertise this Package as a
+product of your own.  You may embed this Package's interpreter within
+an executable of yours (by linking); this shall be construed as a mere
+form of aggregation, provided that the complete Standard Version of the
+interpreter is so embedded.
+
+6. The scripts and library files supplied as input to or produced as
+output from the programs of this Package do not automatically fall
+under the copyright of this Package, but belong to whoever generated
+them, and may be sold commercially, and may be aggregated with this
+Package.  If such scripts or library files are aggregated with this
+Package via the so-called "undump" or "unexec" methods of producing a
+binary executable image, then distribution of such an image shall
+neither be construed as a distribution of this Package nor shall it
+fall under the restrictions of Paragraphs 3 and 4, provided that you do
+not represent such an executable image as a Standard Version of this
+Package.
+
+7. C subroutines (or comparably compiled subroutines in other
+languages) supplied by you and linked into this Package in order to
+emulate subroutines and variables of the language defined by this
+Package shall not be considered part of this Package, but are the
+equivalent of input as in Paragraph 6, provided these subroutines do
+not change the language in any way that would cause it to fail the
+regression tests for the language.
+
+8. Aggregation of this Package with a commercial distribution is always
+permitted provided that the use of this Package is embedded; that is,
+when no overt attempt is made to make this Package's interfaces visible
+to the end user of the commercial distribution.  Such use shall not be
+construed as a distribution of this Package.
 
-8. The name of the Copyright Holder may not be used to endorse or promote
+9. The name of the Copyright Holder may not be used to endorse or promote
 products derived from this software without specific prior written permission.
 
-9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
-MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
-The End
+                                The End
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/MANIFEST 
new/Crypt-SaltedHash-0.11/MANIFEST
--- old/Crypt-SaltedHash-0.09/MANIFEST  2013-07-31 03:39:48.000000000 +0200
+++ new/Crypt-SaltedHash-0.11/MANIFEST  2026-05-20 15:05:08.000000000 +0200
@@ -1,3 +1,4 @@
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest v6.037
 Changes
 LICENSE
 MANIFEST
@@ -5,10 +6,18 @@
 META.yml
 Makefile.PL
 README
+cpanfile
 dist.ini
+doap.xml
 lib/Crypt/SaltedHash.pm
-t/01use.t
-t/02pod.t
-t/03podcoverage.t
+t/00-report-prereqs.dd
+t/00-report-prereqs.t
 t/04Crypt-SaltedHash.t
 t/bug-localize-regex-vars.t
+xt/author/clean-namespaces.t
+xt/author/eof.t
+xt/author/minimum-version.t
+xt/author/no-tabs.t
+xt/author/pod-syntax.t
+xt/release/dist-manifest.t
+xt/release/fixme.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/META.json 
new/Crypt-SaltedHash-0.11/META.json
--- old/Crypt-SaltedHash-0.09/META.json 2013-07-31 03:39:48.000000000 +0200
+++ new/Crypt-SaltedHash-0.11/META.json 2026-05-20 15:05:08.000000000 +0200
@@ -1,36 +1,68 @@
 {
-   "abstract" : "Perl interface to functions that assist in working\r\nwith 
salted hashes.\r",
+   "abstract" : "Perl interface to functions that assist in working with 
salted hashes.",
    "author" : [
-      "Sascha Kiefer, L<[email protected]>"
+      "Robert Rothenberg <[email protected]>"
    ],
    "dynamic_config" : 0,
-   "generated_by" : "Dist::Zilla version 4.300020, CPAN::Meta::Converter 
version 2.120921",
+   "generated_by" : "Dist::Zilla version 6.037, CPAN::Meta::Converter version 
2.150010",
    "license" : [
       "perl_5"
    ],
    "meta-spec" : {
       "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec";,
-      "version" : "2"
+      "version" : 2
    },
    "name" : "Crypt-SaltedHash",
    "prereqs" : {
       "configure" : {
          "requires" : {
-            "ExtUtils::MakeMaker" : "6.30"
+            "ExtUtils::MakeMaker" : "0"
+         }
+      },
+      "develop" : {
+         "requires" : {
+            "Dist::Zilla::Plugin::UsefulReadme" : "v0.4.3",
+            "Pod::Simple::Text" : "3.23",
+            "Test::CleanNamespaces" : "0.15",
+            "Test::DistManifest" : "0",
+            "Test::EOF" : "0",
+            "Test::Fixme" : "0",
+            "Test::MinimumVersion" : "0",
+            "Test::More" : "0.94",
+            "Test::NoTabs" : "0",
+            "Test::Pod" : "1.41",
+            "warnings" : "0"
          }
       },
       "runtime" : {
          "requires" : {
-            "Digest" : "0"
+            "Crypt::SysRandom" : "0",
+            "Digest" : "0",
+            "MIME::Base64" : "0",
+            "POSIX" : "0",
+            "perl" : "v5.6.0",
+            "strict" : "0"
          }
       },
       "test" : {
+         "recommends" : {
+            "CPAN::Meta" : "2.120900"
+         },
          "requires" : {
+            "File::Spec" : "0",
+            "Module::Metadata" : "0",
             "Test::Fatal" : "0",
-            "Test::More" : "0"
+            "Test::More" : "0",
+            "warnings" : "0"
          }
       }
    },
+   "provides" : {
+      "Crypt::SaltedHash" : {
+         "file" : "lib/Crypt/SaltedHash.pm",
+         "version" : "0.11"
+      }
+   },
    "release_status" : "stable",
    "resources" : {
       "bugtracker" : {
@@ -38,10 +70,22 @@
       },
       "repository" : {
          "type" : "git",
-         "url" : "git://github.com/campus-explorer/crypt-saltedhash.git",
-         "web" : "http://github.com/campus-explorer/crypt-saltedhash";
-      }
+         "url" : "git://github.com/robrwo/perl-Crypt-SaltedHash.git",
+         "web" : "https://github.com/robrwo/perl-Crypt-SaltedHash";
+      },
+      "x_authority" : "cpan:RRWO"
    },
-   "version" : "0.09"
+   "version" : "0.11",
+   "x_contributors" : [
+      "Chris Weyl <[email protected]>",
+      "David Steinbrunner <[email protected]>",
+      "Gerda Shank <[email protected]>",
+      "Sascha Kiefer <[email protected]>",
+      "Sergey Romanov <[email protected]>"
+   ],
+   "x_deprecated" : 1,
+   "x_generated_by_perl" : "v5.42.1",
+   "x_serialization_backend" : "Cpanel::JSON::XS version 4.40",
+   "x_spdx_expression" : "Artistic-1.0-Perl OR GPL-1.0-or-later"
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/META.yml 
new/Crypt-SaltedHash-0.11/META.yml
--- old/Crypt-SaltedHash-0.09/META.yml  2013-07-31 03:39:48.000000000 +0200
+++ new/Crypt-SaltedHash-0.11/META.yml  2026-05-20 15:05:08.000000000 +0200
@@ -1,22 +1,45 @@
 ---
-abstract: "Perl interface to functions that assist in working\r\nwith salted 
hashes.\r"
+abstract: 'Perl interface to functions that assist in working with salted 
hashes.'
 author:
-  - 'Sascha Kiefer, L<[email protected]>'
+  - 'Robert Rothenberg <[email protected]>'
 build_requires:
-  Test::Fatal: 0
-  Test::More: 0
+  File::Spec: '0'
+  Module::Metadata: '0'
+  Test::Fatal: '0'
+  Test::More: '0'
+  warnings: '0'
 configure_requires:
-  ExtUtils::MakeMaker: 6.30
+  ExtUtils::MakeMaker: '0'
 dynamic_config: 0
-generated_by: 'Dist::Zilla version 4.300020, CPAN::Meta::Converter version 
2.120921'
+generated_by: 'Dist::Zilla version 6.037, CPAN::Meta::Converter version 
2.150010'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
-  version: 1.4
+  version: '1.4'
 name: Crypt-SaltedHash
+provides:
+  Crypt::SaltedHash:
+    file: lib/Crypt/SaltedHash.pm
+    version: '0.11'
 requires:
-  Digest: 0
+  Crypt::SysRandom: '0'
+  Digest: '0'
+  MIME::Base64: '0'
+  POSIX: '0'
+  perl: v5.6.0
+  strict: '0'
 resources:
+  Authority: cpan:RRWO
   bugtracker: http://rt.cpan.org/Public/Dist/Display.html?Name=Crypt-SaltedHash
-  repository: git://github.com/campus-explorer/crypt-saltedhash.git
-version: 0.09
+  repository: git://github.com/robrwo/perl-Crypt-SaltedHash.git
+version: '0.11'
+x_contributors:
+  - 'Chris Weyl <[email protected]>'
+  - 'David Steinbrunner <[email protected]>'
+  - 'Gerda Shank <[email protected]>'
+  - 'Sascha Kiefer <[email protected]>'
+  - 'Sergey Romanov <[email protected]>'
+x_deprecated: 1
+x_generated_by_perl: v5.42.1
+x_serialization_backend: 'YAML::Tiny version 1.76'
+x_spdx_expression: 'Artistic-1.0-Perl OR GPL-1.0-or-later'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/Makefile.PL 
new/Crypt-SaltedHash-0.11/Makefile.PL
--- old/Crypt-SaltedHash-0.09/Makefile.PL       2013-07-31 03:39:48.000000000 
+0200
+++ new/Crypt-SaltedHash-0.11/Makefile.PL       2026-05-20 15:05:08.000000000 
+0200
@@ -1,54 +1,63 @@
-
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker 
v6.037
 use strict;
 use warnings;
 
+use 5.006000;
 
-
-use ExtUtils::MakeMaker 6.30;
-
-
+use ExtUtils::MakeMaker;
 
 my %WriteMakefileArgs = (
-  "ABSTRACT" => "Perl interface to functions that assist in working\r\nwith 
salted hashes.\r",
-  "AUTHOR" => "Sascha Kiefer, L<esskar\@cpan.org>",
-  "BUILD_REQUIRES" => {
-    "Test::Fatal" => 0,
-    "Test::More" => 0
-  },
+  "ABSTRACT" => "Perl interface to functions that assist in working with 
salted hashes.",
+  "AUTHOR" => "Robert Rothenberg <perl\@rhizomnic.com>",
   "CONFIGURE_REQUIRES" => {
-    "ExtUtils::MakeMaker" => "6.30"
+    "ExtUtils::MakeMaker" => 0
   },
   "DISTNAME" => "Crypt-SaltedHash",
-  "EXE_FILES" => [],
   "LICENSE" => "perl",
+  "MIN_PERL_VERSION" => "5.006000",
   "NAME" => "Crypt::SaltedHash",
   "PREREQ_PM" => {
-    "Digest" => 0
+    "Crypt::SysRandom" => 0,
+    "Digest" => 0,
+    "MIME::Base64" => 0,
+    "POSIX" => 0,
+    "strict" => 0
+  },
+  "TEST_REQUIRES" => {
+    "File::Spec" => 0,
+    "Module::Metadata" => 0,
+    "Test::Fatal" => 0,
+    "Test::More" => 0,
+    "warnings" => 0
   },
-  "VERSION" => "0.09",
+  "VERSION" => "0.11",
   "test" => {
     "TESTS" => "t/*.t"
   }
 );
 
 
-unless ( eval { ExtUtils::MakeMaker->VERSION(6.56) } ) {
-  my $br = delete $WriteMakefileArgs{BUILD_REQUIRES};
-  my $pp = $WriteMakefileArgs{PREREQ_PM};
-  for my $mod ( keys %$br ) {
-    if ( exists $pp->{$mod} ) {
-      $pp->{$mod} = $br->{$mod} if $br->{$mod} > $pp->{$mod};
-    }
-    else {
-      $pp->{$mod} = $br->{$mod};
-    }
-  }
+my %FallbackPrereqs = (
+  "Crypt::SysRandom" => 0,
+  "Digest" => 0,
+  "File::Spec" => 0,
+  "MIME::Base64" => 0,
+  "Module::Metadata" => 0,
+  "POSIX" => 0,
+  "Test::Fatal" => 0,
+  "Test::More" => 0,
+  "strict" => 0,
+  "warnings" => 0
+);
+
+
+unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
+  delete $WriteMakefileArgs{TEST_REQUIRES};
+  delete $WriteMakefileArgs{BUILD_REQUIRES};
+  $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
 }
 
 delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
   unless eval { ExtUtils::MakeMaker->VERSION(6.52) };
 
 WriteMakefile(%WriteMakefileArgs);
-
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/README 
new/Crypt-SaltedHash-0.11/README
--- old/Crypt-SaltedHash-0.09/README    2013-07-31 03:39:48.000000000 +0200
+++ new/Crypt-SaltedHash-0.11/README    2026-05-20 15:05:08.000000000 +0200
@@ -1,14 +1,43 @@
+NAME
 
+    Crypt::SaltedHash - Perl interface to functions that assist in working
+    with salted hashes.
 
-This archive contains the distribution Crypt-SaltedHash,
-version 0.09:
+SYNOPSIS
 
-  Perl interface to functions that assist in working
-with salted hashes.
+            use Crypt::SaltedHash;
+    
+            my $csh = Crypt::SaltedHash->new(algorithm => 'SHA-1');
+            $csh->add('secret');
+    
+            my $salted = $csh->generate;
+            my $valid = Crypt::SaltedHash->validate($salted, 'secret');
 
-This software is copyright (c) 2013 by Sascha Kiefer.
+STATUS
 
-This is free software; you can redistribute it and/or modify it under
-the same terms as the Perl 5 programming language system itself.
+    This module is deprecated.
 
+    This module has not had significant updates since 2006. There are newer
+    modules that support more secure algorithms and hashing options, and
+    are extensible, such as Crypt::Passphrase.
+
+DESCRIPTION
+
+    The Crypt::SaltedHash module provides an object oriented interface to
+    create salted (or seeded) hashes of clear text data. The original
+    formalization of this concept comes from RFC-3112 and is extended by
+    the use of different digital algorithms.
+
+AUTHOR
+
+    Sascha Kiefer, <[email protected]>
+
+    The current maintainer is Robert Rothenberg <[email protected]>
+
+COPYRIGHT AND LICENSE
+
+    Copyright (C) 2005-2006, 2010, 2013, 2026 Sascha Kiefer
+
+    This library is free software; you can redistribute it and/or modify it
+    under the same terms as Perl itself.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/cpanfile 
new/Crypt-SaltedHash-0.11/cpanfile
--- old/Crypt-SaltedHash-0.09/cpanfile  1970-01-01 01:00:00.000000000 +0100
+++ new/Crypt-SaltedHash-0.11/cpanfile  2026-05-20 15:05:08.000000000 +0200
@@ -0,0 +1,39 @@
+# This file is generated by Dist::Zilla::Plugin::CPANFile v6.037
+# Do not edit this file directly. To change prereqs, edit the `dist.ini` file.
+
+requires "Crypt::SysRandom" => "0";
+requires "Digest" => "0";
+requires "MIME::Base64" => "0";
+requires "POSIX" => "0";
+requires "perl" => "v5.6.0";
+requires "strict" => "0";
+
+on 'test' => sub {
+  requires "File::Spec" => "0";
+  requires "Module::Metadata" => "0";
+  requires "Test::Fatal" => "0";
+  requires "Test::More" => "0";
+  requires "warnings" => "0";
+};
+
+on 'test' => sub {
+  recommends "CPAN::Meta" => "2.120900";
+};
+
+on 'configure' => sub {
+  requires "ExtUtils::MakeMaker" => "0";
+};
+
+on 'develop' => sub {
+  requires "Dist::Zilla::Plugin::UsefulReadme" => "v0.4.3";
+  requires "Pod::Simple::Text" => "3.23";
+  requires "Test::CleanNamespaces" => "0.15";
+  requires "Test::DistManifest" => "0";
+  requires "Test::EOF" => "0";
+  requires "Test::Fixme" => "0";
+  requires "Test::MinimumVersion" => "0";
+  requires "Test::More" => "0.94";
+  requires "Test::NoTabs" => "0";
+  requires "Test::Pod" => "1.41";
+  requires "warnings" => "0";
+};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/dist.ini 
new/Crypt-SaltedHash-0.11/dist.ini
--- old/Crypt-SaltedHash-0.09/dist.ini  2013-07-31 03:39:48.000000000 +0200
+++ new/Crypt-SaltedHash-0.11/dist.ini  2026-05-20 15:05:08.000000000 +0200
@@ -1,31 +1,101 @@
 name             = Crypt-SaltedHash
 main_module      = lib/Crypt/SaltedHash.pm
-author           = Sascha Kiefer, L<[email protected]>
+author           = Robert Rothenberg <[email protected]>
 license          = Perl_5
-copyright_holder = Sascha Kiefer
-copyright_year   = 2013
+copyright_holder = Sascha Kiefer <[email protected]>
+copyright_year   = 2005-2006, 2010, 2013, 2026
 
-version = 0.09
+[Meta::Contributors]
 
-[@Git]
-tag_format = %v
-
-[@Basic]
-[MetaJSON]
+[Deprecated]
+all = 1
 
-[MetaResources]
-bugtracker.web    = 
http://rt.cpan.org/Public/Dist/Display.html?Name=Crypt-SaltedHash
+[GatherDir]
+exclude_match = cpanfile*
+exclude_filename = LICENSE
+exclude_filename = README
+;;exclude_filename = SECURITY.md
+exclude_filename = doap.xml
+
+[PruneCruft]
+[ManifestSkip]
+
+[CPANFile]
+[License]
+[DOAP]
+[ExecDir]
+[ShareDir]
+[MakeMaker]
+[Manifest]
+[TestRelease]
+[CheckExtraTests]
+[ConfirmRelease]
+[UploadToCPAN]
+
+[CopyFilesFromBuild]
+copy = LICENSE
+;; copy = README
+;;copy = SECURITY.md
+copy = cpanfile
+copy = doap.xml
 
-; If you have a repository...
-repository.url    = git://github.com/campus-explorer/crypt-saltedhash.git
-repository.web    = http://github.com/campus-explorer/crypt-saltedhash
-repository.type   = git
+[@Git]
+allow_dirty = dist.ini
+push_to     = origin master:master
+tag_format  = %v
+commit_msg  = %v%n%n%c
+
+[GitHub::Meta]
+repo = git://github.com/robrwo/perl-Crypt-SaltedHash.git
+fork = 0
 
+[MetaResources]
+x_authority    = cpan:RRWO
+bugtracker.web = 
http://rt.cpan.org/Public/Dist/Display.html?Name=Crypt-SaltedHash
 
-[Prereqs]
-Digest                     = 0
+[MetaProvides::Package]
+[MetaYAML]
+[MetaJSON]
 
-[Prereqs / TestRequires]
-Test::More                 = 0
-Test::Fatal                = 0
+[Git::Contributors]
+:version = 0.019
 
+[RewriteVersion]
+[NextRelease]
+[BumpVersionAfterRelease]
+
+[Git::Commit / Commit_Changes] ; commit Changes (for new dev)
+allow_dirty_match = ^lib/
+commit_msg = Commit Changes and bump $VERSION
+
+[UsefulReadme]
+type     = text
+filename = README
+location = build
+section  = name
+section  = synopsis
+section  = status
+section  = description
+section  = author
+section  = copyright and license
+
+[RecommendedPrereqs]
+[AutoPrereqs]
+
+[Test::ReportPrereqs]
+:version = 0.022
+version_extractor = Module::Metadata
+verify_prereqs = 1
+
+[PodSyntaxTests]
+[Test::DistManifest]
+; authordep Test::DistManifest
+[Test::CleanNamespaces]
+; authordep Test::CleanNamespaces
+[Test::EOF]
+; authordep Test::EOF
+; [Test::EOL]
+; :version = 0.14
+[Test::Fixme]
+[Test::MinimumVersion]
+[Test::NoTabs]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/doap.xml 
new/Crypt-SaltedHash-0.11/doap.xml
--- old/Crypt-SaltedHash-0.09/doap.xml  1970-01-01 01:00:00.000000000 +0100
+++ new/Crypt-SaltedHash-0.11/doap.xml  2026-05-20 15:05:08.000000000 +0200
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<Project
+  xmlns="http://usefulinc.com/ns/doap#";
+  xmlns:dc="http://purl.org/dc/terms/";
+  xmlns:foaf="http://xmlns.com/foaf/0.1/";
+  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#";
+  >
+  <name>Crypt-SaltedHash</name>
+  <shortdesc>Perl interface to functions that assist in working with salted 
hashes.</shortdesc>
+  <developer>
+    <foaf:Person>
+      <foaf:name>Robert Rothenberg</foaf:name>
+      <foaf:mbox rdf:resource="mailto:[email protected]"; />
+    </foaf:Person>
+  </developer>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Chris Weyl</foaf:name>
+      <foaf:mbox rdf:resource="mailto:[email protected]"; />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>David Steinbrunner</foaf:name>
+      <foaf:mbox rdf:resource="mailto:[email protected]"; />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Gerda Shank</foaf:name>
+      <foaf:mbox rdf:resource="mailto:[email protected]"; />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Sascha Kiefer</foaf:name>
+      <foaf:mbox rdf:resource="mailto:[email protected]"; />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Sergey Romanov</foaf:name>
+      <foaf:mbox rdf:resource="mailto:[email protected]"; />
+    </foaf:Person>
+  </helper>
+  <license rdf:resource="http://dev.perl.org/licenses/"; />
+  <bug-database 
rdf:resource="http://rt.cpan.org/Public/Dist/Display.html?Name=Crypt-SaltedHash";
 />
+  <repository>
+    <GitRepository>
+      <browse rdf:resource="https://github.com/robrwo/perl-Crypt-SaltedHash"; />
+      <location 
rdf:resource="git://github.com/robrwo/perl-Crypt-SaltedHash.git" />
+    </GitRepository>
+  </repository>
+  <programming-language>Perl</programming-language>
+</Project>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/lib/Crypt/SaltedHash.pm 
new/Crypt-SaltedHash-0.11/lib/Crypt/SaltedHash.pm
--- old/Crypt-SaltedHash-0.09/lib/Crypt/SaltedHash.pm   2013-07-31 
03:39:48.000000000 +0200
+++ new/Crypt-SaltedHash-0.11/lib/Crypt/SaltedHash.pm   2026-05-20 
15:05:08.000000000 +0200
@@ -1,12 +1,14 @@
 package Crypt::SaltedHash;
 
+use v5.6.0;
 use strict;
-use MIME::Base64 ();
-use Digest       ();
 
-use vars qw($VERSION);
+use Crypt::SysRandom ();
+use Digest       ();
+use MIME::Base64 ();
+use POSIX ();
 
-$VERSION = '0.09';
+our $VERSION = '0.11';
 
 =encoding latin1
 
@@ -26,12 +28,20 @@
        my $valid = Crypt::SaltedHash->validate($salted, 'secret');
 
 
+=head1 STATUS
+
+This module is deprecated.
+
+This module has not had significant updates since 2006.
+There are newer modules that support more secure algorithms and hashing 
options,
+and are extensible, such as L<Crypt::Passphrase>.
+
 =head1 DESCRIPTION
 
 The C<Crypt::SaltedHash> module provides an object oriented interface to
 create salted (or seeded) hashes of clear text data. The original
 formalization of this concept comes from RFC-3112 and is extended by the use
-of different digital agorithms.
+of different digital algorithms.
 
 =head1 ABSTRACT
 
@@ -111,7 +121,7 @@
 
     Strip the hash identifier from the Digest
     Base64Decode(Digest, 20)
-    Split Digest into 2 byte arrays, one for bytes 0 � 20(pwhash), one for 
bytes 21 � 32 (salt)
+    Split Digest into 2 byte arrays, one for bytes 0 � 20(pwhash), one for 
bytes 21 � 32 (salt)
     Get the target string and salt as separate binary object
     Concatenate the 2 binary values
     SHA hash the concatenation into targetPasswordHash
@@ -119,9 +129,9 @@
     Return corresponding Boolean value
 
 Our job is to split the original digest up into 2 distinct byte arrays, one of 
the left 20 (0 - 20 including the null terminator) bytes and
-the other for the rest of the data. The left 0 � 20 bytes will represent the 
salted  binary value we will use for a byte-by-byte data
+the other for the rest of the data. The left 0 � 20 bytes will represent the 
salted  binary value we will use for a byte-by-byte data
 match against the new clear text presented for verification. The string 
presented for verification will have to be salted as well. The rest
-of the bytes (21 � 32) represent the random salt which when decoded will show 
the exact hex characters that make up the once randomly
+of the bytes (21 � 32) represent the random salt which when decoded will show 
the exact hex characters that make up the once randomly
 generated seed.
 
 We are now ready to verify some data. Let's start with the 4 hashes presented 
earlier. We will run them through our code to extract the
@@ -169,7 +179,7 @@
 =item *
 
 I<salt>: You can specify your on salt. You can either specify it as a sequence
-of charactres or as a hex encoded string of the form "HEX{...}". If the 
argument is missing,
+of characters or as a hex encoded string of the form "HEX{...}". If the 
argument is missing,
 a random seed is provided for you (recommended).
 
 =item *
@@ -306,7 +316,7 @@
     my $gen_hasheddata = $obj->generate;
     my $gen_hash       = &__get_pass_hash($gen_hasheddata);
 
-    return $gen_hash eq $hash;
+    return _secure_compare( $gen_hash, $hash );
 }
 
 =item B<obj()>
@@ -382,18 +392,9 @@
 
 sub __generate_hex_salt {
 
-    my @keychars = (
-        "0", "1", "2", "3", "4", "5", "6", "7",
-        "8", "9", "a", "b", "c", "d", "e", "f"
-    );
     my $length = shift || 8;
 
-    my $salt = '';
-    my $max  = scalar @keychars;
-    for my $i ( 0 .. $length - 1 ) {
-        my $skip = $i == 0 ? 1 : 0;    # don't let the first be 0
-        $salt .= $keychars[ $skip + int( rand( $max - $skip ) ) ];
-    }
+    my $salt = substr( unpack( "h*", Crypt::SysRandom::random_bytes( 
POSIX::ceil( $length / 2 ) ) ), 0, $length );
 
     return "HEX{$salt}";
 }
@@ -408,13 +409,23 @@
     return $binsalt;
 }
 
+sub _secure_compare {
+    my ($left, $right) = @_;
+    my $res = length $left != length $right;
+    $right = $left if $res;
+    $res |= ord(substr $left, $_, 1) ^ ord(substr $right, $_, 1) for 0 .. 
length($left) - 1;
+    return $res == 0;
+}
+
 =head1 SEE ALSO
 
 L<Digest>, L<MIME::Base64>
 
 =head1 AUTHOR
 
-Sascha Kiefer, L<[email protected]>
+Sascha Kiefer, <[email protected]>
+
+The current maintainer is Robert Rothenberg <[email protected]>
 
 =head1 ACKNOWLEDGMENTS
 
@@ -423,7 +434,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2010 Sascha Kiefer
+Copyright (C) 2005-2006, 2010, 2013, 2026 Sascha Kiefer
 
 This library is free software; you can redistribute it and/or modify
 it under the same terms as Perl itself.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/t/00-report-prereqs.dd 
new/Crypt-SaltedHash-0.11/t/00-report-prereqs.dd
--- old/Crypt-SaltedHash-0.09/t/00-report-prereqs.dd    1970-01-01 
01:00:00.000000000 +0100
+++ new/Crypt-SaltedHash-0.11/t/00-report-prereqs.dd    2026-05-20 
15:05:08.000000000 +0200
@@ -0,0 +1,46 @@
+do { my $x = {
+       'configure' => {
+                        'requires' => {
+                                        'ExtUtils::MakeMaker' => '0'
+                                      }
+                      },
+       'develop' => {
+                      'requires' => {
+                                      'Dist::Zilla::Plugin::UsefulReadme' => 
'v0.4.3',
+                                      'Pod::Simple::Text' => '3.23',
+                                      'Test::CleanNamespaces' => '0.15',
+                                      'Test::DistManifest' => '0',
+                                      'Test::EOF' => '0',
+                                      'Test::Fixme' => '0',
+                                      'Test::MinimumVersion' => '0',
+                                      'Test::More' => '0.94',
+                                      'Test::NoTabs' => '0',
+                                      'Test::Pod' => '1.41',
+                                      'warnings' => '0'
+                                    }
+                    },
+       'runtime' => {
+                      'requires' => {
+                                      'Crypt::SysRandom' => '0',
+                                      'Digest' => '0',
+                                      'MIME::Base64' => '0',
+                                      'POSIX' => '0',
+                                      'perl' => 'v5.6.0',
+                                      'strict' => '0'
+                                    }
+                    },
+       'test' => {
+                   'recommends' => {
+                                     'CPAN::Meta' => '2.120900'
+                                   },
+                   'requires' => {
+                                   'File::Spec' => '0',
+                                   'Module::Metadata' => '0',
+                                   'Test::Fatal' => '0',
+                                   'Test::More' => '0',
+                                   'warnings' => '0'
+                                 }
+                 }
+     };
+  $x;
+ }
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/t/00-report-prereqs.t 
new/Crypt-SaltedHash-0.11/t/00-report-prereqs.t
--- old/Crypt-SaltedHash-0.09/t/00-report-prereqs.t     1970-01-01 
01:00:00.000000000 +0100
+++ new/Crypt-SaltedHash-0.11/t/00-report-prereqs.t     2026-05-20 
15:05:08.000000000 +0200
@@ -0,0 +1,197 @@
+#!perl
+
+use strict;
+use warnings;
+
+# This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.029
+
+use Test::More tests => 1;
+
+use Module::Metadata;
+use File::Spec;
+
+# from $version::LAX
+my $lax_version_re =
+    qr/(?: undef | (?: (?:[0-9]+) (?: \. | (?:\.[0-9]+) (?:_[0-9]+)? )?
+            |
+            (?:\.[0-9]+) (?:_[0-9]+)?
+        ) | (?:
+            v (?:[0-9]+) (?: (?:\.[0-9]+)+ (?:_[0-9]+)? )?
+            |
+            (?:[0-9]+)? (?:\.[0-9]+){2,} (?:_[0-9]+)?
+        )
+    )/x;
+
+# hide optional CPAN::Meta modules from prereq scanner
+# and check if they are available
+my $cpan_meta = "CPAN::Meta";
+my $cpan_meta_pre = "CPAN::Meta::Prereqs";
+my $HAS_CPAN_META = eval "require $cpan_meta; $cpan_meta->VERSION('2.120900')" 
&& eval "require $cpan_meta_pre"; ## no critic
+
+# Verify requirements?
+my $DO_VERIFY_PREREQS = 1;
+
+sub _max {
+    my $max = shift;
+    $max = ( $_ > $max ) ? $_ : $max for @_;
+    return $max;
+}
+
+sub _merge_prereqs {
+    my ($collector, $prereqs) = @_;
+
+    # CPAN::Meta::Prereqs object
+    if (ref $collector eq $cpan_meta_pre) {
+        return $collector->with_merged_prereqs(
+            CPAN::Meta::Prereqs->new( $prereqs )
+        );
+    }
+
+    # Raw hashrefs
+    for my $phase ( keys %$prereqs ) {
+        for my $type ( keys %{ $prereqs->{$phase} } ) {
+            for my $module ( keys %{ $prereqs->{$phase}{$type} } ) {
+                $collector->{$phase}{$type}{$module} = 
$prereqs->{$phase}{$type}{$module};
+            }
+        }
+    }
+
+    return $collector;
+}
+
+my @include = qw(
+
+);
+
+my @exclude = qw(
+
+);
+
+# Add static prereqs to the included modules list
+my $static_prereqs = do './t/00-report-prereqs.dd';
+
+# Merge all prereqs (either with ::Prereqs or a hashref)
+my $full_prereqs = _merge_prereqs(
+    ( $HAS_CPAN_META ? $cpan_meta_pre->new : {} ),
+    $static_prereqs
+);
+
+# Add dynamic prereqs to the included modules list (if we can)
+my ($source) = grep { -f } 'MYMETA.json', 'MYMETA.yml';
+my $cpan_meta_error;
+if ( $source && $HAS_CPAN_META
+    && (my $meta = eval { CPAN::Meta->load_file($source) } )
+) {
+    $full_prereqs = _merge_prereqs($full_prereqs, $meta->prereqs);
+}
+else {
+    $cpan_meta_error = $@;    # capture error from 
CPAN::Meta->load_file($source)
+    $source = 'static metadata';
+}
+
+my @full_reports;
+my @dep_errors;
+my $req_hash = $HAS_CPAN_META ? $full_prereqs->as_string_hash : $full_prereqs;
+
+# Add static includes into a fake section
+for my $mod (@include) {
+    $req_hash->{other}{modules}{$mod} = 0;
+}
+
+for my $phase ( qw(configure build test runtime develop other) ) {
+    next unless $req_hash->{$phase};
+    next if ($phase eq 'develop' and not $ENV{AUTHOR_TESTING});
+
+    for my $type ( qw(requires recommends suggests conflicts modules) ) {
+        next unless $req_hash->{$phase}{$type};
+
+        my $title = ucfirst($phase).' '.ucfirst($type);
+        my @reports = [qw/Module Want Have/];
+
+        for my $mod ( sort keys %{ $req_hash->{$phase}{$type} } ) {
+            next if grep { $_ eq $mod } @exclude;
+
+            my $want = $req_hash->{$phase}{$type}{$mod};
+            $want = "undef" unless defined $want;
+            $want = "any" if !$want && $want == 0;
+
+            if ($mod eq 'perl') {
+                push @reports, ['perl', $want, $]];
+                next;
+            }
+
+            my $req_string = $want eq 'any' ? 'any version required' : 
"version '$want' required";
+
+            my $file = $mod;
+            $file =~ s{::}{/}g;
+            $file .= ".pm";
+            my ($prefix) = grep { -e File::Spec->catfile($_, $file) } @INC;
+
+            if ($prefix) {
+                my $have = Module::Metadata->new_from_file( 
File::Spec->catfile($prefix, $file) )->version;
+                $have = "undef" unless defined $have;
+                push @reports, [$mod, $want, $have];
+
+                if ( $DO_VERIFY_PREREQS && $HAS_CPAN_META && $type eq 
'requires' ) {
+                    if ( $have !~ /\A$lax_version_re\z/ ) {
+                        push @dep_errors, "$mod version '$have' cannot be 
parsed ($req_string)";
+                    }
+                    elsif ( ! $full_prereqs->requirements_for( $phase, $type 
)->accepts_module( $mod => $have ) ) {
+                        push @dep_errors, "$mod version '$have' is not in 
required range '$want'";
+                    }
+                }
+            }
+            else {
+                push @reports, [$mod, $want, "missing"];
+
+                if ( $DO_VERIFY_PREREQS && $type eq 'requires' ) {
+                    push @dep_errors, "$mod is not installed ($req_string)";
+                }
+            }
+        }
+
+        if ( @reports ) {
+            push @full_reports, "=== $title ===\n\n";
+
+            my $ml = _max( map { length $_->[0] } @reports );
+            my $wl = _max( map { length $_->[1] } @reports );
+            my $hl = _max( map { length $_->[2] } @reports );
+
+            if ($type eq 'modules') {
+                splice @reports, 1, 0, ["-" x $ml, "", "-" x $hl];
+                push @full_reports, map { sprintf("    %*s %*s\n", -$ml, 
$_->[0], $hl, $_->[2]) } @reports;
+            }
+            else {
+                splice @reports, 1, 0, ["-" x $ml, "-" x $wl, "-" x $hl];
+                push @full_reports, map { sprintf("    %*s %*s %*s\n", -$ml, 
$_->[0], $wl, $_->[1], $hl, $_->[2]) } @reports;
+            }
+
+            push @full_reports, "\n";
+        }
+    }
+}
+
+if ( @full_reports ) {
+    diag "\nVersions for all modules listed in $source (including optional 
ones):\n\n", @full_reports;
+}
+
+if ( $cpan_meta_error || @dep_errors ) {
+    diag "\n*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING 
WARNING ***\n";
+}
+
+if ( $cpan_meta_error ) {
+    my ($orig_source) = grep { -f } 'MYMETA.json', 'MYMETA.yml';
+    diag "\nCPAN::Meta->load_file('$orig_source') failed with: 
$cpan_meta_error\n";
+}
+
+if ( @dep_errors ) {
+    diag join("\n",
+        "\nThe following REQUIRED prerequisites were not satisfied:\n",
+        @dep_errors,
+        "\n"
+    );
+}
+
+pass('Reported prereqs');
+
+# vim: ts=4 sts=4 sw=4 et:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/t/01use.t 
new/Crypt-SaltedHash-0.11/t/01use.t
--- old/Crypt-SaltedHash-0.09/t/01use.t 2013-07-31 03:39:48.000000000 +0200
+++ new/Crypt-SaltedHash-0.11/t/01use.t 1970-01-01 01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-use Test::More tests => 1;
-
-use_ok('Crypt::SaltedHash');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/t/02pod.t 
new/Crypt-SaltedHash-0.11/t/02pod.t
--- old/Crypt-SaltedHash-0.09/t/02pod.t 2013-07-31 03:39:48.000000000 +0200
+++ new/Crypt-SaltedHash-0.11/t/02pod.t 1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-use Test::More;
-
-eval "use Test::Pod 1.14";
-plan skip_all => 'Test::Pod 1.14 required' if $@;
-plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD};
-
-all_pod_files_ok();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/t/03podcoverage.t 
new/Crypt-SaltedHash-0.11/t/03podcoverage.t
--- old/Crypt-SaltedHash-0.09/t/03podcoverage.t 2013-07-31 03:39:48.000000000 
+0200
+++ new/Crypt-SaltedHash-0.11/t/03podcoverage.t 1970-01-01 01:00:00.000000000 
+0100
@@ -1,7 +0,0 @@
-use Test::More;
-
-eval "use Test::Pod::Coverage 1.04";
-plan skip_all => 'Test::Pod::Coverage 1.04 required' if $@;
-plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD};
-
-all_pod_coverage_ok();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/xt/author/clean-namespaces.t 
new/Crypt-SaltedHash-0.11/xt/author/clean-namespaces.t
--- old/Crypt-SaltedHash-0.09/xt/author/clean-namespaces.t      1970-01-01 
01:00:00.000000000 +0100
+++ new/Crypt-SaltedHash-0.11/xt/author/clean-namespaces.t      2026-05-20 
15:05:08.000000000 +0200
@@ -0,0 +1,11 @@
+use strict;
+use warnings;
+
+# this test was generated with Dist::Zilla::Plugin::Test::CleanNamespaces 0.006
+
+use Test::More 0.94;
+use Test::CleanNamespaces 0.15;
+
+subtest all_namespaces_clean => sub { all_namespaces_clean() };
+
+done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/xt/author/eof.t 
new/Crypt-SaltedHash-0.11/xt/author/eof.t
--- old/Crypt-SaltedHash-0.09/xt/author/eof.t   1970-01-01 01:00:00.000000000 
+0100
+++ new/Crypt-SaltedHash-0.11/xt/author/eof.t   2026-05-20 15:05:08.000000000 
+0200
@@ -0,0 +1,11 @@
+use strict;
+use warnings;
+use Test::More;
+
+# Generated by Dist::Zilla::Plugin::Test::EOF 0.0600
+eval "use Test::EOF";
+plan skip_all => 'Test::EOF required to test for correct end of file flag' if 
$@;
+
+all_perl_files_ok({ minimum_newlines => 1, maximum_newlines => 4 });
+
+done_testing();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/xt/author/minimum-version.t 
new/Crypt-SaltedHash-0.11/xt/author/minimum-version.t
--- old/Crypt-SaltedHash-0.09/xt/author/minimum-version.t       1970-01-01 
01:00:00.000000000 +0100
+++ new/Crypt-SaltedHash-0.11/xt/author/minimum-version.t       2026-05-20 
15:05:08.000000000 +0200
@@ -0,0 +1,6 @@
+use strict;
+use warnings;
+
+use Test::More;
+use Test::MinimumVersion;
+all_minimum_version_from_metayml_ok();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/xt/author/no-tabs.t 
new/Crypt-SaltedHash-0.11/xt/author/no-tabs.t
--- old/Crypt-SaltedHash-0.09/xt/author/no-tabs.t       1970-01-01 
01:00:00.000000000 +0100
+++ new/Crypt-SaltedHash-0.11/xt/author/no-tabs.t       2026-05-20 
15:05:08.000000000 +0200
@@ -0,0 +1,18 @@
+use strict;
+use warnings;
+
+# this test was generated with Dist::Zilla::Plugin::Test::NoTabs 0.15
+
+use Test::More 0.88;
+use Test::NoTabs;
+
+my @files = (
+    'lib/Crypt/SaltedHash.pm',
+    't/00-report-prereqs.dd',
+    't/00-report-prereqs.t',
+    't/04Crypt-SaltedHash.t',
+    't/bug-localize-regex-vars.t'
+);
+
+notabs_ok($_) foreach @files;
+done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/xt/author/pod-syntax.t 
new/Crypt-SaltedHash-0.11/xt/author/pod-syntax.t
--- old/Crypt-SaltedHash-0.09/xt/author/pod-syntax.t    1970-01-01 
01:00:00.000000000 +0100
+++ new/Crypt-SaltedHash-0.11/xt/author/pod-syntax.t    2026-05-20 
15:05:08.000000000 +0200
@@ -0,0 +1,7 @@
+#!perl
+# This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests
+use strict; use warnings;
+use Test::More;
+use Test::Pod 1.41;
+
+all_pod_files_ok();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/xt/release/dist-manifest.t 
new/Crypt-SaltedHash-0.11/xt/release/dist-manifest.t
--- old/Crypt-SaltedHash-0.09/xt/release/dist-manifest.t        1970-01-01 
01:00:00.000000000 +0100
+++ new/Crypt-SaltedHash-0.11/xt/release/dist-manifest.t        2026-05-20 
15:05:08.000000000 +0200
@@ -0,0 +1,6 @@
+use strict;
+use warnings;
+use Test::More;
+
+use Test::DistManifest;
+manifest_ok();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Crypt-SaltedHash-0.09/xt/release/fixme.t 
new/Crypt-SaltedHash-0.11/xt/release/fixme.t
--- old/Crypt-SaltedHash-0.09/xt/release/fixme.t        1970-01-01 
01:00:00.000000000 +0100
+++ new/Crypt-SaltedHash-0.11/xt/release/fixme.t        2026-05-20 
15:05:08.000000000 +0200
@@ -0,0 +1,8 @@
+#!perl
+
+# This test is generated by Dist::Zilla::Plugin::Test::Fixme
+use strict;
+use warnings;
+
+use Test::Fixme;
+run_tests();

++++++ README.md ++++++

## Build Results

Current state of perl in openSUSE:Factory is

![Factory build 
results](https://br.opensuse.org/status/openSUSE:Factory/perl-Crypt-SaltedHash/standard)

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

![Devel project build 
results](https://br.opensuse.org/status/devel:languages:perl/perl-Crypt-SaltedHash)



++++++ _scmsync.obsinfo ++++++
mtime: 1779365402
commit: 5c91a4f3554aef67046839374c76db5f53335b2fda21173c11cc7fc195b3517c
url: https://src.opensuse.org/perl/perl-Crypt-SaltedHash
revision: 5c91a4f3554aef67046839374c76db5f53335b2fda21173c11cc7fc195b3517c
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-05-21 14:10:02.000000000 +0200
@@ -0,0 +1 @@
+.osc

Reply via email to