From 23f82cd56a261c6c8d45ae4074bf2d0be2a5cd55 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <[email protected]>
Date: Thu, 27 Oct 2016 10:20:58 +0200
Subject: Adjust to OpenSSL 1.1.0

---
 ...t-OpenSSL-RSA-0.28-Adapt-to-OpenSSL-1.1.0.patch | 185 +++++++++++++++++++++
 perl-Crypt-OpenSSL-RSA.spec                        |   8 +-
 2 files changed, 192 insertions(+), 1 deletion(-)
 create mode 100644 Crypt-OpenSSL-RSA-0.28-Adapt-to-OpenSSL-1.1.0.patch

diff --git a/Crypt-OpenSSL-RSA-0.28-Adapt-to-OpenSSL-1.1.0.patch 
b/Crypt-OpenSSL-RSA-0.28-Adapt-to-OpenSSL-1.1.0.patch
new file mode 100644
index 0000000..748271d
--- /dev/null
+++ b/Crypt-OpenSSL-RSA-0.28-Adapt-to-OpenSSL-1.1.0.patch
@@ -0,0 +1,185 @@
+From b3747e625780be90dcff11c2d9e91048016bb4d0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <[email protected]>
+Date: Thu, 13 Oct 2016 18:14:17 +0200
+Subject: [PATCH] Adapt 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 structure internals and provided methods for getting
+and settting the internal values. This patch modifes the code so that
+it can be built with OpenSSL 1.1.0 as well as with the older one.
+
+CPAN RT#117481
+
+Signed-off-by: Petr Písař <[email protected]>
+---
+ RSA.xs | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------------
+ 1 file changed, 73 insertions(+), 16 deletions(-)
+
+diff --git a/RSA.xs b/RSA.xs
+index de512e7..9bf6f01 100644
+--- a/RSA.xs
++++ b/RSA.xs
+@@ -49,7 +49,13 @@ void croakSsl(char* p_file, int p_line)
+ 
+ char _is_private(rsaData* p_rsa)
+ {
+-    return(p_rsa->rsa->d != NULL);
++    const BIGNUM *d;
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
++    d = p_rsa->rsa->d;
++#else
++    RSA_get0_key(p_rsa->rsa, NULL, NULL, &d);
++#endif
++    return(d != NULL);
+ }
+ 
+ SV* make_rsa_obj(SV* p_proto, RSA* p_rsa)
+@@ -136,7 +142,7 @@ unsigned char* get_message_digest(SV* text_SV, int 
hash_method)
+     }
+ }
+ 
+-SV* bn2sv(BIGNUM* p_bn)
++SV* bn2sv(const BIGNUM* p_bn)
+ {
+     return p_bn != NULL
+         ? sv_2mortal(newSViv((IV) BN_dup(p_bn)))
+@@ -317,6 +323,9 @@ _new_key_from_parameters(proto, n, e, d, p, q)
+     BN_CTX* ctx;
+     BIGNUM* p_minus_1 = NULL;
+     BIGNUM* q_minus_1 = NULL;
++    BIGNUM* dmp1 = NULL;
++    BIGNUM* dmq1 = NULL;
++    BIGNUM* iqmp = NULL;
+     int error;
+   CODE:
+ {
+@@ -325,8 +334,10 @@ _new_key_from_parameters(proto, n, e, d, p, q)
+         croak("At least a modulous and public key must be provided");
+     }
+     CHECK_OPEN_SSL(rsa = RSA_new());
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+     rsa->n = n;
+     rsa->e = e;
++#endif
+     if (p || q)
+     {
+         error = 0;
+@@ -341,8 +352,12 @@ _new_key_from_parameters(proto, n, e, d, p, q)
+             q = BN_new();
+             THROW(BN_div(q, NULL, n, p, ctx));
+         }
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+         rsa->p = p;
+         rsa->q = q;
++#else
++        THROW(RSA_set0_factors(rsa, p, q));
++#endif
+         THROW(p_minus_1 = BN_new());
+         THROW(BN_sub(p_minus_1, p, BN_value_one()));
+         THROW(q_minus_1 = BN_new());
+@@ -353,17 +368,32 @@ _new_key_from_parameters(proto, n, e, d, p, q)
+             THROW(BN_mul(d, p_minus_1, q_minus_1, ctx));
+             THROW(BN_mod_inverse(d, e, d, ctx));
+         }
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+         rsa->d = d;
+-        THROW(rsa->dmp1 = BN_new());
+-        THROW(BN_mod(rsa->dmp1, d, p_minus_1, ctx));
+-        THROW(rsa->dmq1 = BN_new());
+-        THROW(BN_mod(rsa->dmq1, d, q_minus_1, ctx));
+-        THROW(rsa->iqmp = BN_new());
+-        THROW(BN_mod_inverse(rsa->iqmp, q, p, ctx));
++#else
++        THROW(RSA_set0_key(rsa, n, e, d));
++#endif
++        THROW(dmp1 = BN_new());
++        THROW(BN_mod(dmp1, d, p_minus_1, ctx));
++        THROW(dmq1 = BN_new());
++        THROW(BN_mod(dmq1, d, q_minus_1, ctx));
++        THROW(iqmp = BN_new());
++        THROW(BN_mod_inverse(iqmp, q, p, ctx));
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
++        rsa->dmp1 = dmp1;
++        rsa->dmq1 = dmq1;
++        rsa->iqmp = iqmp;
++#else
++        THROW(RSA_set0_crt_params(rsa, dmp1, dmq1, iqmp));
++#endif
++        dmp1 = dmq1 = iqmp = NULL;
+         THROW(RSA_check_key(rsa) == 1);
+      err:
+         if (p_minus_1) BN_clear_free(p_minus_1);
+         if (q_minus_1) BN_clear_free(q_minus_1);
++        if (dmp1) BN_clear_free(dmp1);
++        if (dmq1) BN_clear_free(dmq1);
++        if (iqmp) BN_clear_free(iqmp);
+         if (ctx) BN_CTX_free(ctx);
+         if (error)
+         {
+@@ -373,7 +403,11 @@ _new_key_from_parameters(proto, n, e, d, p, q)
+     }
+     else
+     {
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+         rsa->d = d;
++#else
++        CHECK_OPEN_SSL(RSA_set0_key(rsa, n, e, d));
++#endif
+     }
+     RETVAL = make_rsa_obj(proto, rsa);
+ }
+@@ -383,18 +417,41 @@ _new_key_from_parameters(proto, n, e, d, p, q)
+ void
+ _get_key_parameters(p_rsa)
+     rsaData* p_rsa;
++PREINIT:
++    const BIGNUM* n;
++    const BIGNUM* e;
++    const BIGNUM* d;
++    const BIGNUM* p;
++    const BIGNUM* q;
++    const BIGNUM* dmp1;
++    const BIGNUM* dmq1;
++    const BIGNUM* iqmp;
+ PPCODE:
+ {
+     RSA* rsa;
+     rsa = p_rsa->rsa;
+-    XPUSHs(bn2sv(rsa->n));
+-    XPUSHs(bn2sv(rsa->e));
+-    XPUSHs(bn2sv(rsa->d));
+-    XPUSHs(bn2sv(rsa->p));
+-    XPUSHs(bn2sv(rsa->q));
+-    XPUSHs(bn2sv(rsa->dmp1));
+-    XPUSHs(bn2sv(rsa->dmq1));
+-    XPUSHs(bn2sv(rsa->iqmp));
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
++    n = rsa->n;
++    e = rsa->e;
++    d = rsa->d;
++    p = rsa->p;
++    q = rsa->q;
++    dmp1 = rsa->dmp1;
++    dmq1 = rsa->dmq1;
++    iqmp = rsa->iqmp;
++#else
++    RSA_get0_key(rsa, &n, &e, &d);
++    RSA_get0_factors(rsa, &p, &q);
++    RSA_get0_crt_params(rsa, &dmp1, &dmq1, &iqmp);
++#endif
++    XPUSHs(bn2sv(n));
++    XPUSHs(bn2sv(e));
++    XPUSHs(bn2sv(d));
++    XPUSHs(bn2sv(p));
++    XPUSHs(bn2sv(q));
++    XPUSHs(bn2sv(dmp1));
++    XPUSHs(bn2sv(dmq1));
++    XPUSHs(bn2sv(iqmp));
+ }
+ 
+ SV*
+-- 
+2.7.4
+
diff --git a/perl-Crypt-OpenSSL-RSA.spec b/perl-Crypt-OpenSSL-RSA.spec
index b757196..4892ac6 100644
--- a/perl-Crypt-OpenSSL-RSA.spec
+++ b/perl-Crypt-OpenSSL-RSA.spec
@@ -1,11 +1,13 @@
 Name:           perl-Crypt-OpenSSL-RSA
 Version:        0.28
