<pre style='margin:0'>
David B. Evans (dbevans) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/ca6904402c8ae935e1b3b9dd3ca50150ee84d9ff">https://github.com/macports/macports-ports/commit/ca6904402c8ae935e1b3b9dd3ca50150ee84d9ff</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new ca6904402c8 p5-crypt-openssl-ecdsa: update to version 0.10
</span>ca6904402c8 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit ca6904402c8ae935e1b3b9dd3ca50150ee84d9ff
</span>Author: David B. Evans <devans@macports.org>
AuthorDate: Fri Dec 10 12:39:42 2021 -0800

<span style='display:block; white-space:pre;color:#404040;'>    p5-crypt-openssl-ecdsa: update to version 0.10
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Previous compatibility patch now included upstream.
</span>---
 perl/p5-crypt-openssl-ecdsa/Portfile               |  15 +-
 .../files/0001-Port-to-OpenSSL-1.1.0.patch         | 252 ---------------------
 2 files changed, 5 insertions(+), 262 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/perl/p5-crypt-openssl-ecdsa/Portfile b/perl/p5-crypt-openssl-ecdsa/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 4565543e15f..45799cb71fc 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/perl/p5-crypt-openssl-ecdsa/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/perl/p5-crypt-openssl-ecdsa/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3,11 +3,9 @@
</span> PortSystem          1.0
 PortGroup           perl5 1.0
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Makefile.PL requires perl >= 5.18.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> perl5.branches      5.28 5.30 5.32
<span style='display:block; white-space:pre;background:#ffe0e0;'>-perl5.setup         Crypt-OpenSSL-ECDSA 0.08
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-revision            2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+perl5.setup         Crypt-OpenSSL-ECDSA 0.10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            0
</span> license             {Artistic-1 GPL}
 maintainers         nomaintainer
 description         Crypt::OpenSSL::ECDSA - Perl extension for OpenSSL ECDSA \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -16,18 +14,15 @@ long_description    ${description}
