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:
|
362 | 362 | #include "oauth.h" // base64 encode fn's. |
363 | 363 | #include <openssl/hmac.h> |
364 | 364 | |
| 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 | |
365 | 370 | char *oauth_sign_hmac_sha1 (const char *m, const char *k) { |
366 | 371 | return(oauth_sign_hmac_sha1_raw (m, strlen(m), k, strlen(k))); |
367 | 372 | } |
… |
… |
char *oauth_sign_rsa_sha1 (const char *m
|
386 | 391 | unsigned char *sig = NULL; |
387 | 392 | unsigned char *passphrase = NULL; |
388 | 393 | unsigned int len=0; |
389 | | EVP_MD_CTX md_ctx; |
| 394 | EVP_MD_CTX *md_ctx; |
390 | 395 | |
391 | 396 | EVP_PKEY *pkey; |
392 | 397 | BIO *in; |
… |
… |
char *oauth_sign_rsa_sha1 (const char *m
|
399 | 404 | return xstrdup("liboauth/OpenSSL: can not read private key"); |
400 | 405 | } |
401 | 406 | |
| 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 | |
402 | 412 | len = EVP_PKEY_size(pkey); |
403 | 413 | sig = (unsigned char*)xmalloc((len+1)*sizeof(char)); |
404 | 414 | |
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)) { |
408 | 418 | char *tmp; |
409 | 419 | sig[len] = '\0'; |
410 | 420 | tmp = oauth_encode_base64(len,sig); |
411 | 421 | OPENSSL_free(sig); |
412 | 422 | EVP_PKEY_free(pkey); |
| 423 | EVP_MD_CTX_free(md_ctx); |
413 | 424 | return tmp; |
414 | 425 | } |
| 426 | EVP_MD_CTX_free(md_ctx); |
415 | 427 | return xstrdup("liboauth/OpenSSL: rsa-sha1 signing failed"); |
416 | 428 | } |
417 | 429 | |
418 | 430 | int 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; |
420 | 432 | EVP_PKEY *pkey; |
421 | 433 | BIO *in; |
422 | 434 | X509 *cert = NULL; |
… |
… |
int oauth_verify_rsa_sha1 (const char *m
|
437 | 449 | return -2; |
438 | 450 | } |
439 | 451 | |
| 452 | md_ctx = EVP_MD_CTX_new(); |
| 453 | if (md_ctx == NULL) { |
| 454 | return -2; |
| 455 | } |
| 456 | |
440 | 457 | b64d= (unsigned char*) xmalloc(sizeof(char)*strlen(s)); |
441 | 458 | slen = oauth_decode_base64(b64d, s); |
442 | 459 | |
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); |
447 | 464 | EVP_PKEY_free(pkey); |
448 | 465 | xfree(b64d); |
449 | 466 | return (err); |
… |
… |
int oauth_verify_rsa_sha1 (const char *m
|
455 | 472 | */ |
456 | 473 | char *oauth_body_hash_file(char *filename) { |
457 | 474 | unsigned char fb[BUFSIZ]; |
458 | | EVP_MD_CTX ctx; |
| 475 | EVP_MD_CTX *ctx; |
459 | 476 | size_t len=0; |
460 | 477 | unsigned char *md; |
461 | 478 | FILE *F= fopen(filename, "r"); |
462 | 479 | if (!F) return NULL; |
463 | 480 | |
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()); |
466 | 486 | while (!feof(F) && (len=fread(fb,sizeof(char),BUFSIZ, F))>0) { |
467 | | EVP_DigestUpdate(&ctx, fb, len); |
| 487 | EVP_DigestUpdate(ctx, fb, len); |
468 | 488 | } |
469 | 489 | fclose(F); |
470 | 490 | len=0; |
471 | 491 | 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); |
474 | 494 | return oauth_body_hash_encode(len, md); |
475 | 495 | } |
476 | 496 | |
477 | 497 | char *oauth_body_hash_data(size_t length, const char *data) { |
478 | | EVP_MD_CTX ctx; |
| 498 | EVP_MD_CTX *ctx; |
479 | 499 | size_t len=0; |
480 | 500 | unsigned char *md; |
481 | 501 | 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); |
487 | 510 | return oauth_body_hash_encode(len, md); |
488 | 511 | } |
489 | 512 | |