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