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