1From 5f1c949b1703367f7f06454fcff650bdb7bac840 Mon Sep 17 00:00:00 2001 2From: DJ Lucas <dj@linuxfromscratch.org> 3Date: Sun, 9 Sep 2018 15:46:15 +0200 4Subject: [PATCH] Fixes build issue with OpenSSL-1.1.0 5 6Downloaded from 7http://www.linuxfromscratch.org/patches/blfs/svn/liboauth-1.0.3-openssl-1.1.0-2.patch 8 9Patch was sent upstream: https://github.com/x42/liboauth/issues/9 10 11Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de> 12--- 13 src/hash.c | 65 ++++++++++++++++++++++++++++++++++++++++++-------------------- 14 1 file changed, 44 insertions(+), 21 deletions(-) 15 16diff --git a/src/hash.c b/src/hash.c 17index 17ff5c8..b7958f7 100644 18--- a/src/hash.c 19+++ b/src/hash.c 20@@ -362,6 +362,11 @@ looser: 21 #include "oauth.h" // base64 encode fn's. 22 #include <openssl/hmac.h> 23 24+#if OPENSSL_VERSION_NUMBER < 0x10100000 25+#define EVP_MD_CTX_new EVP_MD_CTX_create 26+#define EVP_MD_CTX_free EVP_MD_CTX_destroy 27+#endif 28+ 29 char *oauth_sign_hmac_sha1 (const char *m, const char *k) { 30 return(oauth_sign_hmac_sha1_raw (m, strlen(m), k, strlen(k))); 31 } 32@@ -386,7 +391,7 @@ char *oauth_sign_rsa_sha1 (const char *m, const char *k) { 33 unsigned char *sig = NULL; 34 unsigned char *passphrase = NULL; 35 unsigned int len=0; 36- EVP_MD_CTX md_ctx; 37+ EVP_MD_CTX *md_ctx; 38 39 EVP_PKEY *pkey; 40 BIO *in; 41@@ -399,24 +404,31 @@ char *oauth_sign_rsa_sha1 (const char *m, const char *k) { 42 return xstrdup("liboauth/OpenSSL: can not read private key"); 43 } 44 45+ md_ctx = EVP_MD_CTX_new(); 46+ if (md_ctx == NULL) { 47+ return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX"); 48+ } 49+ 50 len = EVP_PKEY_size(pkey); 51 sig = (unsigned char*)xmalloc((len+1)*sizeof(char)); 52 53- EVP_SignInit(&md_ctx, EVP_sha1()); 54- EVP_SignUpdate(&md_ctx, m, strlen(m)); 55- if (EVP_SignFinal (&md_ctx, sig, &len, pkey)) { 56+ EVP_SignInit(md_ctx, EVP_sha1()); 57+ EVP_SignUpdate(md_ctx, m, strlen(m)); 58+ if (EVP_SignFinal (md_ctx, sig, &len, pkey)) { 59 char *tmp; 60 sig[len] = '\0'; 61 tmp = oauth_encode_base64(len,sig); 62 OPENSSL_free(sig); 63 EVP_PKEY_free(pkey); 64+ EVP_MD_CTX_free(md_ctx); 65 return tmp; 66 } 67+ EVP_MD_CTX_free(md_ctx); 68 return xstrdup("liboauth/OpenSSL: rsa-sha1 signing failed"); 69 } 70 71 int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *s) { 72- EVP_MD_CTX md_ctx; 73+ EVP_MD_CTX *md_ctx; 74 EVP_PKEY *pkey; 75 BIO *in; 76 X509 *cert = NULL; 77@@ -437,13 +449,18 @@ int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *s) { 78 return -2; 79 } 80 81+ md_ctx = EVP_MD_CTX_new(); 82+ if (md_ctx == NULL) { 83+ return -2; 84+ } 85+ 86 b64d= (unsigned char*) xmalloc(sizeof(char)*strlen(s)); 87 slen = oauth_decode_base64(b64d, s); 88 89- EVP_VerifyInit(&md_ctx, EVP_sha1()); 90- EVP_VerifyUpdate(&md_ctx, m, strlen(m)); 91- err = EVP_VerifyFinal(&md_ctx, b64d, slen, pkey); 92- EVP_MD_CTX_cleanup(&md_ctx); 93+ EVP_VerifyInit(md_ctx, EVP_sha1()); 94+ EVP_VerifyUpdate(md_ctx, m, strlen(m)); 95+ err = EVP_VerifyFinal(md_ctx, b64d, slen, pkey); 96+ EVP_MD_CTX_free(pkey); 97 EVP_PKEY_free(pkey); 98 xfree(b64d); 99 return (err); 100@@ -455,35 +472,41 @@ int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *s) { 101 */ 102 char *oauth_body_hash_file(char *filename) { 103 unsigned char fb[BUFSIZ]; 104- EVP_MD_CTX ctx; 105+ EVP_MD_CTX *ctx; 106 size_t len=0; 107 unsigned char *md; 108 FILE *F= fopen(filename, "r"); 109 if (!F) return NULL; 110 111- EVP_MD_CTX_init(&ctx); 112- EVP_DigestInit(&ctx,EVP_sha1()); 113+ ctx = EVP_MD_CTX_new(); 114+ if (ctx == NULL) { 115+ return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX"); 116+ } 117+ EVP_DigestInit(ctx,EVP_sha1()); 118 while (!feof(F) && (len=fread(fb,sizeof(char),BUFSIZ, F))>0) { 119- EVP_DigestUpdate(&ctx, fb, len); 120+ EVP_DigestUpdate(ctx, fb, len); 121 } 122 fclose(F); 123 len=0; 124 md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char)); 125- EVP_DigestFinal(&ctx, md,(unsigned int*) &len); 126- EVP_MD_CTX_cleanup(&ctx); 127+ EVP_DigestFinal(ctx, md,(unsigned int*) &len); 128+ EVP_MD_CTX_free(ctx); 129 return oauth_body_hash_encode(len, md); 130 } 131 132 char *oauth_body_hash_data(size_t length, const char *data) { 133- EVP_MD_CTX ctx; 134+ EVP_MD_CTX *ctx; 135 size_t len=0; 136 unsigned char *md; 137 md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char)); 138- EVP_MD_CTX_init(&ctx); 139- EVP_DigestInit(&ctx,EVP_sha1()); 140- EVP_DigestUpdate(&ctx, data, length); 141- EVP_DigestFinal(&ctx, md,(unsigned int*) &len); 142- EVP_MD_CTX_cleanup(&ctx); 143+ ctx = EVP_MD_CTX_new(); 144+ if (ctx == NULL) { 145+ return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX"); 146+ } 147+ EVP_DigestInit(ctx,EVP_sha1()); 148+ EVP_DigestUpdate(ctx, data, length); 149+ EVP_DigestFinal(ctx, md,(unsigned int*) &len); 150+ EVP_MD_CTX_free(ctx); 151 return oauth_body_hash_encode(len, md); 152 } 153 154-- 1552.14.4 156 157