summaryrefslogtreecommitdiff
path: root/dev-perl/Crypt-OpenSSL-ECDSA
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2019-11-03 16:06:58 +0000
committerV3n3RiX <venerix@redcorelinux.org>2019-11-03 16:06:58 +0000
commitbd4aeefe33e63f613512604e47bfca7b2187697d (patch)
treeadb35b5a9a00ee7ea591ab0c987f70167c23b597 /dev-perl/Crypt-OpenSSL-ECDSA
parent48ece6662cbd443015f5a57ae6d8cbdbd69ef37c (diff)
gentoo resync : 03.11.2019
Diffstat (limited to 'dev-perl/Crypt-OpenSSL-ECDSA')
-rw-r--r--dev-perl/Crypt-OpenSSL-ECDSA/Crypt-OpenSSL-ECDSA-0.80.0-r2.ebuild (renamed from dev-perl/Crypt-OpenSSL-ECDSA/Crypt-OpenSSL-ECDSA-0.80.0.ebuild)6
-rw-r--r--dev-perl/Crypt-OpenSSL-ECDSA/Manifest3
-rw-r--r--dev-perl/Crypt-OpenSSL-ECDSA/files/Crypt-OpenSSL-ECDSA-0.80.0-0002-Port-to-OpenSSL-1.1.0.patch252
3 files changed, 259 insertions, 2 deletions
diff --git a/dev-perl/Crypt-OpenSSL-ECDSA/Crypt-OpenSSL-ECDSA-0.80.0.ebuild b/dev-perl/Crypt-OpenSSL-ECDSA/Crypt-OpenSSL-ECDSA-0.80.0-r2.ebuild
index bf2757bb052f..c9cc88aaf9a5 100644
--- a/dev-perl/Crypt-OpenSSL-ECDSA/Crypt-OpenSSL-ECDSA-0.80.0.ebuild
+++ b/dev-perl/Crypt-OpenSSL-ECDSA/Crypt-OpenSSL-ECDSA-0.80.0-r2.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2017 Gentoo Foundation
+# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=6
@@ -20,3 +20,7 @@ RDEPEND="
DEPEND="${RDEPEND}
virtual/perl-ExtUtils-MakeMaker
"
+
+PATCHES=(
+ "${FILESDIR}/${P}-0002-Port-to-OpenSSL-1.1.0.patch"
+)
diff --git a/dev-perl/Crypt-OpenSSL-ECDSA/Manifest b/dev-perl/Crypt-OpenSSL-ECDSA/Manifest
index 3cdffadf1825..d30fa7d2b84a 100644
--- a/dev-perl/Crypt-OpenSSL-ECDSA/Manifest
+++ b/dev-perl/Crypt-OpenSSL-ECDSA/Manifest
@@ -1,5 +1,6 @@
AUX Crypt-OpenSSL-ECDSA-0.80.0-0001-Port-to-OpenSSL-1.1.0.patch 5190 BLAKE2B 6c33efc7a74dd044e2edcadaae864d0f9f573740de054a1e8e9a1a589b5d6a460b281bff6bb544c4d32a0de7cb5f02ee73a1532d6be58b413506be28f94f1263 SHA512 243c7c48cf9e734ef4f83da9d7bdf6bdcdc7010aca337a3a8c2f3870cc0168fce860d924d3b722760caba8a5204ec0b292efc6b0393bd659663118cf9bc636db
+AUX Crypt-OpenSSL-ECDSA-0.80.0-0002-Port-to-OpenSSL-1.1.0.patch 6988 BLAKE2B 5b40ec7a06b81e49271c304380fc227b105872328b1bc077cd7b10eaaeec8aacd4dcae9595aa2db189ae0ef612e87a302b8ec158a7f4442bf01e1deb8500b2d6 SHA512 c9ef31155af0b1fa247aa782909ebfd7af6ea2c1eb05aafd928f3ad04406faf80f460689d5097b5641e8018da81e690099d5f33885c87bc48f08f1bf32d31c67
DIST Crypt-OpenSSL-ECDSA-0.08.tar.gz 52955 BLAKE2B 014d0d82dde21d8a797f0c498f8534b5c4034c5a5414c358ce5a9da1598fddd4cf03a4187e0acd0272e58d0e21002f426c0e8f41d4f485b7dae168c2facbc24e SHA512 7bccf904819b323ad958dcb59ef3981e3f22813057727cb7d19d4eeab69f57ed7b63e4e586f7494c316e7568d606087099738918eb440947d326ae5a703e9b19
EBUILD Crypt-OpenSSL-ECDSA-0.80.0-r1.ebuild 543 BLAKE2B 18343e62930ccfb6659f995b33ac68a2e762b83b747080e1c83a46ed95433c8dd96229f45e83f9132f8b1f337871d2edda33fc39e6614d5f205841e7eac42316 SHA512 3df21c5f2bd419562ea530b2f64e491afa3cabdd8ccfd9903e841422f39e85f20faee4edc48e3ee96f8e6f3ec8983c8b290bcd04b8d786bdd9d836614c756673
-EBUILD Crypt-OpenSSL-ECDSA-0.80.0.ebuild 480 BLAKE2B 14bf19458cffb6bf6993007b74123da4e1e06c18e5be483c9a79d303de8544e81116426a29a1cfbafac0d1b66525a2613c1a804001733a2139ba3dfa0be4f899 SHA512 8b89bacd4ec0c6d177ec34fd862a73c31c784e8c50dcde632ce114ca24067928c33dfe5e4419a1a882dab122eef7779bb8c7fe0edbf56658ca5d5a3bef1bfb52
+EBUILD Crypt-OpenSSL-ECDSA-0.80.0-r2.ebuild 543 BLAKE2B ef524fd4e4f8fe63026ea4da728ef8ea4c769ec37dc71a7c7f6f83b4d5804c10ee420568236affaf256ab71f96ac2e5d9ee30091050b73546934ec0a17319e6a SHA512 332fbe1d4c04e7a68d57a46254166e3aeb845f0e8d1fcd84a0840c5e1509a4cb0b5882db7950a4adcb535eec56ce4e154962a7b6ad72f11da8a7890b4ce6534e
MISC metadata.xml 411 BLAKE2B 25f4cd25a774a8ca02630c9408e5552ef64c6f20d522d67e5eadf66b633400a01298c149f31243918ce73bea6e7d99c14f22972c2f1c449a2b78ed8148a6a61f SHA512 7dde247b0b93d93f6776cf2570fdd6225d4087183b6c626d950f09648748181dd15d78fc164e8700b245430027bd59a408e6affa7466773b6fd6740c9a1958b8
diff --git a/dev-perl/Crypt-OpenSSL-ECDSA/files/Crypt-OpenSSL-ECDSA-0.80.0-0002-Port-to-OpenSSL-1.1.0.patch b/dev-perl/Crypt-OpenSSL-ECDSA/files/Crypt-OpenSSL-ECDSA-0.80.0-0002-Port-to-OpenSSL-1.1.0.patch
new file mode 100644
index 000000000000..9fe9f58d4763
--- /dev/null
+++ b/dev-perl/Crypt-OpenSSL-ECDSA/files/Crypt-OpenSSL-ECDSA-0.80.0-0002-Port-to-OpenSSL-1.1.0.patch
@@ -0,0 +1,252 @@
+From b110ec2277ba33e0935f3d465a5413f669d8aefc Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
+Date: Tue, 11 Oct 2016 16:15:43 +0200
+Subject: [PATCH] Port to OpenSSL 1.1.0
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+OpenSSL 1.1.0 hid ECDSA structure internals and provided methods
+instead.
+
+This patch uses the methods and provides their copies in the case of
+older OpenSSL. Because the new OpenSSL API, ECDSA_SIG_set0(), cannot
+set curve parameters individually and ECDSA_SIG_get0() returns yet
+another reference, it's necessary to duplicate the other unchanged
+paramater when calling set_r() or set_s().
+
+This patch also stops exporting ECDSA_METHOD functions that were
+removed from the new OpenSSL.
+
+CPAN RT#118330
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ ECDSA.xs | 105 ++++++++++++++++++++++++++++++++++++++++--------
+ t/Crypt-OpenSSL-ECDSA.t | 13 +++++-
+ 2 files changed, 100 insertions(+), 18 deletions(-)
+
+diff --git a/ECDSA.xs b/ECDSA.xs
+index 4016368..3d6e2d1 100644
+--- a/ECDSA.xs
++++ b/ECDSA.xs
+@@ -7,9 +7,35 @@
+
+ #include <openssl/ecdsa.h>
+ #include <openssl/err.h>
++#include <openssl/bn.h>
+
+ #include "const-c.inc"
+
++
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++#include <openssl/ec.h>
++#else
++/* ECDSA_SIG_get0() and ECDSA_SIG_set0() copied from OpenSSL 1.1.0b. */
++static void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr,
++ const BIGNUM **ps) {
++ if (pr != NULL)
++ *pr = sig->r;
++ if (ps != NULL)
++ *ps = sig->s;
++}
++
++static int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s)
++{
++ if (r == NULL || s == NULL)
++ return 0;
++ BN_clear_free(sig->r);
++ BN_clear_free(sig->s);
++ sig->r = r;
++ sig->s = s;
++ return 1;
++}
++#endif
++
+ MODULE = Crypt::OpenSSL::ECDSA PACKAGE = Crypt::OpenSSL::ECDSA
+
+ PROTOTYPES: ENABLE
+@@ -17,7 +43,9 @@ INCLUDE: const-xs.inc
+
+ BOOT:
+ ERR_load_crypto_strings();
++#if OPENSSL_VERSION_NUMBER >= 0x10002000L && OPENSSL_VERSION_NUMBER < 0x10100000L
+ ERR_load_ECDSA_strings();
++#endif
+
+ #ECDSA_SIG *
+ #ECDSA_SIG_new()
+@@ -61,10 +89,16 @@ ECDSA_do_verify(const unsigned char *dgst, const ECDSA_SIG *sig, EC_KEY* eckey);
+ OUTPUT:
+ RETVAL
+
+-# These ECDSA_METHOD functions only became available in 1.0.2
++# These ECDSA_METHOD functions only became available in 1.0.2,
++# but some of them removed again in 1.1.0.
+
+ #if OPENSSL_VERSION_NUMBER >= 0x10002000L
+
++int
++ECDSA_size(const EC_KEY *eckey)
++
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
++
+ const ECDSA_METHOD *
+ ECDSA_OpenSSL()
+
+@@ -77,9 +111,6 @@ ECDSA_get_default_method()
+ int
+ ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth)
+
+-int
+-ECDSA_size(const EC_KEY *eckey)
+-
+ ECDSA_METHOD *
+ ECDSA_METHOD_new(ECDSA_METHOD *ecdsa_method=0)
+
+@@ -95,7 +126,7 @@ ECDSA_METHOD_set_name(ECDSA_METHOD *ecdsa_method, char *name)
+ void
+ ERR_load_ECDSA_strings()
+
+-
++#endif
+ #endif
+
+
+@@ -135,11 +166,13 @@ SV *
+ get_r(ecdsa_sig)
+ ECDSA_SIG *ecdsa_sig
+ PREINIT:
++ const BIGNUM *r;
+ unsigned char *to;
+ STRLEN len;
+ CODE:
+ to = malloc(sizeof(char) * 128);
+- len = BN_bn2bin(ecdsa_sig->r, to);
++ ECDSA_SIG_get0(ecdsa_sig, &r, NULL);
++ len = BN_bn2bin(r, to);
+ RETVAL = newSVpvn((const char*)to, len);
+ free(to);
+ OUTPUT:
+@@ -149,11 +182,13 @@ SV *
+ get_s(ecdsa_sig)
+ ECDSA_SIG *ecdsa_sig
+ PREINIT:
++ const BIGNUM *s;
+ unsigned char *to;
+ STRLEN len;
+ CODE:
+ to = malloc(sizeof(char) * 128);
+- len = BN_bn2bin(ecdsa_sig->s, to);
++ ECDSA_SIG_get0(ecdsa_sig, NULL, &s);
++ len = BN_bn2bin(s, to);
+ RETVAL = newSVpvn((const char*)to, len);
+ free(to);
+ OUTPUT:
+@@ -164,26 +199,62 @@ set_r(ecdsa_sig, r_SV)
+ ECDSA_SIG *ecdsa_sig
+ SV * r_SV
+ PREINIT:
+- char *s;
++ char *string;
+ STRLEN len;
++ BIGNUM *r;
++ BIGNUM *s;
++ const BIGNUM *old_s;
+ CODE:
+- s = SvPV(r_SV, len);
+- if (ecdsa_sig->r)
+- BN_free(ecdsa_sig->r);
+- ecdsa_sig->r = BN_bin2bn((const unsigned char *)s, len, NULL);
++ string = SvPV(r_SV, len);
++ r = BN_bin2bn((const unsigned char *)string, len, NULL);
++ if (NULL == r)
++ croak("Could not convert ECDSA parameter string to big number");
++ ECDSA_SIG_get0(ecdsa_sig, NULL, &old_s);
++ if (NULL == old_s) {
++ s = BN_new();
++ } else {
++ s = BN_dup(old_s);
++ }
++ if (NULL == s) {
++ BN_free(r);
++ croak("Could not duplicate unchanged ECDSA parameter");
++ }
++ if (!ECDSA_SIG_set0(ecdsa_sig, r, s)) {
++ BN_free(r);
++ BN_free(s);
++ croak("Could not store ECDSA parameters");
++ }
+
+ void
+ set_s(ecdsa_sig, s_SV)
+ ECDSA_SIG *ecdsa_sig
+ SV * s_SV
+ PREINIT:
+- char *s;
++ char *string;
+ STRLEN len;
++ BIGNUM *r;
++ BIGNUM *s;
++ const BIGNUM *old_r;
+ CODE:
+- s = SvPV(s_SV, len);
+- if (ecdsa_sig->s)
+- BN_free(ecdsa_sig->s);
+- ecdsa_sig->s = BN_bin2bn((const unsigned char *)s, len, NULL);
++ string = SvPV(s_SV, len);
++ s = BN_bin2bn((const unsigned char *)string, len, NULL);
++ if (NULL == s)
++ croak("Could not convert ECDSA parameter string to big number");
++ ECDSA_SIG_get0(ecdsa_sig, &old_r, NULL);
++ if (NULL == old_r) {
++ r = BN_new();
++ } else {
++ r = BN_dup(old_r);
++ }
++ if (NULL == r) {
++ BN_free(s);
++ croak("Could not duplicate unchanged ECDSA parameter");
++ }
++ if (!ECDSA_SIG_set0(ecdsa_sig, r, s)) {
++ BN_free(r);
++ BN_free(s);
++ croak("Could not store ECDSA parameters");
++ }
+
+
+
+diff --git a/t/Crypt-OpenSSL-ECDSA.t b/t/Crypt-OpenSSL-ECDSA.t
+index 7ab584f..3c02025 100644
+--- a/t/Crypt-OpenSSL-ECDSA.t
++++ b/t/Crypt-OpenSSL-ECDSA.t
+@@ -6,7 +6,7 @@
+ use strict;
+ use warnings;
+
+-use Test::More tests => 21;
++use Test::More tests => 25;
+ BEGIN { use_ok('Crypt::OpenSSL::ECDSA'); use_ok('Crypt::OpenSSL::EC'); };
+
+
+@@ -77,6 +77,17 @@ $ret = Crypt::OpenSSL::ECDSA::ECDSA_do_verify($digest, $sig, $key);
+ ok($ret);
+ undef $sig;
+
++# Test a signature can be built from scratch
++$sig = Crypt::OpenSSL::ECDSA::ECDSA_SIG->new();
++ok($sig, 'Empty Crypt::OpenSSL::ECDSA::ECDSA_SIG object created');
++eval { $sig->set_r($r); };
++ok(!$@, 'R parameter set');
++eval { $sig->set_s($s); };
++ok(!$@, 'S parameter set');
++$ret = Crypt::OpenSSL::ECDSA::ECDSA_do_verify($digest, $sig, $key);
++ok($ret, 'built-from-scratch signature matches');
++undef $sig;
++
+ # Testing signing and verifying with the _ex version
+ my $dummy = 0;
+ $sig = Crypt::OpenSSL::ECDSA::ECDSA_do_sign_ex($digest, \$dummy, \$dummy, $key);
+--
+2.7.4
+