[arch-commits] Commit in ettercap/trunk (2 files)

Jelle van der Waa jelle at archlinux.org
Mon Feb 13 19:25:25 UTC 2017


    Date: Monday, February 13, 2017 @ 19:25:24
  Author: jelle
Revision: 212165

upgpkg: ettercap 0.8.2-4

OpenSSL 1.1.0 rebuild

Added:
  ettercap/trunk/0001-First-draft-of-openssl-1.1-compatibility-layer-from-.patch
Modified:
  ettercap/trunk/PKGBUILD

-----------------------------------------------------------------+
 0001-First-draft-of-openssl-1.1-compatibility-layer-from-.patch |  257 ++++++++++
 PKGBUILD                                                        |   12 
 2 files changed, 266 insertions(+), 3 deletions(-)

Added: 0001-First-draft-of-openssl-1.1-compatibility-layer-from-.patch
===================================================================
--- 0001-First-draft-of-openssl-1.1-compatibility-layer-from-.patch	                        (rev 0)
+++ 0001-First-draft-of-openssl-1.1-compatibility-layer-from-.patch	2017-02-13 19:25:24 UTC (rev 212165)
@@ -0,0 +1,257 @@
+From f0d63b27c82df2ad5f7ada6310727d841b43fbcc Mon Sep 17 00:00:00 2001
+From: Gianfranco Costamagna <costamagnagianfranco at yahoo.it>
+Date: Mon, 27 Jun 2016 12:41:33 +0200
+Subject: [PATCH] First draft of openssl 1.1 compatibility layer (from
+ https://github.com/curl/curl/commit/cfe16c22d7891a1f65ea8cd4c5352504a2afbddc)
+ Closes: #739
+
+---
+ src/dissectors/ec_ssh.c | 93 ++++++++++++++++++++++++++++++++++++++++++++++++-
+ src/ec_sslwrap.c        | 14 ++++++++
+ 2 files changed, 106 insertions(+), 1 deletion(-)
+
+diff --git a/src/dissectors/ec_ssh.c b/src/dissectors/ec_ssh.c
+index f89200dc..26c86491 100644
+--- a/src/dissectors/ec_ssh.c
++++ b/src/dissectors/ec_ssh.c
+@@ -36,6 +36,10 @@
+ #include <openssl/md5.h>
+ #include <zlib.h>
+ 
++#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
++#define HAVE_OPAQUE_RSA_DSA_DH 1 /* since 1.1.0 -pre5 */
++#endif
++
+ #define SMSG_PUBLIC_KEY 2
+ #define CMSG_SESSION_KEY 3
+ #define CMSG_USER 4
+@@ -138,6 +142,11 @@ FUNC_DECODER(dissector_ssh)
+    char tmp[MAX_ASCII_ADDR_LEN];
+    u_int32 ssh_len, ssh_mod;
+    u_char ssh_packet_type, *ptr, *key_to_put;
++#ifdef HAVE_OPAQUE_RSA_DSA_DH
++   BIGNUM *h_n, *s_n, *m_h_n, *m_s_n;
++   BIGNUM *h_e, *s_e, *m_h_e, *m_s_e;
++   BIGNUM *h_d, *s_d, *m_h_d, *m_s_d;
++#endif
+ 
+    /* don't complain about unused var */
+    (void) DECODE_DATA; 
+@@ -383,12 +392,25 @@ FUNC_DECODER(dissector_ssh)
+             if (session_data->ptrkey == NULL) { 
+                /* Initialize RSA key structures (other fileds are set to 0) */
+                session_data->serverkey = RSA_new();
++#ifdef HAVE_OPAQUE_RSA_DSA_DH
++               s_n = BN_new();
++               s_e = BN_new();
++               RSA_set0_key(session_data->serverkey, s_n, s_e, s_d);
++#else
+                session_data->serverkey->n = BN_new();
+                session_data->serverkey->e = BN_new();
++#endif
+ 
+                session_data->hostkey = RSA_new();
++
++#ifdef HAVE_OPAQUE_RSA_DSA_DH
++               h_n = BN_new();
++               h_e = BN_new();
++               RSA_set0_key(session_data->hostkey, h_n, h_e, h_d);
++#else
+                session_data->hostkey->n = BN_new();
+                session_data->hostkey->e = BN_new();
++#endif
+ 
+                /* Get the RSA Key from the packet */
+                NS_GET32(server_mod,ptr);
+@@ -396,19 +418,37 @@ FUNC_DECODER(dissector_ssh)
+                   DEBUG_MSG("Dissector_ssh Bougs Server_Mod");
+                   return NULL;
+                }
++#ifdef HAVE_OPAQUE_RSA_DSA_DH
++               RSA_get0_key(session_data->serverkey, &s_n, &s_e, &s_d);
++               get_bn(s_e, &ptr);
++               get_bn(s_n, &ptr);
++#else
+                get_bn(session_data->serverkey->e, &ptr);
+                get_bn(session_data->serverkey->n, &ptr);
++#endif
+ 
+                NS_GET32(host_mod,ptr);
+                if (ptr + (host_mod/8) > PACKET->DATA.data + PACKET->DATA.len) {
+                   DEBUG_MSG("Dissector_ssh Bougs Host_Mod");
+                   return NULL;
+                }
++
++#ifdef HAVE_OPAQUE_RSA_DSA_DH
++               RSA_get0_key(session_data->hostkey, &h_n, &h_e, &h_d);
++               get_bn(h_e, &ptr);
++               get_bn(h_n, &ptr);
++#else
+                get_bn(session_data->hostkey->e, &ptr);
+                get_bn(session_data->hostkey->n, &ptr);
++#endif
+ 
++#ifdef HAVE_OPAQUE_RSA_DSA_DH
++               server_exp = BN_get_word(s_e);
++               host_exp   = BN_get_word(h_e);
++#else
+                server_exp = *(session_data->serverkey->e->d);
+                host_exp   = *(session_data->hostkey->e->d);
++#endif
+ 
+                /* Check if we already have a suitable RSA key to substitute */
+                index_ssl = &ssh_conn_key;
+@@ -424,7 +464,7 @@ FUNC_DECODER(dissector_ssh)
+                   SAFE_CALLOC(*index_ssl, 1, sizeof(ssh_my_key));
+ 
+                   /* Generate the new key */
+-                  (*index_ssl)->myserverkey = (RSA *)RSA_generate_key(server_mod, server_exp, NULL, NULL);
++                  (*index_ssl)->myserverkey = (RSA *)RSA_generate_key_ex(server_mod, server_exp, NULL, NULL);
+                   (*index_ssl)->myhostkey = (RSA *)RSA_generate_key(host_mod, host_exp, NULL, NULL);
+                   (*index_ssl)->server_mod = server_mod;
+                   (*index_ssl)->host_mod = host_mod;
+@@ -443,11 +483,25 @@ FUNC_DECODER(dissector_ssh)
+ 
+             /* Put our RSA key in the packet */
+             key_to_put+=4;
++
++#ifdef HAVE_OPAQUE_RSA_DSA_DH
++            RSA_get0_key(session_data->ptrkey->myserverkey, &m_s_n, &m_s_e, &m_s_d);
++            put_bn(m_s_e, &key_to_put);
++            put_bn(m_s_n, &key_to_put);
++#else
+             put_bn(session_data->ptrkey->myserverkey->e, &key_to_put);
+             put_bn(session_data->ptrkey->myserverkey->n, &key_to_put);
++#endif
+             key_to_put+=4;
++
++#ifdef HAVE_OPAQUE_RSA_DSA_DH
++            RSA_get0_key(session_data->ptrkey->myhostkey, &m_h_n, &m_h_e, &m_h_d);
++            put_bn(m_h_e, &key_to_put);
++            put_bn(m_h_n, &key_to_put);
++#else
+             put_bn(session_data->ptrkey->myhostkey->e, &key_to_put);
+             put_bn(session_data->ptrkey->myhostkey->n, &key_to_put);
++#endif
+ 
+             /* Recalculate SSH crc */
+             *(u_int32 *)(PACKET->DATA.data + PACKET->DATA.len - 4) = htonl(CRC_checksum(PACKET->DATA.data+4, PACKET->DATA.len-8, CRC_INIT_ZERO));
+@@ -482,19 +536,34 @@ FUNC_DECODER(dissector_ssh)
+             key_to_put = ptr;
+ 
+             /* Calculate real session id and our fake session id */
++#ifdef HAVE_OPAQUE_RSA_DSA_DH
++            temp_session_id = ssh_session_id(cookie, h_n, s_n);
++#else
+             temp_session_id = ssh_session_id(cookie, session_data->hostkey->n, session_data->serverkey->n);
++#endif
+             if (temp_session_id)
+                memcpy(session_id1, temp_session_id, 16);
++
++#ifdef HAVE_OPAQUE_RSA_DSA_DH
++            temp_session_id=ssh_session_id(cookie, m_h_n, m_s_n);
++#else
+             temp_session_id=ssh_session_id(cookie, session_data->ptrkey->myhostkey->n, session_data->ptrkey->myserverkey->n);
++#endif
++
+             if (temp_session_id)
+                memcpy(session_id2, temp_session_id, 16);
+ 
+             /* Get the session key */
+             enckey = BN_new();
++
+             get_bn(enckey, &ptr);
+ 
+             /* Decrypt session key */
++#ifdef HAVE_OPAQUE_RSA_DSA_DH
++            if (BN_cmp(m_s_n, m_h_n) > 0) {
++#else
+             if (BN_cmp(session_data->ptrkey->myserverkey->n, session_data->ptrkey->myhostkey->n) > 0) {
++#endif
+               rsa_private_decrypt(enckey, enckey, session_data->ptrkey->myserverkey);
+               rsa_private_decrypt(enckey, enckey, session_data->ptrkey->myhostkey);
+             } else {
+@@ -534,7 +603,11 @@ FUNC_DECODER(dissector_ssh)
+                  BN_add_word(bn, sesskey[i]);
+             }
+ 
++#ifdef HAVE_OPAQUE_RSA_DSA_DH
++            if (BN_cmp(s_n, h_n) < 0) {
++#else
+             if (BN_cmp(session_data->serverkey->n, session_data->hostkey->n) < 0) {
++#endif
+                rsa_public_encrypt(bn, bn, session_data->serverkey);
+                rsa_public_encrypt(bn, bn, session_data->hostkey);
+             } else {
+@@ -716,7 +789,16 @@ static void rsa_public_encrypt(BIGNUM *out, BIGNUM *in, RSA *key)
+    u_char *inbuf, *outbuf;
+    int32 len, ilen, olen;
+ 
++#ifdef HAVE_OPAQUE_RSA_DSA_DH
++   BIGNUM *n;
++   BIGNUM *e;
++   BIGNUM *d;
++   RSA_get0_key(key, &n, &e, &d);
++   olen = BN_num_bytes(n);
++#else
+    olen = BN_num_bytes(key->n);
++#endif
++
+    outbuf = malloc(olen);
+    if (outbuf == NULL) /* oops, couldn't allocate memory */
+       return;
+@@ -744,7 +826,16 @@ static void rsa_private_decrypt(BIGNUM *out, BIGNUM *in, RSA *key)
+    u_char *inbuf, *outbuf;
+    int32 len, ilen, olen;
+ 
++#ifdef HAVE_OPAQUE_RSA_DSA_DH
++   BIGNUM *n;
++   BIGNUM *e;
++   BIGNUM *d;
++   RSA_get0_key(key, &n, &e, &d);
++   olen = BN_num_bytes(n);
++#else
+    olen = BN_num_bytes(key->n);
++#endif
++
+    outbuf = malloc(olen);
+    if (outbuf == NULL) /* oops, couldn't allocate memory */
+       return;
+diff --git a/src/ec_sslwrap.c b/src/ec_sslwrap.c
+index c6c74421..6369d251 100644
+--- a/src/ec_sslwrap.c
++++ b/src/ec_sslwrap.c
+@@ -56,6 +56,10 @@
+ #define OPENSSL_NO_KRB5 1
+ #include <openssl/ssl.h>
+ 
++#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
++#define HAVE_OPAQUE_RSA_DSA_DH 1 /* since 1.1.0 -pre5 */
++#endif
++
+ #define BREAK_ON_ERROR(x,y,z) do {  \
+    if (x == -E_INVALID) {            \
+       SAFE_FREE(z.DATA.disp_data);  \
+@@ -1102,9 +1106,19 @@ static X509 *sslw_create_selfsigned(X509 *server_cert)
+    index = X509_get_ext_by_NID(server_cert, NID_authority_key_identifier, -1);
+    if (index >=0) {
+       ext = X509_get_ext(server_cert, index);
++#ifdef HAVE_OPAQUE_RSA_DSA_DH
++      ASN1_OCTET_STRING* data;
++      data = X509_EXTENSION_get_data (ext);
++#endif
+       if (ext) {
++#ifdef HAVE_OPAQUE_RSA_DSA_DH
++         data->data[7] = 0xe7;
++         data->data[8] = 0x7e;
++         X509_EXTENSION_set_data (ext, data);
++#else
+          ext->value->data[7] = 0xe7;
+          ext->value->data[8] = 0x7e;
++#endif
+          X509_add_ext(out_cert, ext, -1);
+       }
+    }
+-- 
+2.11.1
+

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2017-02-13 18:53:48 UTC (rev 212164)
+++ PKGBUILD	2017-02-13 19:25:24 UTC (rev 212165)
@@ -5,7 +5,7 @@
 pkgbase=ettercap
 pkgname=('ettercap' 'ettercap-gtk')
 pkgver=0.8.2
-pkgrel=3
+pkgrel=4
 arch=('i686' 'x86_64')
 url="http://ettercap.github.com/ettercap/"
 license=('GPL')
@@ -12,9 +12,15 @@
 depends=('openssl' 'libpcap' 'pcre' 'libltdl' 'libnet' 'ethtool' 'curl')
 makedepends=('ghostscript' 'cmake' 'libpcap' 'libltdl' 'libnet' 'gtk2')
 options=('!makeflags' '!emptydirs')
-source=("$pkgbase-$pkgver.tar.gz::https://github.com/Ettercap/ettercap/archive/v$pkgver.tar.gz")
-sha1sums=('7e528632ca01c5977da1a0af56a5e05fbc383832')
+source=("$pkgbase-$pkgver.tar.gz::https://github.com/Ettercap/ettercap/archive/v$pkgver.tar.gz" 0001-First-draft-of-openssl-1.1-compatibility-layer-from-.patch)
+sha1sums=('7e528632ca01c5977da1a0af56a5e05fbc383832'
+          '425fd778afd8fd75baccb9fb0a43c7b246304b32')
 
+prepare() {
+  cd "${pkgbase}-${pkgver}"
+  patch -Np1 -i $srcdir/0001-First-draft-of-openssl-1.1-compatibility-layer-from-.patch
+}
+
 build() {
   cd "${srcdir}"
 



More information about the arch-commits mailing list