Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package perl-Net-SSLeay for openSUSE:Factory 
checked in at 2026-06-15 19:40:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Net-SSLeay (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Net-SSLeay.new.1981 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Net-SSLeay"

Mon Jun 15 19:40:58 2026 rev:40 rq:1359509 version:1.960.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Net-SSLeay/perl-Net-SSLeay.changes  
2025-04-15 16:48:23.593352881 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-Net-SSLeay.new.1981/perl-Net-SSLeay.changes    
    2026-06-15 19:42:45.037671141 +0200
@@ -1,0 +2,70 @@
+Sun Jun 14 13:21:04 UTC 2026 - Tina Müller <[email protected]>
+
+- Remove test-32_x509_get_cert_info-allow-single-colon.patch (fixed upstream)
+
+-------------------------------------------------------------------
+Sun Mar 22 06:15:02 UTC 2026 - Tina Müller <[email protected]>
+
+- updated to 1.960.0 (1.96)
+   see /usr/share/doc/packages/perl-Net-SSLeay/Changes
+
+  1.96 2026-03-21
+       - New stable release incorporating all changes from developer releases
+         1.95_01 to 1.95_03.
+       - Summary of major changes since version 1.94:
+         - Net::SSLeay now officially supports all stable releases of OpenSSL
+           3.3 - 3.6 and LibreSSL 3.9 - 4.2, including the vendor-supplied
+           version of OpenSSL 3 on VMS.
+         - Several libssl functions allowing for the control of supported
+           signature algorithms are now exposed.
+  1.95_03 2026-03-20
+       - In 67_sigalgs.t, load the certificates and keys before forking
+         to avoid a failure on MSWin32.
+  1.95_02 2026-03-18
+       - Support SSL_CTX_set1_sigalgs_list and
+         SSL_CTX_set1_client_sigalgs_list. Contributed by Wes Malone.
+       - Support SSL_set1_sigalgs_list, SSL_set1_client_sigalgs_list,
+         SSL_get_sigalgs and SSL_get_shared_sigalgs, and add the
+         function SSL_CTX_set_cert_cb.
+       - Add test file 67_sigalgs.t for the sigalgs functions.
+  1.95_01 2026-02-05
+       - Skip NPN tests when NPN is disabled in OpenSSL instead o
+         assuming NPN is always enabled. Reported by GitHub user
+         dilyanpalauzov Дилян Палаузов.
+       - Update GitHub Actions CI workflow. A number of test jobs
+         were broken because some GitHub runners were discontinued,
+         changes in QEMU setup, changes in Cygwin, etc.
+       - Adjust test 32_x509_get_cert_info.t to match formatting
+         changes in OpenSSL 3.4.0 and 3.4.1. Thanks to Sebastian
+         Andrzej Siewior for the patches.
+       - OpenSSL 3.9.0 and later remove EVP_add_digest(). Thanks to
+         Derrik Pates for the report and patch.
+       - Increase timeout in 62_threads-ctx_new-deadlock.t to allow
+         the test to pass on very slow platforms.
+       - Add missing documentation for STACK_OF() free functions
+         sk_X509_free and sk_X509_INFO_free. Contributed by Marc
+         Reisner
+       - Add $prefx/lib/64 to lib paths in Makefile.PL for
+         Illumos. Contributed by Marcel Telka.
+       - Support vendor-supplied OpenSSL 3.x on VMS and update %ENV
+         modification in test 10_rand.t to work on VMS. Contributed
+         by Craig Barry.
+       - Compiler -D switches Makefile.PL sets are no longer added to
+         the MakeMaker CCFLAG attribute because of portability
+         reasons. The switches are now passed either via
+         WriteMakefile() or appending them to 'perl Makefile.PL ...'
+         DEFINE argument. CCFLAG problem diagnosed by Craig
+         Barry. Fixes by Craig Barry and Heikki Vatiainen.
+       - Update GitHub Actions CI testing:
+         - Perl on Ubuntu 24.04: Add Perl 5.38, 5.40 and 5.42, add
+           OpenSSL 3.3, 3.4 and 3.5 minor releases, add LibreSSL 3.9,
+           4.0 and 4.1 release branches.
+         - Alpine Linux: Remove 3.15, 3.16 and 3.17. Add 3.19, 3.20,
+           3.21 and 3.22.
+         - Freebsd: Add 14.3 and replace 13.2 with 13.5.
+         - OpenBSD: Add 7.6 and 7.7. Remove 7.2 and 7.3.
+         - NetBSD: Add 10.1 and replace 9.3 with 9.4.
+       - Update test 62_threads-ctx_new-deadlock.t to work with
+         LibreSSL 4.1.0.
+
+-------------------------------------------------------------------

Old:
----
  Net-SSLeay-1.94.tar.gz
  test-32_x509_get_cert_info-allow-single-colon.patch

New:
----
  Net-SSLeay-1.96.tar.gz
  README.md
  _scmsync.obsinfo
  build.specials.obscpio

----------(Old B)----------
  Old:
- Remove test-32_x509_get_cert_info-allow-single-colon.patch (fixed upstream)
----------(Old E)----------

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

Other differences:
------------------
++++++ perl-Net-SSLeay.spec ++++++
--- /var/tmp/diff_new_pack.Nlrhfh/_old  2026-06-15 19:42:45.649696787 +0200
+++ /var/tmp/diff_new_pack.Nlrhfh/_new  2026-06-15 19:42:45.649696787 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package perl-Net-SSLeay
 #
-# 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,17 +18,16 @@
 
 %define cpan_name Net-SSLeay
 Name:           perl-Net-SSLeay
-Version:        1.940.0
+Version:        1.960.0
 Release:        0
-# 1.94 -> normalize -> 1.940.0
-%define cpan_version 1.94
+# 1.96 -> normalize -> 1.960.0
+%define cpan_version 1.96
 License:        Artistic-2.0
 Summary:        Perl bindings for OpenSSL and LibreSSL
 URL:            https://metacpan.org/release/%{cpan_name}
 Source0:        
https://cpan.metacpan.org/authors/id/C/CH/CHRISN/%{cpan_name}-%{cpan_version}.tar.gz
 Source1:        cpanspec.yml
-# PATCH-FIX-UPSTREAM: Fix build with openssl >= 3.4.1
-Patch:          test-32_x509_get_cert_info-allow-single-colon.patch
+Source100:      README.md
 BuildRequires:  perl
 BuildRequires:  perl-macros
 Provides:       perl(Net::SSLeay) = %{version}
@@ -49,7 +48,7 @@
 libcrypto (a cryptography API).
 
 %prep
-%autosetup -p1 -n %{cpan_name}-%{cpan_version}
+%autosetup -n %{cpan_name}-%{cpan_version} -p1
 
 find . -type f ! -path "*/t/*" ! -name "*.pl" ! -path "*/bin/*" ! -path 
"*/script/*" ! -path "*/scripts/*" ! -name "configure" -print0 | xargs -0 chmod 
644
 

++++++ Net-SSLeay-1.94.tar.gz -> Net-SSLeay-1.96.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-SSLeay-1.94/Changes new/Net-SSLeay-1.96/Changes
--- old/Net-SSLeay-1.94/Changes 2024-01-08 02:17:02.000000000 +0100
+++ new/Net-SSLeay-1.96/Changes 2026-03-21 01:39:56.000000000 +0100
@@ -1,5 +1,67 @@
 Revision history for Perl extension Net::SSLeay.
 
+1.96 2026-03-21
+       - New stable release incorporating all changes from developer releases
+         1.95_01 to 1.95_03.
+       - Summary of major changes since version 1.94:
+         - Net::SSLeay now officially supports all stable releases of OpenSSL
+           3.3 - 3.6 and LibreSSL 3.9 - 4.2, including the vendor-supplied
+           version of OpenSSL 3 on VMS.
+         - Several libssl functions allowing for the control of supported
+           signature algorithms are now exposed.
+
+1.95_03 2026-03-20
+       - In 67_sigalgs.t, load the certificates and keys before forking
+         to avoid a failure on MSWin32.
+
+1.95_02 2026-03-18
+       - Support SSL_CTX_set1_sigalgs_list and
+         SSL_CTX_set1_client_sigalgs_list. Contributed by Wes Malone.
+       - Support SSL_set1_sigalgs_list, SSL_set1_client_sigalgs_list,
+         SSL_get_sigalgs and SSL_get_shared_sigalgs, and add the
+         function SSL_CTX_set_cert_cb.
+       - Add test file 67_sigalgs.t for the sigalgs functions.
+
+1.95_01 2026-02-05
+       - Skip NPN tests when NPN is disabled in OpenSSL instead o
+         assuming NPN is always enabled. Reported by GitHub user
+         dilyanpalauzov Дилян Палаузов.
+       - Update GitHub Actions CI workflow. A number of test jobs
+         were broken because some GitHub runners were discontinued,
+         changes in QEMU setup, changes in Cygwin, etc.
+       - Adjust test 32_x509_get_cert_info.t to match formatting
+         changes in OpenSSL 3.4.0 and 3.4.1. Thanks to Sebastian
+         Andrzej Siewior for the patches.
+       - OpenSSL 3.9.0 and later remove EVP_add_digest(). Thanks to
+         Derrik Pates for the report and patch.
+       - Increase timeout in 62_threads-ctx_new-deadlock.t to allow
+         the test to pass on very slow platforms.
+       - Add missing documentation for STACK_OF() free functions
+         sk_X509_free and sk_X509_INFO_free. Contributed by Marc
+         Reisner
+       - Add $prefx/lib/64 to lib paths in Makefile.PL for
+         Illumos. Contributed by Marcel Telka.
+       - Support vendor-supplied OpenSSL 3.x on VMS and update %ENV
+         modification in test 10_rand.t to work on VMS. Contributed
+         by Craig Barry.
+       - Compiler -D switches Makefile.PL sets are no longer added to
+         the MakeMaker CCFLAG attribute because of portability
+         reasons. The switches are now passed either via
+         WriteMakefile() or appending them to 'perl Makefile.PL ...'
+         DEFINE argument. CCFLAG problem diagnosed by Craig
+         Barry. Fixes by Craig Barry and Heikki Vatiainen.
+       - Update GitHub Actions CI testing:
+         - Perl on Ubuntu 24.04: Add Perl 5.38, 5.40 and 5.42, add
+           OpenSSL 3.3, 3.4 and 3.5 minor releases, add LibreSSL 3.9,
+           4.0 and 4.1 release branches.
+         - Alpine Linux: Remove 3.15, 3.16 and 3.17. Add 3.19, 3.20,
+           3.21 and 3.22.
+         - Freebsd: Add 14.3 and replace 13.2 with 13.5.
+         - OpenBSD: Add 7.6 and 7.7. Remove 7.2 and 7.3.
+         - NetBSD: Add 10.1 and replace 9.3 with 9.4.
+       - Update test 62_threads-ctx_new-deadlock.t to work with
+         LibreSSL 4.1.0.
+
 1.94 2024-01-08
        - New stable release incorporating all changes from developer releases 
1.93_01
          to 1.93_05.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-SSLeay-1.94/MANIFEST new/Net-SSLeay-1.96/MANIFEST
--- old/Net-SSLeay-1.94/MANIFEST        2024-01-08 02:17:32.000000000 +0100
+++ new/Net-SSLeay-1.96/MANIFEST        2026-03-21 01:40:42.000000000 +0100
@@ -232,6 +232,7 @@
 t/local/65_security_level.t
 t/local/65_ticket_sharing_2.t
 t/local/66_curves.t
+t/local/67_sigalgs.t
 t/local/kwalitee.t
 typemap
 META.yml                                 Module YAML meta-data (added by 
MakeMaker)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-SSLeay-1.94/META.json 
new/Net-SSLeay-1.96/META.json
--- old/Net-SSLeay-1.94/META.json       2024-01-08 02:17:32.000000000 +0100
+++ new/Net-SSLeay-1.96/META.json       2026-03-21 01:40:42.000000000 +0100
@@ -82,6 +82,6 @@
          "web" : "https://github.com/radiator-software/p5-net-ssleay";
       }
    },