-Release:        15%{?dist}
+Release:        16%{?dist}
 Summary:        Perl interface to OpenSSL for RSA
 License:        GPL+ or Artistic
 Group:          Development/Libraries
 URL:            http://search.cpan.org/dist/Crypt-OpenSSL-RSA/
 Source0:        
http://search.cpan.org/CPAN/authors/id/P/PE/PERLER/Crypt-OpenSSL-RSA-%{version}.tar.gz
+# Adjust to OpenSSL 1.1.0, bug #1383650, CPAN RT#117481
+Patch0:         Crypt-OpenSSL-RSA-0.28-Adapt-to-OpenSSL-1.1.0.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires:  openssl openssl-devel
 BuildRequires:  perl-devel
@@ -26,6 +28,7 @@ Crypt::OpenSSL::RSA - RSA encoding and decoding, using the 
openSSL libraries
 
 %prep
 %setup -q -n Crypt-OpenSSL-RSA-%{version}
+%patch0 -p1
 
 %build
 %{__perl} Makefile.PL INSTALLDIRS=vendor
@@ -56,6 +59,9 @@ rm -rf %{buildroot}
 %{_mandir}/man3/*
 
 %changelog
+* Thu Oct 27 2016 Petr Pisar <[email protected]> - 0.28-16
+- Adjust to OpenSSL 1.1.0 (bug #1383650)
+
 * Sun May 15 2016 Jitka Plesnikova <[email protected]> - 0.28-15
 - Perl 5.24 rebuild
 
-- 
cgit v0.12


        
http://pkgs.fedoraproject.org/cgit/perl-Crypt-OpenSSL-RSA.git/commit/?h=master&id=23f82cd56a261c6c8d45ae4074bf2d0be2a5cd55
_______________________________________________
perl-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to