Ticket #11181: liboauth-1.0.3-openssl-1.1.0-2.patch

File liboauth-1.0.3-openssl-1.1.0-2.patch, 4.6 KB (added by Xi Ruoyao, 6 years ago)

fixed patch

  • liboauth-1.0.

    Submitted by:            DJ Lucas (dj_AT_linuxfromscratch_DOT_org)
    Date:                    2017-05-27
    Initial Package Version: 1.0.3
    Update by:               Bruce Dubbs
    Date:                    2017-06-14
    Upstream Status:         Submitted
    Origin:                  https://github.com/x42/liboauth/issues/9
    Description:             Fixes build issue with OpenSSL-1.1.0.
    Update:                  Additional fix from upstream.  Three lines changed.
    
    diff -Naurp liboauth-1.0.3-orig/src/hash.c liboauth-1.0.3/src/hash.c
    old new looser:  
    362362#include "oauth.h" // base64 encode fn's.
    363363#include <openssl/hmac.h>
    364364
     365#if OPENSSL_VERSION_NUMBER < 0x10100000
     366#define EVP_MD_CTX_new EVP_MD_CTX_create
     367#define EVP_MD_CTX_free EVP_MD_CTX_destroy
     368#endif
     369
    365370char *oauth_sign_hmac_sha1 (const char *m, const char *k) {
    366371  return(oauth_sign_hmac_sha1_raw (m, strlen(m), k, strlen(k)));
    367372}
    char *oauth_sign_rsa_sha1 (const char *m  
    386391  unsigned char *sig = NULL;
    387392  unsigned char *passphrase = NULL;
    388393  unsigned int len=0;
    389   EVP_MD_CTX md_ctx;
     394  EVP_MD_CTX *md_ctx;
    390395
    391396  EVP_PKEY *pkey;
    392397  BIO *in;
    char *oauth_sign_rsa_sha1 (const char *m  
    399404    return xstrdup("liboauth/OpenSSL: can not read private key");
    400405  }
    401406
     407  md_ctx = EVP_MD_CTX_new();
     408  if (md_ctx == NULL) {
     409          return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX");
     410  }
     411
    402412  len = EVP_PKEY_size(pkey);
    403413  sig = (unsigned char*)xmalloc((len+1)*sizeof(char));
    404414
    405   EVP_SignInit(&md_ctx, EVP_sha1());
    406   EVP_SignUpdate(&md_ctx, m, strlen(m));
    407   if (EVP_SignFinal (&md_ctx, sig, &len, pkey)) {
     415  EVP_SignInit(md_ctx, EVP_sha1());
     416  EVP_SignUpdate(md_ctx, m, strlen(m));
     417  if (EVP_SignFinal (md_ctx, sig, &len, pkey)) {
    408418    char *tmp;
    409419    sig[len] = '\0';
    410420    tmp = oauth_encode_base64(len,sig);
    411421    OPENSSL_free(sig);
    412422    EVP_PKEY_free(pkey);
     423    EVP_MD_CTX_free(md_ctx);
    413424    return tmp;
    414425  }
     426  EVP_MD_CTX_free(md_ctx);
    415427  return xstrdup("liboauth/OpenSSL: rsa-sha1 signing failed");
    416428}
    417429
    418430int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *s) {
    419   EVP_MD_CTX md_ctx;
     431  EVP_MD_CTX *md_ctx;
    420432  EVP_PKEY *pkey;
    421433  BIO *in;
    422434  X509 *cert = NULL;
    int oauth_verify_rsa_sha1 (const char *m  
    437449    return -2;
    438450  }
    439451
     452        md_ctx = EVP_MD_CTX_new();
     453        if (md_ctx == NULL) {
     454                return -2;
     455        }
     456
    440457  b64d= (unsigned char*) xmalloc(sizeof(char)*strlen(s));
    441458  slen = oauth_decode_base64(b64d, s);
    442459
    443   EVP_VerifyInit(&md_ctx, EVP_sha1());
    444   EVP_VerifyUpdate(&md_ctx, m, strlen(m));
    445   err = EVP_VerifyFinal(&md_ctx, b64d, slen, pkey);
    446   EVP_MD_CTX_cleanup(&md_ctx);
     460  EVP_VerifyInit(md_ctx, EVP_sha1());
     461  EVP_VerifyUpdate(md_ctx, m, strlen(m));
     462  err = EVP_VerifyFinal(md_ctx, b64d, slen, pkey);
     463  EVP_MD_CTX_free(md_ctx);
    447464  EVP_PKEY_free(pkey);
    448465  xfree(b64d);
    449466  return (err);
    int oauth_verify_rsa_sha1 (const char *m  
    455472 */
    456473char *oauth_body_hash_file(char *filename) {
    457474  unsigned char fb[BUFSIZ];
    458   EVP_MD_CTX ctx;
     475  EVP_MD_CTX *ctx;
    459476  size_t len=0;
    460477  unsigned char *md;
    461478  FILE *F= fopen(filename, "r");
    462479  if (!F) return NULL;
    463480
    464   EVP_MD_CTX_init(&ctx);
    465   EVP_DigestInit(&ctx,EVP_sha1());
     481  ctx = EVP_MD_CTX_new();
     482  if (ctx == NULL) {
     483          return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX");
     484  }
     485  EVP_DigestInit(ctx,EVP_sha1());
    466486  while (!feof(F) && (len=fread(fb,sizeof(char),BUFSIZ, F))>0) {
    467     EVP_DigestUpdate(&ctx, fb, len);
     487    EVP_DigestUpdate(ctx, fb, len);
    468488  }
    469489  fclose(F);
    470490  len=0;
    471491  md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char));
    472   EVP_DigestFinal(&ctx, md,(unsigned int*) &len);
    473   EVP_MD_CTX_cleanup(&ctx);
     492  EVP_DigestFinal(ctx, md,(unsigned int*) &len);
     493  EVP_MD_CTX_free(ctx);
    474494  return oauth_body_hash_encode(len, md);
    475495}
    476496
    477497char *oauth_body_hash_data(size_t length, const char *data) {
    478   EVP_MD_CTX ctx;
     498  EVP_MD_CTX *ctx;
    479499  size_t len=0;
    480500  unsigned char *md;
    481501  md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char));
    482   EVP_MD_CTX_init(&ctx);
    483   EVP_DigestInit(&ctx,EVP_sha1());
    484   EVP_DigestUpdate(&ctx, data, length);
    485   EVP_DigestFinal(&ctx, md,(unsigned int*) &len);
    486   EVP_MD_CTX_cleanup(&ctx);
     502  ctx = EVP_MD_CTX_new();
     503  if (ctx == NULL) {
     504          return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX");
     505  }
     506  EVP_DigestInit(ctx,EVP_sha1());
     507  EVP_DigestUpdate(ctx, data, length);
     508  EVP_DigestFinal(ctx, md,(unsigned int*) &len);
     509  EVP_MD_CTX_free(ctx);
    487510  return oauth_body_hash_encode(len, md);
    488511}
    489512