-   "version" : "1.94",
+   "version" : "1.96",
    "x_serialization_backend" : "JSON::PP version 4.06"
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-SSLeay-1.94/META.yml new/Net-SSLeay-1.96/META.yml
--- old/Net-SSLeay-1.94/META.yml        2024-01-08 02:17:32.000000000 +0100
+++ new/Net-SSLeay-1.96/META.yml        2026-03-21 01:40:42.000000000 +0100
@@ -47,5 +47,5 @@
 resources:
   bugtracker: https://github.com/radiator-software/p5-net-ssleay/issues
   repository: git://github.com/radiator-software/p5-net-ssleay.git
-version: '1.94'
+version: '1.96'
 x_serialization_backend: 'CPAN::Meta::YAML version 0.012'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-SSLeay-1.94/Makefile.PL 
new/Net-SSLeay-1.96/Makefile.PL
--- old/Net-SSLeay-1.94/Makefile.PL     2024-01-08 01:43:17.000000000 +0100
+++ new/Net-SSLeay-1.96/Makefile.PL     2025-06-29 21:05:27.000000000 +0200
@@ -111,18 +111,16 @@
   ssleay(),
 );
 
-# CCFLAGS is used internally by Makefile.PL to define various C preprocessor
-# macros (as opposed to DEFINE, which is user-facing).
-$eumm_args{CCFLAGS} = $Config{ccflags};
+$eumm_args{DEFINE} = '';
 
 # Expose the current Perl version to the C preprocessor. This is used in
 # SSLeay.xs before perl.h is included (and therefore before its PERL_VERSION_*
 # macros are available).
-add_ccflag( $eumm_args{CCFLAGS}, "-DNET_SSLEAY_PERL_VERSION=" . $] * 1e6 );
+add_define( $eumm_args{DEFINE}, "-DNET_SSLEAY_PERL_VERSION=" . $] * 1e6 );
 
 # Suppress deprecation warnings during compilation.
 # https://www.openssl.org/docs/manmaster/man7/openssl_user_macros.html