</span> 
 platforms           darwin
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums           rmd160  274ce00c51451638a72cd265f8e3bd67b08ebb57 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sha256  8439f6af81cc5e656e8b2f4dd86a98faa95d9938dcdcbfc7c22bb358eb5f8deb \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    size    52955
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums           rmd160  f8f5fcad89d7919a0373a677d51727ca9a296f87 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  070b6829528c8111c01cd4d264c7cfb5bea7636e25d936f4f87fba8b4e46ff0a \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    53607
</span> 
 if {${perl5.major} != ""} {
     depends_lib-append \
                     path:lib/libssl.dylib:openssl \
                     port:p${perl5.major}-crypt-openssl-ec
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# apply RedHat patch for compatibility with OpenSSL 1.1.0+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    patchfiles      0001-Port-to-OpenSSL-1.1.0.patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>     configure.env-append \
                     OPENSSL_PREFIX=${prefix}
 }
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/perl/p5-crypt-openssl-ecdsa/files/0001-Port-to-OpenSSL-1.1.0.patch b/perl/p5-crypt-openssl-ecdsa/files/0001-Port-to-OpenSSL-1.1.0.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 127e28f8443..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/perl/p5-crypt-openssl-ecdsa/files/0001-Port-to-OpenSSL-1.1.0.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,252 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From b110ec2277ba33e0935f3d465a5413f669d8aefc Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Tue, 11 Oct 2016 16:15:43 +0200
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH] Port to OpenSSL 1.1.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MIME-Version: 1.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Content-Type: text/plain; charset=UTF-8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Content-Transfer-Encoding: 8bit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OpenSSL 1.1.0 hid ECDSA structure internals and provided methods
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-instead.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This patch uses the methods and provides their copies in the case of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-older OpenSSL. Because the new OpenSSL API, ECDSA_SIG_set0(), cannot
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set curve parameters individually and ECDSA_SIG_get0() returns yet
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-another reference, it's necessary to duplicate the other unchanged
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-paramater when calling set_r() or set_s().
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This patch also stops exporting ECDSA_METHOD functions that were
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-removed from the new OpenSSL.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CPAN RT#118330
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Signed-off-by: Petr Písař <ppisar@redhat.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ECDSA.xs                | 105 ++++++++++++++++++++++++++++++++++++++++--------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- t/Crypt-OpenSSL-ECDSA.t |  13 +++++-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 2 files changed, 100 insertions(+), 18 deletions(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/ECDSA.xs b/ECDSA.xs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 4016368..3d6e2d1 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- ECDSA.xs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ECDSA.xs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -7,9 +7,35 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <openssl/ecdsa.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <openssl/err.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <openssl/bn.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "const-c.inc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <openssl/ec.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* ECDSA_SIG_get0() and ECDSA_SIG_set0() copied from OpenSSL 1.1.0b. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    const BIGNUM **ps) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (pr != NULL)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        *pr = sig->r;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (ps != NULL)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        *ps = sig->s;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (r == NULL || s == NULL)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    BN_clear_free(sig->r);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    BN_clear_free(sig->s);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    sig->r = r;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    sig->s = s;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- MODULE = Crypt::OpenSSL::ECDSA            PACKAGE = Crypt::OpenSSL::ECDSA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- PROTOTYPES: ENABLE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -17,7 +43,9 @@ INCLUDE: const-xs.inc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- BOOT:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     ERR_load_crypto_strings();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if OPENSSL_VERSION_NUMBER >= 0x10002000L && OPENSSL_VERSION_NUMBER < 0x10100000L
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     ERR_load_ECDSA_strings();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ECDSA_SIG *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ECDSA_SIG_new()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -61,10 +89,16 @@ ECDSA_do_verify(const unsigned char *dgst, const ECDSA_SIG *sig, EC_KEY* eckey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   OUTPUT:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           RETVAL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--# These ECDSA_METHOD functions only became available in 1.0.2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# These ECDSA_METHOD functions only became available in 1.0.2,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# but some of them removed again in 1.1.0.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #if OPENSSL_VERSION_NUMBER >= 0x10002000L
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int         
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ECDSA_size(const EC_KEY *eckey)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if OPENSSL_VERSION_NUMBER < 0x10100000L
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const ECDSA_METHOD *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ECDSA_OpenSSL()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -77,9 +111,6 @@ ECDSA_get_default_method()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int         
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--int         
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--ECDSA_size(const EC_KEY *eckey)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ECDSA_METHOD *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ECDSA_METHOD_new(ECDSA_METHOD *ecdsa_method=0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -95,7 +126,7 @@ ECDSA_METHOD_set_name(ECDSA_METHOD *ecdsa_method, char *name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ERR_load_ECDSA_strings()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -135,11 +166,13 @@ SV *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- get_r(ecdsa_sig)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         ECDSA_SIG *ecdsa_sig
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     PREINIT:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        const BIGNUM *r;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         unsigned char *to;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         STRLEN len;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     CODE:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         to = malloc(sizeof(char) * 128);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        len = BN_bn2bin(ecdsa_sig->r, to);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        ECDSA_SIG_get0(ecdsa_sig, &r, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        len = BN_bn2bin(r, to);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         RETVAL = newSVpvn((const char*)to, len);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         free(to);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     OUTPUT:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -149,11 +182,13 @@ SV *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- get_s(ecdsa_sig)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         ECDSA_SIG *ecdsa_sig
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     PREINIT:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        const BIGNUM *s;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         unsigned char *to;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         STRLEN len;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     CODE:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         to = malloc(sizeof(char) * 128);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        len = BN_bn2bin(ecdsa_sig->s, to);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        ECDSA_SIG_get0(ecdsa_sig, NULL, &s);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        len = BN_bn2bin(s, to);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         RETVAL = newSVpvn((const char*)to, len);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         free(to);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     OUTPUT:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -164,26 +199,62 @@ set_r(ecdsa_sig, r_SV)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         ECDSA_SIG *ecdsa_sig
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         SV * r_SV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     PREINIT:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  char *s;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      char *string;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         STRLEN len;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        BIGNUM *r;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        BIGNUM *s;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        const BIGNUM *old_s;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     CODE:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        s = SvPV(r_SV, len);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        if (ecdsa_sig->r)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            BN_free(ecdsa_sig->r);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        ecdsa_sig->r = BN_bin2bn((const unsigned char *)s, len, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        string = SvPV(r_SV, len);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        r = BN_bin2bn((const unsigned char *)string, len, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (NULL == r)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            croak("Could not convert ECDSA parameter string to big number");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        ECDSA_SIG_get0(ecdsa_sig, NULL, &old_s);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (NULL == old_s) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            s = BN_new();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            s = BN_dup(old_s);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (NULL == s) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            BN_free(r);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            croak("Could not duplicate unchanged ECDSA parameter");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (!ECDSA_SIG_set0(ecdsa_sig, r, s)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            BN_free(r);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            BN_free(s);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            croak("Could not store ECDSA parameters");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set_s(ecdsa_sig, s_SV)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         ECDSA_SIG *ecdsa_sig
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         SV * s_SV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     PREINIT:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  char *s;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      char *string;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         STRLEN len;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        BIGNUM *r;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        BIGNUM *s;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        const BIGNUM *old_r;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     CODE:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        s = SvPV(s_SV, len);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        if (ecdsa_sig->s)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            BN_free(ecdsa_sig->s);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        ecdsa_sig->s = BN_bin2bn((const unsigned char *)s, len, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        string = SvPV(s_SV, len);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        s = BN_bin2bn((const unsigned char *)string, len, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (NULL == s)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            croak("Could not convert ECDSA parameter string to big number");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        ECDSA_SIG_get0(ecdsa_sig, &old_r, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (NULL == old_r) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            r = BN_new();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            r = BN_dup(old_r);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (NULL == r) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            BN_free(s);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            croak("Could not duplicate unchanged ECDSA parameter");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (!ECDSA_SIG_set0(ecdsa_sig, r, s)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            BN_free(r);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            BN_free(s);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            croak("Could not store ECDSA parameters");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/t/Crypt-OpenSSL-ECDSA.t b/t/Crypt-OpenSSL-ECDSA.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 7ab584f..3c02025 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- t/Crypt-OpenSSL-ECDSA.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ t/Crypt-OpenSSL-ECDSA.t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -6,7 +6,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use strict;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- use warnings;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--use Test::More tests => 21;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+use Test::More tests => 25;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- BEGIN { use_ok('Crypt::OpenSSL::ECDSA'); use_ok('Crypt::OpenSSL::EC');  };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -77,6 +77,17 @@ $ret = Crypt::OpenSSL::ECDSA::ECDSA_do_verify($digest, $sig, $key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ok($ret);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- undef $sig;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# Test a signature can be built from scratch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+$sig = Crypt::OpenSSL::ECDSA::ECDSA_SIG->new();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ok($sig, 'Empty Crypt::OpenSSL::ECDSA::ECDSA_SIG object created');
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+eval { $sig->set_r($r); };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ok(!$@, 'R parameter set');
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+eval { $sig->set_s($s); };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ok(!$@, 'S parameter set');
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+$ret = Crypt::OpenSSL::ECDSA::ECDSA_do_verify($digest, $sig, $key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ok($ret, 'built-from-scratch signature matches');
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+undef $sig;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Testing signing and verifying with the _ex version
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- my $dummy = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $sig = Crypt::OpenSSL::ECDSA::ECDSA_do_sign_ex($digest, \$dummy, \$dummy, $key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2.7.4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span></pre><pre style='margin:0'>

</pre>