Line 0
Link Here
|
|
|
1 |
--- src/hash.c.orig 2013-10-04 13:02:50 UTC |
2 |
+++ src/hash.c |
3 |
@@ -362,6 +362,11 @@ looser: |
4 |
#include "oauth.h" // base64 encode fn's. |
5 |
#include <openssl/hmac.h> |
6 |
|
7 |
+#if OPENSSL_VERSION_NUMBER < 0x10100000 |
8 |
+#define EVP_MD_CTX_new EVP_MD_CTX_create |
9 |
+#define EVP_MD_CTX_free EVP_MD_CTX_destroy |
10 |
+#endif |
11 |
+ |
12 |
char *oauth_sign_hmac_sha1 (const char *m, const char *k) { |
13 |
return(oauth_sign_hmac_sha1_raw (m, strlen(m), k, strlen(k))); |
14 |
} |
15 |
@@ -386,7 +391,7 @@ char *oauth_sign_rsa_sha1 (const char *m |
16 |
unsigned char *sig = NULL; |
17 |
unsigned char *passphrase = NULL; |
18 |
unsigned int len=0; |
19 |
- EVP_MD_CTX md_ctx; |
20 |
+ EVP_MD_CTX *md_ctx; |
21 |
|
22 |
EVP_PKEY *pkey; |
23 |
BIO *in; |
24 |
@@ -399,24 +404,32 @@ char *oauth_sign_rsa_sha1 (const char *m |
25 |
return xstrdup("liboauth/OpenSSL: can not read private key"); |
26 |
} |
27 |
|
28 |
+ md_ctx = EVP_MD_CTX_new(); |
29 |
+ if (md_ctx == NULL) { |
30 |
+ return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX"); |
31 |
+ } |
32 |
+ |
33 |
+ |
34 |
len = EVP_PKEY_size(pkey); |
35 |
sig = (unsigned char*)xmalloc((len+1)*sizeof(char)); |
36 |
|
37 |
- EVP_SignInit(&md_ctx, EVP_sha1()); |
38 |
- EVP_SignUpdate(&md_ctx, m, strlen(m)); |
39 |
- if (EVP_SignFinal (&md_ctx, sig, &len, pkey)) { |
40 |
+ EVP_SignInit(md_ctx, EVP_sha1()); |
41 |
+ EVP_SignUpdate(md_ctx, m, strlen(m)); |
42 |
+ if (EVP_SignFinal (md_ctx, sig, &len, pkey)) { |
43 |
char *tmp; |
44 |
sig[len] = '\0'; |
45 |
tmp = oauth_encode_base64(len,sig); |
46 |
OPENSSL_free(sig); |
47 |
EVP_PKEY_free(pkey); |
48 |
+ EVP_MD_CTX_free(md_ctx); |
49 |
return tmp; |
50 |
} |
51 |
+ EVP_MD_CTX_free(md_ctx); |
52 |
return xstrdup("liboauth/OpenSSL: rsa-sha1 signing failed"); |
53 |
} |
54 |
|
55 |
int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *s) { |
56 |
- EVP_MD_CTX md_ctx; |
57 |
+ EVP_MD_CTX *md_ctx; |
58 |
EVP_PKEY *pkey; |
59 |
BIO *in; |
60 |
X509 *cert = NULL; |
61 |
@@ -437,13 +450,18 @@ int oauth_verify_rsa_sha1 (const char *m |
62 |
return -2; |
63 |
} |
64 |
|
65 |
+ md_ctx = EVP_MD_CTX_new(); |
66 |
+ if (md_ctx == NULL) { |
67 |
+ return -2; |
68 |
+ } |
69 |
+ |
70 |
b64d= (unsigned char*) xmalloc(sizeof(char)*strlen(s)); |
71 |
slen = oauth_decode_base64(b64d, s); |
72 |
|
73 |
- EVP_VerifyInit(&md_ctx, EVP_sha1()); |
74 |
- EVP_VerifyUpdate(&md_ctx, m, strlen(m)); |
75 |
- err = EVP_VerifyFinal(&md_ctx, b64d, slen, pkey); |
76 |
- EVP_MD_CTX_cleanup(&md_ctx); |
77 |
+ EVP_VerifyInit(md_ctx, EVP_sha1()); |
78 |
+ EVP_VerifyUpdate(md_ctx, m, strlen(m)); |
79 |
+ err = EVP_VerifyFinal(md_ctx, b64d, slen, pkey); |
80 |
+ EVP_MD_CTX_free(md_ctx); |
81 |
EVP_PKEY_free(pkey); |
82 |
xfree(b64d); |
83 |
return (err); |
84 |
@@ -455,35 +473,41 @@ int oauth_verify_rsa_sha1 (const char *m |
85 |
*/ |
86 |
char *oauth_body_hash_file(char *filename) { |
87 |
unsigned char fb[BUFSIZ]; |
88 |
- EVP_MD_CTX ctx; |
89 |
+ EVP_MD_CTX *ctx; |
90 |
size_t len=0; |
91 |
unsigned char *md; |
92 |
FILE *F= fopen(filename, "r"); |
93 |
if (!F) return NULL; |
94 |
|
95 |
- EVP_MD_CTX_init(&ctx); |
96 |
- EVP_DigestInit(&ctx,EVP_sha1()); |
97 |
+ ctx = EVP_MD_CTX_new(); |
98 |
+ if (ctx == NULL) { |
99 |
+ return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX"); |
100 |
+ } |
101 |
+ EVP_DigestInit(ctx,EVP_sha1()); |
102 |
while (!feof(F) && (len=fread(fb,sizeof(char),BUFSIZ, F))>0) { |
103 |
- EVP_DigestUpdate(&ctx, fb, len); |
104 |
+ EVP_DigestUpdate(ctx, fb, len); |
105 |
} |
106 |
fclose(F); |
107 |
len=0; |
108 |
md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char)); |
109 |
- EVP_DigestFinal(&ctx, md,(unsigned int*) &len); |
110 |
- EVP_MD_CTX_cleanup(&ctx); |
111 |
+ EVP_DigestFinal(ctx, md,(unsigned int*) &len); |
112 |
+ EVP_MD_CTX_free(ctx); |
113 |
return oauth_body_hash_encode(len, md); |
114 |
} |
115 |
|
116 |
char *oauth_body_hash_data(size_t length, const char *data) { |
117 |
- EVP_MD_CTX ctx; |
118 |
+ EVP_MD_CTX *ctx; |
119 |
size_t len=0; |
120 |
unsigned char *md; |
121 |
md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char)); |
122 |
- EVP_MD_CTX_init(&ctx); |
123 |
- EVP_DigestInit(&ctx,EVP_sha1()); |
124 |
- EVP_DigestUpdate(&ctx, data, length); |
125 |
- EVP_DigestFinal(&ctx, md,(unsigned int*) &len); |
126 |
- EVP_MD_CTX_cleanup(&ctx); |
127 |
+ ctx = EVP_MD_CTX_new(); |
128 |
+ if (ctx == NULL) { |
129 |
+ return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX"); |
130 |
+ } |
131 |
+ EVP_DigestInit(ctx,EVP_sha1()); |
132 |
+ EVP_DigestUpdate(ctx, data, length); |
133 |
+ EVP_DigestFinal(ctx, md,(unsigned int*) &len); |
134 |
+ EVP_MD_CTX_free(ctx); |
135 |
return oauth_body_hash_encode(len, md); |
136 |
} |
137 |
|