-add_ccflag( $eumm_args{CCFLAGS}, '-DOPENSSL_API_COMPAT=908' );
+add_define( $eumm_args{DEFINE}, '-DOPENSSL_API_COMPAT=908' );
 
 # See if integers are only 32 bits long. If they are, add a flag to
 # CCFLAGS. Since OpenSSL 1.1.0, a growing number of APIs are using 64
@@ -133,7 +131,7 @@
 # use this define, do it so that 64bit case is the default whenever
 # possible. This is safer for future library and Net::SSLeay releases.
 if ( !defined $Config{use64bitint} || $Config{use64bitint} ne 'define' ) {
-    add_ccflag( $eumm_args{CCFLAGS}, '-DNET_SSLEAY_32BIT_INT_PERL' );
+    add_define( $eumm_args{DEFINE}, '-DNET_SSLEAY_32BIT_INT_PERL' );
 }
 
 # This can go when EU::MM older than 6.58 are gone
@@ -142,6 +140,15 @@
 # This can go when EU::MM older than 6.64 are gone
 delete $eumm_args{TEST_REQUIRES} unless eval { 
ExtUtils::MakeMaker->VERSION(6.64); };
 
+# DEFINE cannot be passed via command line ARGV and WriteMakefile(). If there's
+# a DEFINE on the command line, append ours to the last one. MakeMaker appears
+# to use only the last command line DEFINE when there are multiple.
+foreach my $arg (reverse @ARGV)
+{
+    next unless $arg =~ m/^DEFINE=/s;
+    $arg .= ' ' . delete $eumm_args{DEFINE};
+    last;
+}
 WriteMakefile(%eumm_args);
 
 sub MY::postamble {
@@ -153,7 +160,7 @@
 
 # Prepends the C compiler flag in the second parameter to the string of 
compiler
 # flags in the first parameter.
-sub add_ccflag {
+sub add_define {
     substr $_[0], 0, 0, $_[1] . ( length $_[0] ? ' ' : '' );
 }
 
@@ -244,7 +251,7 @@
     # phase fails.
     my @try_lib_paths = (
        ["$prefix/lib64", "$prefix/lib", "$prefix/out32dll", $prefix] => sub 
{$OSNAME eq 'darwin' },
-       [$prefix, "$prefix/lib64", "$prefix/lib", "$prefix/out32dll"] => sub { 
1 },
+       [$prefix, "$prefix/lib64", "$prefix/lib/64", "$prefix/lib", 
"$prefix/out32dll"] => sub { 1 },
        );
 
     while (
@@ -304,6 +311,10 @@
           @{ $opts->{lib_paths} } = 'SSLLIB';
           @{ $opts->{lib_links} } = qw( ssl_libssl32.olb ssl_libcrypto32.olb );
         }
+        elsif (-r 'ssl3$root:[000000]openssl.cnf') {  # VSI SSL3 install
+            @{ $opts->{lib_paths} } = 'SYS$SHARE';
+            @{ $opts->{lib_links} } = qw( SSL3$LIBSSL_SHR32 
SSL3$LIBCRYPTO_SHR32 );
+        }
         elsif (-r 'ssl111$root:[000000]openssl.cnf') {  # VSI SSL111 install
             @{ $opts->{lib_paths} } = 'SYS$SHARE';
             @{ $opts->{lib_links} } = qw( SSL111$LIBSSL_SHR32 
SSL111$LIBCRYPTO_SHR32 );
@@ -380,6 +391,7 @@
        $Config{prefix} . '\bin\openssl.exe'      => $Config{prefix},           
# strawberry perl
        $Config{prefix} . '\..\c\bin\openssl.exe' => $Config{prefix} . '\..\c', 
# strawberry perl
        '/sslexe/openssl.exe'            => '/sslroot',  # VMS, openssl.org
+       '/ssl3$exe/openssl.exe'          => '/ssl3$root',# VMS, VSI install
        '/ssl111$exe/openssl.exe'        => '/ssl111$root',# VMS, VSI install
        '/ssl1$exe/openssl.exe'          => '/ssl1$root',# VMS, VSI or HPE 
install
        '/ssl$exe/openssl.exe'           => '/ssl$root', # VMS, HP install
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-SSLeay-1.94/README new/Net-SSLeay-1.96/README
--- old/Net-SSLeay-1.94/README  2024-01-04 23:41:01.000000000 +0100
+++ new/Net-SSLeay-1.96/README  2026-03-18 23:11:23.000000000 +0100
@@ -21,9 +21,9 @@
 One of the following libssl implementations:
 
 * Any stable release of OpenSSL (https://www.openssl.org) in the
-  0.9.8 - 3.2 branches, except for OpenSSL 0.9.8 - 0.9.8b.
+  0.9.8 - 3.6 branches, except for OpenSSL 0.9.8 - 0.9.8b.
 * Any stable release of LibreSSL (https://www.libressl.org) in the
-  2.0 - 3.8 series, except for LibreSSL 3.2.2 and 3.2.3.
+  2.0 - 4.2 series, except for LibreSSL 3.2.2 and 3.2.3.
 
 Net-SSLeay may not compile or pass its tests against releases other
 than the ones listed above due to libssl API incompatibilities, or, in
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-SSLeay-1.94/SSLeay.xs 
new/Net-SSLeay-1.96/SSLeay.xs
--- old/Net-SSLeay-1.94/SSLeay.xs       2024-01-04 23:41:01.000000000 +0100
+++ new/Net-SSLeay-1.96/SSLeay.xs       2026-03-18 23:17:08.000000000 +0100
@@ -2154,6 +2154,42 @@
 }
 #endif
 
+int ssl_ctx_set_cert_cb_invoke(SSL *ssl, void *arg)
+{
+    dSP;
+    int count, res;
+    SV *cb_func, *cb_arg;
+    SSL_CTX *ctx = SSL_get_SSL_CTX(ssl);
+
+    PR1("STARTED: ssl_ctx_set_cert_cb_invoke\n");
+    cb_func = cb_data_advanced_get(ctx, "ssleay_ssl_ctx_set_cert_cb!!func");
+    cb_arg  = cb_data_advanced_get(ctx, "ssleay_ssl_ctx_set_cert_cb!!arg");
+    if(!SvOK(cb_func))
+       croak ("Net::SSLeay: ssl_ctx_set_cert_cb_invoke called, but not set to 
point to any perl function.\n");
+
+    ENTER;
+    SAVETMPS;
+
+    PUSHMARK(SP);
+    EXTEND(SP, 2);
+    PUSHs(sv_2mortal(newSViv(PTR2IV(ssl))));
+    PUSHs(sv_2mortal(newSVsv(cb_arg)));
+
+    PUTBACK;
+    count = call_sv(cb_func, G_SCALAR);
+    SPAGAIN;
+
+    if (count != 1)
+      croak ("Net::SSLeay: ssl_ctx_set_cert_cb_invoke perl function returned 
%d values, 1 expected\n", count);
+    res = POPi;
+
+    PUTBACK;
+    FREETMPS;
+    LEAVE;
+
+    return res;
+}
+
 /* ============= end of callback stuff, begin helper functions ============== 
*/
 
 time_t ASN1_TIME_timet(ASN1_TIME *asn1t, time_t *gmtoff) {
@@ -2565,6 +2601,16 @@
 
 #endif
 
+#if OPENSSL_VERSION_NUMBER >= 0x1000200fL && !defined(LIBRESSL_VERSION_NUMBER) 
/* OpenSSL 1.0.2 */
+
+long
+SSL_CTX_set1_sigalgs_list(SSL_CTX *ctx, const char *str)
+
+long
+SSL_CTX_set1_client_sigalgs_list(SSL_CTX *ctx, const char *str)
+
+#endif
+
 #if OPENSSL_VERSION_NUMBER >= 0x1010100fL && !defined(LIBRESSL_VERSION_NUMBER) 
/* OpenSSL 1.1.1 */
 
 void
@@ -3584,6 +3630,54 @@
 
 #endif
 
+#if OPENSSL_VERSION_NUMBER >= 0x1000200fL && !defined(LIBRESSL_VERSION_NUMBER) 
/* OpenSSL 1.0.2 */
+
+long
+SSL_set1_sigalgs_list(SSL *ssl, const char *str)
+
+long
+SSL_set1_client_sigalgs_list(SSL *ssl, const char *str)
+
+void
+SSL_get_sigalgs(SSL *ssl, int idx)
+    PREINIT:
+        int n_sigalgs;
+        int psign = NID_undef, phash = NID_undef, psignhash = NID_undef;
+        unsigned char rsig = 0, rhash = 0;
+    PPCODE:
+        n_sigalgs = SSL_get_sigalgs(ssl, idx,
+                                    &psign, &phash, &psignhash,
+                                    &rsig, &rhash);
+
+        EXTEND(SP, 6);
+        PUSHs(sv_2mortal(newSViv(n_sigalgs)));
+        PUSHs(sv_2mortal(newSViv(psign)));
+        PUSHs(sv_2mortal(newSViv(phash)));
+        PUSHs(sv_2mortal(newSViv(psignhash)));
+        PUSHs(sv_2mortal(newSVuv(rsig)));
+        PUSHs(sv_2mortal(newSVuv(rhash)));
+
+void
+SSL_get_shared_sigalgs(SSL *ssl, int idx)
+    PREINIT:
+        int n_sigalgs;
+        int psign = NID_undef, phash = NID_undef, psignhash = NID_undef;
+        unsigned char rsig = 0, rhash = 0;
+    PPCODE:
+        n_sigalgs = SSL_get_shared_sigalgs(ssl, idx,
+                                    &psign, &phash, &psignhash,
+                                    &rsig, &rhash);
+
+        EXTEND(SP, 6);
+        PUSHs(sv_2mortal(newSViv(n_sigalgs)));
+        PUSHs(sv_2mortal(newSViv(psign)));
+        PUSHs(sv_2mortal(newSViv(phash)));
+        PUSHs(sv_2mortal(newSViv(psignhash)));
+        PUSHs(sv_2mortal(newSVuv(rsig)));
+        PUSHs(sv_2mortal(newSVuv(rhash)));
+
+#endif
+
 const BIO_METHOD *
 BIO_f_ssl()
 
@@ -6232,6 +6326,23 @@
 
 #endif
 
+#if OPENSSL_VERSION_NUMBER >= 0x1000200fL && !defined(LIBRESSL_VERSION_NUMBER)
+
+void
+SSL_CTX_set_cert_cb(SSL_CTX *ctx, SV *callback, SV *arg=&PL_sv_undef)
+    CODE:
+       if (callback==NULL || !SvOK(callback)) {
+           SSL_CTX_set_cert_cb(ctx, NULL, NULL);
+           cb_data_advanced_put(ctx, "ssleay_ssl_ctx_set_cert_cb!!func", NULL);
+           cb_data_advanced_put(ctx, "ssleay_ssl_ctx_set_cert_cb!!arg", NULL);
+       } else {
+           cb_data_advanced_put(ctx, "ssleay_ssl_ctx_set_cert_cb!!func", 
newSVsv(callback));
+           cb_data_advanced_put(ctx, "ssleay_ssl_ctx_set_cert_cb!!arg", 
newSVsv(arg));
+           SSL_CTX_set_cert_cb(ctx, ssl_ctx_set_cert_cb_invoke, NULL);
+       }
+
+#endif
+
 #if OPENSSL_VERSION_NUMBER >= 0x10101001L && !defined(LIBRESSL_VERSION_NUMBER)
 
 void
@@ -7493,8 +7604,12 @@
 
 #endif
 
+#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER < 
0x3090000fL) /* LibreSSL < 3.9.0 */
+
 int EVP_add_digest(const EVP_MD *digest)
 
+#endif
+
 #ifndef OPENSSL_NO_SHA
 
 const EVP_MD *EVP_sha1()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-SSLeay-1.94/helper_script/generate-test-pki 
new/Net-SSLeay-1.96/helper_script/generate-test-pki
--- old/Net-SSLeay-1.94/helper_script/generate-test-pki 2024-01-08 
02:17:02.000000000 +0100
+++ new/Net-SSLeay-1.96/helper_script/generate-test-pki 2026-03-21 
01:39:56.000000000 +0100
@@ -14,7 +14,7 @@
 use Getopt::Long qw(GetOptionsFromArray);
 use IPC::Run qw( start finish timeout );
 
-our $VERSION = '1.94';
+our $VERSION = '1.96';
 
 local $SIG{__DIE__} = sub {
     my ($cause) = @_;
@@ -1254,7 +1254,7 @@
 
 =head1 VERSION
 
-This document describes version 1.94 of C<generate-test-pki>.
+This document describes version 1.96 of C<generate-test-pki>.
 
 =head1 USAGE
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Net-SSLeay-1.94/helper_script/update-exported-constants 
new/Net-SSLeay-1.96/helper_script/update-exported-constants
--- old/Net-SSLeay-1.94/helper_script/update-exported-constants 2024-01-08 
02:17:02.000000000 +0100
+++ new/Net-SSLeay-1.96/helper_script/update-exported-constants 2026-03-21 
01:39:56.000000000 +0100
@@ -14,7 +14,7 @@
 use Getopt::Long qw(GetOptionsFromArray);
 use POSIX qw(ceil);
 
-our $VERSION = '1.94';
+our $VERSION = '1.96';
 
 local $SIG{__DIE__} = sub {
     my ($cause) = @_;
@@ -427,7 +427,7 @@
 
 =head1 VERSION
 
-This document describes version 1.94 of C<update-exported-constants>.
+This document describes version 1.96 of C<update-exported-constants>.
 
 =head1 USAGE
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-SSLeay-1.94/inc/Test/Net/SSLeay/Socket.pm 
new/Net-SSLeay-1.96/inc/Test/Net/SSLeay/Socket.pm
--- old/Net-SSLeay-1.94/inc/Test/Net/SSLeay/Socket.pm   2024-01-08 
02:17:02.000000000 +0100
+++ new/Net-SSLeay-1.96/inc/Test/Net/SSLeay/Socket.pm   2026-03-21 
01:39:56.000000000 +0100
@@ -13,7 +13,7 @@
     inet_aton inet_ntoa pack_sockaddr_in unpack_sockaddr_in
 );
 
-our $VERSION = '1.94';
+our $VERSION = '1.96';
 
 my %PROTOS = (
     tcp => SOCK_STREAM,
@@ -134,7 +134,7 @@
 
 =head1 VERSION
 
-This document describes version 1.94 of Test::Net::SSLeay::Socket.
+This document describes version 1.96 of Test::Net::SSLeay::Socket.
 
 =head1 SYNOPSIS
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-SSLeay-1.94/inc/Test/Net/SSLeay.pm 
new/Net-SSLeay-1.96/inc/Test/Net/SSLeay.pm
--- old/Net-SSLeay-1.94/inc/Test/Net/SSLeay.pm  2024-01-08 02:17:02.000000000 
+0100
+++ new/Net-SSLeay-1.96/inc/Test/Net/SSLeay.pm  2026-03-21 01:39:56.000000000 
+0100
@@ -14,7 +14,7 @@
 use Test::Builder;
 use Test::Net::SSLeay::Socket;
 
-our $VERSION = '1.94';
+our $VERSION = '1.96';
 
 our @EXPORT_OK = qw(
     can_fork can_really_fork can_thread
@@ -542,7 +542,7 @@
 
 =head1 VERSION
 
-This document describes version 1.94 of Test::Net::SSLeay.
+This document describes version 1.96 of Test::Net::SSLeay.
 
 =head1 SYNOPSIS
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-SSLeay-1.94/lib/Net/SSLeay/Handle.pm 
new/Net-SSLeay-1.96/lib/Net/SSLeay/Handle.pm
--- old/Net-SSLeay-1.94/lib/Net/SSLeay/Handle.pm        2024-01-08 
02:17:02.000000000 +0100
+++ new/Net-SSLeay-1.96/lib/Net/SSLeay/Handle.pm        2026-03-21 
01:39:56.000000000 +0100
@@ -57,7 +57,7 @@
 use vars qw(@ISA @EXPORT_OK $VERSION);
 @ISA = qw(Exporter);
 @EXPORT_OK = qw(shutdown);
-$VERSION = '1.94';
+$VERSION = '1.96';
 
 my $Initialized;       #-- only _initialize() once
 my $Debug = 0;         #-- pretty hokey
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-SSLeay-1.94/lib/Net/SSLeay.pm 
new/Net-SSLeay-1.96/lib/Net/SSLeay.pm
--- old/Net-SSLeay-1.94/lib/Net/SSLeay.pm       2024-01-08 02:17:02.000000000 
+0100
+++ new/Net-SSLeay-1.96/lib/Net/SSLeay.pm       2026-03-21 01:39:56.000000000 
+0100
@@ -70,7 +70,7 @@
 #   inc/Test/Net/SSLeay.pm
 #   inc/Test/Net/SSLeay/Socket.pm
 #   lib/Net/SSLeay/Handle.pm
-$VERSION = '1.94';
+$VERSION = '1.96';
 
 @ISA = qw(Exporter);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-SSLeay-1.94/lib/Net/SSLeay.pod 
new/Net-SSLeay-1.96/lib/Net/SSLeay.pod
--- old/Net-SSLeay-1.94/lib/Net/SSLeay.pod      2024-01-04 23:41:01.000000000 
+0100
+++ new/Net-SSLeay-1.96/lib/Net/SSLeay.pod      2026-03-18 23:17:08.000000000 
+0100
@@ -1,3 +1,4 @@
+
 =encoding utf-8
 
 =head1 NAME
@@ -48,12 +49,12 @@
 
 =item *
 
-Any stable release of L<OpenSSL|https://www.openssl.org> in the 0.9.8 - 3.2
+Any stable release of L<OpenSSL|https://www.openssl.org> in the 0.9.8 - 3.6
 branches, except for OpenSSL 0.9.8 - 0.9.8b.
 
 =item *
 
-Any stable release of L<LibreSSL|https://www.libressl.org> in the 2.0 - 3.8
+Any stable release of L<LibreSSL|https://www.libressl.org> in the 2.0 - 4.2
 series, except for LibreSSL 3.2.2 and 3.2.3.
 
 =back
@@ -3273,6 +3274,38 @@
 
 Check openssl doc 
L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_get0_param.html>
 
+=item * CTX_set1_sigalgs_list
+
+B<COMPATIBILITY:> not available in Net-SSLeay-1.94 and before; requires at 
least OpenSSL 1.0.2, not in LibreSSL
+
+Set the supported signature algorithms for $ctx. $str is a string consisting of
+a colon separated list of elements, where each element is either a combination
+of a public key algorithm and a digest separated by +, or a TLS 1.3-style named
+SignatureScheme such as rsa_pss_pss_sha256.
+
+    my $rv = Net::SSLeay::CTX_set1_sigalgs_list($str)
+    # $str - (string) signature algo list, e.g. "ECDSA+SHA256:RSA+SHA256"
+    #
+    # returns: 1 on success, 0 on failure
+
+Check openssl doc 
L<https://docs.openssl.org/master/man3/SSL_CTX_set1_sigalgs_list/>
+
+=item * CTX_set1_client_sigalgs_list
+
+B<COMPATIBILITY:> not available in Net-SSLeay-1.94 and before; requires at 
least OpenSSL 1.0.2, not in LibreSSL
+
+Set the supported client authentication signature algorithms for $ctx. $str is
+a string consisting of a colon separated list of elements, where each element
+is either a combination of a public key algorithm and a digest separated by +,
+or a TLS 1.3-style named SignatureScheme such as rsa_pss_pss_sha256.
+
+    my $rv = Net::SSLeay::CTX_set1_client_sigalgs_list($str)
+    # $str - (string) signature algo list, e.g. "ECDSA+SHA256:RSA+SHA256"
+    #
+    # returns: 1 on success, 0 on failure
+
+Check openssl doc 
L<https://docs.openssl.org/master/man3/SSL_CTX_set1_client_sigalgs_list/>
+
 =item * CTX_set_cert_store
 
 Sets/replaces the certificate verification storage of $ctx to/with $store.
@@ -3778,6 +3811,30 @@
 
 Check openssl doc 
L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_client_hello_cb.html>
 
+=item * CTX_set_cert_cb
+
+B<COMPATIBILITY:> not available in Net-SSLeay-1.94 and before
+
+Set the callback that is called before a certificate will be used by a client 
or server.
+
+    Net::SSLeay::CTX_set_cert_cb($ctx, $cb, [$arg]);
+    # $ctx  - value corresponding to openssl's SSL_CTX structure
+    # $cb - reference to a perl callback function
+    # $arg - optional data passed to the callback function when invoked
+    #
+    # returns: no return value
+
+    cert_cb_func($ssl, $arg);
+    # $ssl - value corresponding to OpenSSL's SSL object associated with the 
connection
+    # $arg - data to callback
+    #
+    # The callback must return an integer:
+    # 1: If the callback is successful, even if no certificates have been set.
+    # 0: On error which will abort the handshake with a fatal internal error 
alert.
+    # negative: To indicate suspended handshake returning 
Net::SSLeay::ERROR_WANT_X509_LOOKUP().
+
+Check openssl doc 
L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_cert_cb.html>
+
 =back
 
 =head3 Low level API: SSL_* related functions
@@ -4914,6 +4971,76 @@
 
 Check openssl doc 
L<https://www.openssl.org/docs/manmaster/man3/SSL_set_ciphersuites.html>
 
+=item * set1_sigalgs_list
+
+B<COMPATIBILITY:> not available in Net-SSLeay-1.94 and before; requires at 
least OpenSSL 1.0.2, not in LibreSSL
+
+Set the supported signature algorithms for $ssl. $str is a string consisting of
+a colon separated list of elements, where each element is either a combination
+of a public key algorithm and a digest separated by +, or a TLS 1.3-style named
+SignatureScheme such as rsa_pss_pss_sha256.
+
+    my $rv = Net::SSLeay::set1_sigalgs_list($str)
+    # $str - (string) signature algo list, e.g. "ECDSA+SHA256:RSA+SHA256"
+    #
+    # returns: 1 on success, 0 on failure
+
+Check openssl doc 
L<https://docs.openssl.org/master/man3/SSL_set1_sigalgs_list/>
+
+=item * set1_client_sigalgs_list
+
+B<COMPATIBILITY:> not available in Net-SSLeay-1.94 and before; requires at 
least OpenSSL 1.0.2, not in LibreSSL
+
+Set the supported client authentication signature algorithms for $ssl. $str is
+a string consisting of a colon separated list of elements, where each element
+is either a combination of a public key algorithm and a digest separated by +,
+or a TLS 1.3-style named SignatureScheme such as rsa_pss_pss_sha256.
+
+    my $rv = Net::SSLeay::set1_client_sigalgs_list($str)
+    # $str - (string) signature algo list, e.g. "ECDSA+SHA256:RSA+SHA256"
+    #
+    # returns: 1 on success, 0 on failure
+
+Check openssl doc 
L<https://docs.openssl.org/master/man3/SSL_set1_client_sigalgs_list/>
+
+=item * get_sigalgs
+
+B<COMPATIBILITY:> not available in Net-SSLeay-1.94 and before; requires at 
least OpenSSL 1.0.2, not in LibreSSL
+
+Return information about all signature algorithms supported by the TLS peer.
+
+    my @sigalg = Net::SSLeay::get_sigalgs($ssl, $idx)
+    # $ssl - value corresponding to openssl's SSL structure
+    # $idx - (integer) index in the list of algorithms sent by the peer
+    #
+    # returns: A list of six items described below.
+
+The first item in the list is the number of the signature algorithms
+or 0 if the $idx parameter is out of the range. The next three items
+are OpenSSL NIDs: the signature algorithm NID, the hash NID and the
+sign and hash NID. Items five and six are one octet signature and hash
+raw values from the wire.
+
+Check openssl doc L<https://docs.openssl.org/master/man3/SSL_get_sigalgs/>
+
+=item * get_shared_sigalgs
+
+B<COMPATIBILITY:> not available in Net-SSLeay-1.94 and before; requires at 
least OpenSSL 1.0.2, not in LibreSSL
+
+Return information about the shared signature algorithms supported by
+the TLS peer. This function takes similar arguments and returns
+similar values as C<Net::SSLeay::get_sigalgs>. See
+C<Net::SSLeay::get_sigalgs> for the details of function arguments and
+return values.
+
+    my @sigalg = Net::SSLeay::get_shared_sigalgs($ssl, $idx)
+    # $ssl - value corresponding to openssl's SSL structure
+    # $idx - (integer) index in the list of shared algorithms
+    #
+    # returns: A list of six items described below.
+
+Check openssl doc 
L<https://docs.openssl.org/master/man3/SSL_get_shared_sigalgs/>
+
 =item * set_client_CA_list
 
 Sets the list of CAs sent to the client when requesting a client certificate
@@ -7073,6 +7200,15 @@
     #
     # returns: value corresponding to openssl's STACK_OF(X509) structure
 
+=item * sk_X509_free
+
+Free an allocated STACK_OF(X509) structure.
+
+    Net::SSLeay::sk_X509_free($sk);
+    # $sk - value corresponding to openssl's STACK_OF(X509) structure
+    #
+    # returns: no return value
+
 =item * sk_X509_push
 
 Pushes an X509 structure onto a STACK_OF(X509) structure.
@@ -8336,6 +8472,15 @@
 
 =over
 
+=item * sk_X509_INFO_free
+
+Free an allocated STACK_OF(X509_INFO) structure.
+
+    Net::SSLeay::sk_X509_INFO_free($sk);
+    # $sk - value corresponding to openssl's STACK_OF(X509_INFO) structure
+    #
+    # returns: no return value
+
 =item * sk_X509_INFO_num
 
 Returns the number of values in a STACK_OF(X509_INFO) structure.
@@ -9019,6 +9164,8 @@
     #
     # returns: value corresponding to openssl's EVP_MD structure
 
+B<COMPATIBILITY:> no longer available in LibreSSL 3.9.0 and later
+
 =item * EVP_add_digest
 
     my $rv = Net::SSLeay::EVP_add_digest($digest);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-SSLeay-1.94/t/local/10_rand.t 
new/Net-SSLeay-1.96/t/local/10_rand.t
--- old/Net-SSLeay-1.94/t/local/10_rand.t       2021-12-29 20:50:35.000000000 
+0100
+++ new/Net-SSLeay-1.96/t/local/10_rand.t       2025-06-29 21:05:27.000000000 
+0200
@@ -59,8 +59,7 @@
 sub test_rand_file_name_openssl
 {
     my $file_name;
-    local %ENV = %ENV;
-    delete $ENV{RANDFILE};
+    delete local @ENV{'RANDFILE', 'HOME'};
 
     # NOTE: If there are test failures, are you using some type of
     # setuid environment? If so, this may affect usability of
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-SSLeay-1.94/t/local/32_x509_get_cert_info.t 
new/Net-SSLeay-1.96/t/local/32_x509_get_cert_info.t
--- old/Net-SSLeay-1.94/t/local/32_x509_get_cert_info.t 2024-01-04 
22:47:24.000000000 +0100
+++ new/Net-SSLeay-1.96/t/local/32_x509_get_cert_info.t 2025-06-29 
21:05:27.000000000 +0200
@@ -188,6 +188,11 @@
                   ) {
                       $ext_data =~ s{(othername:) [^, ]+}{$1<unsupported>}g;
                   }
+                  # Starting with 3.4.0 the double colon in emailAddress has 
been removed.
+                  # See https://github.com/openssl/openssl/commit/de8861a7e3100
+                  if (Net::SSLeay::SSLeay >= 0x30400000) {
+                      $ext_data =~ s{emailAddress::}{emailAddress:};
+                  }
               }
               elsif ( $nid == 89 ) {
                   # The output formatting for certificate policies has a
@@ -214,6 +219,9 @@
                       # OpenSSL 1.0.0 to 1.1.1:
                       $ext_data =~ s{(Full Name:\n  )}{\n$1}g;
                       $ext_data .= "\n";
+                  } elsif ( Net::SSLeay::SSLeay >  0x3040000f ) {
+                      $ext_data =~ s{(\nFull Name:)}{\n$1}g;
+                      $ext_data .= "\n";
                   }
               }
               elsif ( $nid == 126 ) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-SSLeay-1.94/t/local/40_npn_support.t 
new/Net-SSLeay-1.96/t/local/40_npn_support.t
--- old/Net-SSLeay-1.94/t/local/40_npn_support.t        2021-09-29 
00:15:32.000000000 +0200
+++ new/Net-SSLeay-1.96/t/local/40_npn_support.t        2024-04-04 
01:43:21.000000000 +0200
@@ -10,6 +10,9 @@
         plan skip_all => "OpenSSL 1.0.1 or above required";
     } elsif (Net::SSLeay::constant("LIBRESSL_VERSION_NUMBER")) {
         plan skip_all => "LibreSSL removed support for NPN";
+    } elsif (!defined &Net::SSLeay::CTX_set_next_protos_advertised_cb) {
+        # OpenSSL can optionally be compiled without NPN support
+        plan skip_all => "NPN is not enabled";
     } elsif (not can_fork()) {
         plan skip_all => "fork() not supported on this system";
     } elsif ( !eval { new_ctx( undef, 'TLSv1.2' ); 1 } ) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Net-SSLeay-1.94/t/local/62_threads-ctx_new-deadlock.t 
new/Net-SSLeay-1.96/t/local/62_threads-ctx_new-deadlock.t
--- old/Net-SSLeay-1.94/t/local/62_threads-ctx_new-deadlock.t   2024-01-04 
22:47:24.000000000 +0100
+++ new/Net-SSLeay-1.96/t/local/62_threads-ctx_new-deadlock.t   2026-02-04 
01:23:42.000000000 +0100
@@ -1,7 +1,7 @@
 use lib 'inc';
 
 use Net::SSLeay;
-use Test::Net::SSLeay qw( can_thread initialise_libssl );
+use Test::Net::SSLeay qw( can_thread is_openssl initialise_libssl );
 
 use FindBin;
 
@@ -26,14 +26,24 @@
 # If we need to do OPENSSL_INIT_crypto() call, we must skip the
 # default library initialisation. Otherwise our call to
 # OPENSSL_init_crypto() won't do anything.
-eval { Net::SSLeay::OPENSSL_INIT_NO_ATEXIT(); return 1; } ?
-    Net::SSLeay::OPENSSL_init_crypto(Net::SSLeay::OPENSSL_INIT_NO_ATEXIT(), 
undef) :
+if (is_openssl()) {
+    eval { Net::SSLeay::OPENSSL_INIT_NO_ATEXIT(); return 1; } ?
+       Net::SSLeay::OPENSSL_init_crypto(Net::SSLeay::OPENSSL_INIT_NO_ATEXIT(), 
undef) :
+       initialise_libssl();
+} else {
+    # At the time of writing OPENSSL_init_crypto is not exposed with
+    # LibreSSL. Even if it were exposed we can skip atexit() special
+    # handling because LibreSSL 4.1.0 release notes state the
+    # following:
+    #   Added an OPENSSL_INIT_NO_ATEXIT flag for OPENSSL_init_crypto().
+    #   It has no effect since LibreSSL doesn't call atexit().
     initialise_libssl();
+}
 
 my $start_time = time;
 
 #exit the whole program if it runs too long
-threads->new( sub { sleep 20; warn "FATAL: TIMEOUT!"; exit } )->detach;
+threads->new( sub { sleep 30; warn "FATAL: TIMEOUT!"; exit } )->detach;
 
 #print STDERR "Gonna start multi-threading part\n";
 threads->new(\&do_check) for (1..100);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-SSLeay-1.94/t/local/67_sigalgs.t 
new/Net-SSLeay-1.96/t/local/67_sigalgs.t
--- old/Net-SSLeay-1.94/t/local/67_sigalgs.t    1970-01-01 01:00:00.000000000 
+0100
+++ new/Net-SSLeay-1.96/t/local/67_sigalgs.t    2026-03-20 01:28:19.000000000 
+0100
@@ -0,0 +1,180 @@
+
+# Tests for SSL_CTX_set1_sigalgs_list and related functions
+
+use lib 'inc';
+
+use Net::SSLeay;
+use Test::Net::SSLeay qw(can_fork data_file_path initialise_libssl new_ctx 
tcp_socket);
+
+initialise_libssl();
+
+if (!defined &Net::SSLeay::CTX_set1_sigalgs_list) {
+    plan skip_all => "No CTX_set1_sigalgs_list()";
+} else {
+    plan tests => 23;
+}
+
+my $version_num = Net::SSLeay::OPENSSL_VERSION_NUMBER();
+
+my ($ctx, $proto) = new_ctx('TLSv1.2', 'TLSv1.3');
+my $ssl = Net::SSLeay::new($ctx);
+
+# '?' in the list means that the algorithm can be ignored if it's not
+# implemented
+my @tests = (
+    # TLSv1.3 list                   # TLSv1.2 list       # components in the 
list # retval
+    ['rsa_pss_rsae_sha256',          'RSA+SHA1',          'valid',             
    1],
+    ['rsa_pss_rsae_sha256:invalid',  'RSA+SHA1:invalid',  'valid and invalid', 
    0],
+    ['invalid',                      'invalid',           'invalid',           
    0],
+    ['rsa_pss_rsae_sha256:?invalid', 'RSA+SHA1:?invalid', 'valid and ignored', 
    1],
+    );
+
+foreach my $test (@tests)
+{
+    my $list = $proto eq 'TLSv1.3' ? $test->[0] : $test->[1];
+
+  SKIP: {
+      # Support for ignoring a sigalg requires OpenSSL 3.0 and later
+      skip "No support for ignoring signature algorithms in " . 
Net::SSLeay::SSLeay_version(), 4
+         if ($list =~ m/\?/s && $version_num < 0x30300000);
+       is(Net::SSLeay::CTX_set1_sigalgs_list       ($ctx, $list), $test->[3], 
"$proto CTX_set1_sigalgs_list('$list') list is: $test->[2]");
+       is(Net::SSLeay::CTX_set1_client_sigalgs_list($ctx, $list), $test->[3], 
"$proto CTX_set1_client_sigalgs_list('$list') list is: $test->[2]");
+       is(Net::SSLeay::set1_sigalgs_list       ($ssl, $list), $test->[3], 
"$proto set1_sigalgs_list('$list') list is: $test->[2]");
+       is(Net::SSLeay::set1_client_sigalgs_list($ssl, $list), $test->[3], 
"$proto set1_client_sigalgs_list('$list') list is: $test->[2]");
+  }
+}
+
+my $pid;
+alarm(30);
+END { kill 9,$pid if $pid }
+
+# Load file contents before fork to avoid failure on Windows.
+# For more information, see
+# https://github.com/radiator-software/p5-net-ssleay/issues/544
+my $ca_file_pem = data_file_path('intermediate-ca.certchain.pem');
+my $cert_pem = data_file_path('simple-cert.cert.pem');
+my $key_pem  = data_file_path('simple-cert.key.pem');
+
+# See client's cert_cb callback below for more background information
+# about sigalgs function use in this callback.
+my $server_msg_to_be_sent;
+sub cert_cb_server {
+   my ($ssl, $cb_data) = @_;
+
+   my $idx = 0;
+   my @peer_sigalgs = Net::SSLeay::get_sigalgs($ssl, $idx);
+   my $peer_num_algs = $peer_sigalgs[0];
+
+   my @shared_sigalgs = Net::SSLeay::get_shared_sigalgs($ssl, 0);
+   my $shared_num_algs = $shared_sigalgs[0];
+
+   $server_msg_to_be_sent = $cb_data . " $peer_num_algs $shared_num_algs";
+
+   return 1;
+}
+
+# Filled in by server's cert_cb
+my $server = tcp_socket();
+{
+    # SSL server - just handle single connect and  shutdown connection
+    defined($pid = fork()) or BAIL_OUT("failed to fork: $!");
+    if ($pid == 0) {
+       my $cl = $server->accept();
+       my $ctx = new_ctx();
+       Net::SSLeay::CTX_load_verify_locations($ctx, $ca_file_pem, '');
+       Net::SSLeay::set_cert_and_key($ctx, $cert_pem, $key_pem);
+       Net::SSLeay::CTX_set_verify($ctx, (Net::SSLeay::VERIFY_PEER() | 
Net::SSLeay::VERIFY_FAIL_IF_NO_PEER_CERT()));
+
+       # Set this variable from the certificate callback
+       Net::SSLeay::CTX_set_cert_cb($ctx, \&cert_cb_server , 'server cert_cb 
called:');
+
+       my $ssl = Net::SSLeay::new($ctx);
+       Net::SSLeay::set_fd($ssl, fileno($cl));
+       Net::SSLeay::accept($ssl);
+
+       # Send the message that's been updated by server's cert_cb
+       Net::SSLeay::write($ssl, $server_msg_to_be_sent);
+       Net::SSLeay::shutdown($ssl);
+
+       close($cl) || die("server close: $!");
+        $server->close() || die("server listen socket close: $!");
+        exit;
+    }
+}
+
+# Why SSL_get_siglags and SSH_get_shared_sigalgs are tested within
+# certificate callback? See the following quote from OpenSSL
+# SSL_get_shared_sigalgs manual page:
+#
+# These functions must be called after the peer has sent a list of
+# supported signature algorithms: after a client hello (for servers)
+# or a certificate request (for clients). They can (for example) be
+# called in the certificate callback.
+sub cert_cb_client {
+   my ($ssl, $cb_data) = @_;
+
+   is($cb_data, 'client cert_cb arg', 'Client certificate callback was 
called');
+
+   {
+       my $idx = 0;
+       my @peer_sigalgs = Net::SSLeay::get_sigalgs($ssl, $idx);
+       my $num_algs = $peer_sigalgs[0];
+       cmp_ok($num_algs, '>', 0, "client: get_sigalgs returns > 0 algs: 
$num_algs");
+
+       while ($idx < $num_algs) {
+          @peer_sigalgs = Net::SSLeay::get_sigalgs($ssl, $idx++);
+          fail('Failed looping through get_sigalgs')
+               if ($peer_sigalgs[0] != $num_algs || $peer_sigalgs[0] == 0);
+       }
+   }
+
+   # Similar loop but this time for shared sigalgs
+   {
+       my $idx = 0;
+       my @shared_sigalgs = Net::SSLeay::get_shared_sigalgs($ssl, $idx);
+       my $num_algs = $shared_sigalgs[0];
+       cmp_ok($num_algs, '>', 0, "client: get_shared_sigalgs returns > 0 algs: 
$num_algs");
+
+       while ($idx < $num_algs) {
+           @shared_sigalgs = Net::SSLeay::get_shared_sigalgs($ssl, $idx++);
+           fail('Failed looping through get_shared_sigalgs')
+               if ($shared_sigalgs[0] != $num_algs || $shared_sigalgs[0] == 0);
+       }
+   }
+
+   return 1;
+}
+
+sub client {
+    # SSL client - connect and shutdown
+
+    my $cl = $server->connect();
+    my $ctx = new_ctx();
+    Net::SSLeay::set_cert_and_key($ctx, $cert_pem, $key_pem);
+    Net::SSLeay::CTX_set_options($ctx, Net::SSLeay::OP_ALL());
+    Net::SSLeay::CTX_set_cert_cb($ctx, \&cert_cb_client, 'client cert_cb arg');
+
+    my $ssl = Net::SSLeay::new($ctx);
+    Net::SSLeay::set1_client_sigalgs_list($ssl, 'rsa_pss_rsae_sha256');
+    Net::SSLeay::set_fd($ssl, $cl);
+    Net::SSLeay::connect($ssl);
+
+    my $server_msg = Net::SSLeay::read($ssl);
+    like($server_msg, qr/server cert_cb called: \d+ \d+/, 'Server certificate 
callback was called');
+    my ($server_num_sigalgs, $server_num_shared_sigalgs) = ($server_msg =~ 
m/(\d+) (\d+)\z/s);
+    cmp_ok($server_num_sigalgs,        '>', 0, "server: get_sigalgs returns > 
0 algs: $server_num_sigalgs");
+    cmp_ok($server_num_shared_sigalgs, '>', 0, "server: get_shared_sigalgs 
returns > 0 algs: $server_num_shared_sigalgs");
+
+    Net::SSLeay::shutdown($ssl);
+
+    close($cl) || die("client close: $!");
+
+    my $unset_cb = eval {Net::SSLeay::CTX_set_cert_cb($ctx, undef); 1; };
+    is($unset_cb, 1, "no error when removing the certificate callback");
+
+    return;
+}
+
+client();
+$server->close() || die("client listen socket close: $!");
+waitpid $pid, 0;

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

## Build Results

Current state of perl in openSUSE:Factory is

![Factory build 
results](https://br.opensuse.org/status/openSUSE:Factory/perl-Net-SSLeay/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-Net-SSLeay)



++++++ _scmsync.obsinfo ++++++
mtime: 1781443280
commit: 1f4ac53ebbe064be5132e93bc93c64a3ab801502e3c63bb0449011374e56b754
url: https://src.opensuse.org/perl/perl-Net-SSLeay
revision: 1f4ac53ebbe064be5132e93bc93c64a3ab801502e3c63bb0449011374e56b754
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-06-14 15:21:20.000000000 +0200
@@ -0,0 +1 @@
+.osc

Reply via email to