0001-Fixes-build-issue-with-OpenSSL-1.1.0.patch 4.7 KB

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