Control: tag -1 patch

I have prepared patches for ssldump to

(1) recognize OpenSSL 1.1 at configure time
(2) deal with API changes

Cheers,
-Hilko

Index: ssldump/configure.in
===================================================================
--- ssldump.orig/configure.in
+++ ssldump/configure.in
@@ -187,8 +187,13 @@ if test "$ac_use_openssl" != "false"; th
 		save_LDFLAGS=$LDFLAGS
 		LIBS="-lssl -lcrypto $LIBS"
 		LDFLAGS="-L$dir $LDFLAGS"
-		AC_TRY_LINK_FUNC(SSL_load_error_strings,ac_linked_libssl="true",
-			ac_linked_libssl="false");
+                AC_TRY_LINK([
+                        #define OPENSSL_API_COMPAT 0x10000000L
+                        #include <openssl/ssl.h>
+                        ],
+                        [SSL_load_error_strings()],
+                        ac_linked_libssl="true",
+                        ac_linked_libssl="false");
 		AC_TRY_LINK_FUNC(RC4_set_key,ac_linked_libcrypto="true",
 			ac_linked_libcrypto="false");
 		if test "$ac_linked_libssl" != "false" -a \
Index: ssldump/ssl/ssl_rec.c
===================================================================
--- ssldump.orig/ssl/ssl_rec.c
+++ ssldump/ssl/ssl_rec.c
@@ -116,7 +116,7 @@ int ssl_create_rec_decoder(dp,cs,mk,sk,i
     dec->cs=cs;
     if(r=r_data_create(&dec->mac_key,mk,cs->dig_len))
       ABORT(r);
-    if(!(dec->evp=(EVP_CIPHER_CTX *)malloc(sizeof(EVP_CIPHER_CTX))))
+    if(!(dec->evp=EVP_CIPHER_CTX_new()))
       ABORT(R_NO_MEMORY);
     EVP_CIPHER_CTX_init(dec->evp);
     EVP_CipherInit(dec->evp,ciph,sk,iv,0);
@@ -228,35 +228,35 @@ static int tls_check_mac(d,ct,ver,data,d
   UINT4 datalen;
   UCHAR *mac;
   {
-    HMAC_CTX hm;
+    HMAC_CTX *hm = HMAC_CTX_new();
     const EVP_MD *md;
     UINT4 l;
     UCHAR buf[20];
     
     md=EVP_get_digestbyname(digests[d->cs->dig-0x40]);
-    HMAC_Init(&hm,d->mac_key->data,d->mac_key->len,md);
+    HMAC_Init(hm,d->mac_key->data,d->mac_key->len,md);
 
     fmt_seq(d->seq,buf);
     d->seq++;
-    HMAC_Update(&hm,buf,8);
+    HMAC_Update(hm,buf,8);
     buf[0]=ct;
-    HMAC_Update(&hm,buf,1);
+    HMAC_Update(hm,buf,1);
 
     buf[0]=MSB(ver);
     buf[1]=LSB(ver);
-    HMAC_Update(&hm,buf,2);
+    HMAC_Update(hm,buf,2);
 
     buf[0]=MSB(datalen);
     buf[1]=LSB(datalen);
-    HMAC_Update(&hm,buf,2);
+    HMAC_Update(hm,buf,2);
 
-    HMAC_Update(&hm,data,datalen);
+    HMAC_Update(hm,data,datalen);
     
-    HMAC_Final(&hm,buf,&l);
+    HMAC_Final(hm,buf,&l);
     if(memcmp(mac,buf,l))
       ERETURN(SSL_BAD_MAC);
 
-    HMAC_cleanup(&hm);
+    HMAC_CTX_free(hm);
     return(0);
   }
 
@@ -268,7 +268,7 @@ int ssl3_check_mac(d,ct,ver,data,datalen
   UINT4 datalen;
   UCHAR *mac;
   {
-    EVP_MD_CTX mc;
+    EVP_MD_CTX *mc = EVP_MD_CTX_new();
     const EVP_MD *md;
     UINT4 l;
     UCHAR buf[64],dgst[20];
@@ -277,42 +277,44 @@ int ssl3_check_mac(d,ct,ver,data,datalen
     pad_ct=(d->cs->dig==DIG_SHA)?40:48;
     
     md=EVP_get_digestbyname(digests[d->cs->dig-0x40]);
-    EVP_DigestInit(&mc,md);
+    EVP_DigestInit(mc,md);
 
-    EVP_DigestUpdate(&mc,d->mac_key->data,d->mac_key->len);
+    EVP_DigestUpdate(mc,d->mac_key->data,d->mac_key->len);
 
     memset(buf,0x36,pad_ct);
-    EVP_DigestUpdate(&mc,buf,pad_ct);
+    EVP_DigestUpdate(mc,buf,pad_ct);
 
     fmt_seq(d->seq,buf);
     d->seq++;
-    EVP_DigestUpdate(&mc,buf,8);
+    EVP_DigestUpdate(mc,buf,8);
 
     buf[0]=ct;
-    EVP_DigestUpdate(&mc,buf,1);
+    EVP_DigestUpdate(mc,buf,1);
     
     buf[0]=MSB(datalen);
     buf[1]=LSB(datalen);
-    EVP_DigestUpdate(&mc,buf,2);    
+    EVP_DigestUpdate(mc,buf,2);
 
-    EVP_DigestUpdate(&mc,data,datalen);
+    EVP_DigestUpdate(mc,data,datalen);
 
-    EVP_DigestFinal(&mc,dgst,&l);
+    EVP_DigestFinal(mc,dgst,&l);
     
-    EVP_DigestInit(&mc,md);
+    EVP_DigestInit(mc,md);
 
-    EVP_DigestUpdate(&mc,d->mac_key->data,d->mac_key->len);
+    EVP_DigestUpdate(mc,d->mac_key->data,d->mac_key->len);
     
     memset(buf,0x5c,pad_ct);
-    EVP_DigestUpdate(&mc,buf,pad_ct);
+    EVP_DigestUpdate(mc,buf,pad_ct);
 
-    EVP_DigestUpdate(&mc,dgst,l);
+    EVP_DigestUpdate(mc,dgst,l);
 
-    EVP_DigestFinal(&mc,dgst,&l);
+    EVP_DigestFinal(mc,dgst,&l);
 
     if(memcmp(mac,dgst,l))
       ERETURN(SSL_BAD_MAC);
 
+    EVP_MD_CTX_free(mc);
+
     return(0);
   }
     
Index: ssldump/ssl/ssldecode.c
===================================================================
--- ssldump.orig/ssl/ssldecode.c
+++ ssldump/ssl/ssldecode.c
@@ -501,6 +501,7 @@ int ssl_process_client_key_exchange(ssl,
     int i;
 
     EVP_PKEY *pk;
+    const BIGNUM *n;
     
     if(ssl->cs->kex!=KEX_RSA)
       return(-1);
@@ -512,14 +513,15 @@ int ssl_process_client_key_exchange(ssl,
     if(!pk)
       return(-1);
 
-    if(pk->type!=EVP_PKEY_RSA)
+    if(EVP_PKEY_id(pk)!=EVP_PKEY_RSA)
       return(-1);
  
-    if(r=r_data_alloc(&d->PMS,BN_num_bytes(pk->pkey.rsa->n)))
+    RSA_get0_key(EVP_PKEY_get0_RSA(pk), &n, NULL, NULL);
+    if(r=r_data_alloc(&d->PMS,BN_num_bytes(n)))
       ABORT(r);
 
     i=RSA_private_decrypt(len,msg,d->PMS->data,
-      pk->pkey.rsa,RSA_PKCS1_PADDING);
+      EVP_PKEY_get0_RSA(pk),RSA_PKCS1_PADDING);
 
     if(i!=48)
       ABORT(SSL_BAD_PMS);
@@ -574,7 +576,7 @@ static int tls_P_hash(ssl,secret,seed,md
     UCHAR *A;
     UCHAR _A[20],tmp[20];
     unsigned int A_l,tmp_l;
-    HMAC_CTX hm;
+    HMAC_CTX *hm = HMAC_CTX_new();
 
     CRDUMPD("P_hash secret",secret);
     CRDUMPD("P_hash seed",seed);
@@ -583,15 +585,15 @@ static int tls_P_hash(ssl,secret,seed,md
     A_l=seed->len;
 
     while(left){
-      HMAC_Init(&hm,secret->data,secret->len,md);
-      HMAC_Update(&hm,A,A_l);
-      HMAC_Final(&hm,_A,&A_l);
+      HMAC_Init(hm,secret->data,secret->len,md);
+      HMAC_Update(hm,A,A_l);
+      HMAC_Final(hm,_A,&A_l);
       A=_A;
 
-      HMAC_Init(&hm,secret->data,secret->len,md);
-      HMAC_Update(&hm,A,A_l);
-      HMAC_Update(&hm,seed->data,seed->len);
-      HMAC_Final(&hm,tmp,&tmp_l);
+      HMAC_Init(hm,secret->data,secret->len,md);
+      HMAC_Update(hm,A,A_l);
+      HMAC_Update(hm,seed->data,seed->len);
+      HMAC_Final(hm,tmp,&tmp_l);
 
       tocpy=MIN(left,tmp_l);
       memcpy(ptr,tmp,tocpy);
@@ -599,7 +601,7 @@ static int tls_P_hash(ssl,secret,seed,md
       left-=tocpy;
     }
 
-    HMAC_cleanup(&hm);
+    HMAC_CTX_free(hm);
 
     CRDUMPD("P_hash out",out);
     

Reply via email to