Line 0
Link Here
|
|
|
1 |
--- crypto.c.orig 2004-03-21 04:02:32.000000000 -0800 |
2 |
+++ crypto.c 2018-10-15 15:18:25.842905000 -0700 |
3 |
@@ -56,6 +56,30 @@ |
4 |
|
5 |
static EVP_PKEY *pkey; |
6 |
|
7 |
+#if OPENSSL_VERSION_NUMBER < 0x10100000L |
8 |
+ |
9 |
+static void *OPENSSL_zalloc (size_t num) |
10 |
+{ |
11 |
+ void *ret = OPENSSL_malloc (num); |
12 |
+ |
13 |
+ if (ret != NULL) |
14 |
+ memset (ret, 0, num); |
15 |
+ return ret; |
16 |
+} |
17 |
+ |
18 |
+EVP_MD_CTX *EVP_MD_CTX_new (void) |
19 |
+{ |
20 |
+ return OPENSSL_zalloc (sizeof (EVP_MD_CTX)); |
21 |
+} |
22 |
+ |
23 |
+void EVP_MD_CTX_free (EVP_MD_CTX *ctx) |
24 |
+{ |
25 |
+ EVP_MD_CTX_cleanup (ctx); |
26 |
+ OPENSSL_free (ctx); |
27 |
+} |
28 |
+ |
29 |
+#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ |
30 |
+ |
31 |
static void |
32 |
opensslError (const char *what) |
33 |
{ |
34 |
@@ -100,7 +124,7 @@ |
35 |
SignFile (int fd, const char *filename, const char *sigfile) |
36 |
{ |
37 |
const EVP_MD *mdType; |
38 |
- EVP_MD_CTX ctx; |
39 |
+ EVP_MD_CTX *ctx; |
40 |
ssize_t len; |
41 |
unsigned char *sig = NULL; |
42 |
unsigned int sigLen; |
43 |
@@ -111,8 +135,12 @@ |
44 |
if (!pkey) |
45 |
return; |
46 |
|
47 |
+#if OPENSSL_VERSION_NUMBER < 0x10100000L |
48 |
mdType = EVP_PKEY_type (pkey->type) == EVP_PKEY_DSA ? EVP_dss1 () : |
49 |
EVP_sha1 (); |
50 |
+#else |
51 |
+ mdType = EVP_sha1 (); |
52 |
+#endif |
53 |
|
54 |
if (!sigfile) { |
55 |
int tlen = strlen (filename) + 4 + 1; |
56 |
@@ -122,21 +150,23 @@ |
57 |
sigfile = tsigfile; |
58 |
} |
59 |
|
60 |
+ if ((ctx = EVP_MD_CTX_new ()) == NULL) |
61 |
+ opensslError ("EVP_MD_CTX_new"); |
62 |
#ifdef HAVE_EVP_MD_CTX_INIT |
63 |
- EVP_MD_CTX_init (&ctx); |
64 |
+ EVP_MD_CTX_init (ctx); |
65 |
#endif |
66 |
#ifdef EVP_DIGESTINIT_VOID |
67 |
- EVP_SignInit (&ctx, mdType); |
68 |
+ EVP_SignInit (ctx, mdType); |
69 |
#else |
70 |
- if (!EVP_SignInit (&ctx, mdType)) |
71 |
+ if (!EVP_SignInit (ctx, mdType)) |
72 |
opensslError ("EVP_SignInit"); |
73 |
#endif |
74 |
|
75 |
while ((len = read (fd, HashBuffer, HASH_BUFFER_SIZE)) > 0) { |
76 |
#ifdef EVP_DIGESTINIT_VOID |
77 |
- EVP_SignUpdate (&ctx, HashBuffer, len); |
78 |
+ EVP_SignUpdate (ctx, HashBuffer, len); |
79 |
#else |
80 |
- if (!EVP_SignUpdate (&ctx, HashBuffer, len)) |
81 |
+ if (!EVP_SignUpdate (ctx, HashBuffer, len)) |
82 |
opensslError ("EVP_SignUpdate"); |
83 |
#endif |
84 |
} |
85 |
@@ -146,7 +176,7 @@ |
86 |
|
87 |
sig = mymalloc (EVP_PKEY_size (pkey)); |
88 |
|
89 |
- if (EVP_SignFinal (&ctx, sig, &sigLen, pkey)) { |
90 |
+ if (EVP_SignFinal (ctx, sig, &sigLen, pkey)) { |
91 |
if ((f = open (sigfile, O_CREAT|O_WRONLY|O_TRUNC, 0600)) != -1) { |
92 |
if (write (f, sig, sigLen) != sigLen) |
93 |
yaficError (sigfile); |
94 |
@@ -162,15 +192,16 @@ |
95 |
if (sig) free (sig); |
96 |
if (tsigfile) free (tsigfile); |
97 |
#ifdef HAVE_EVP_MD_CTX_CLEANUP |
98 |
- EVP_MD_CTX_cleanup (&ctx); |
99 |
+ EVP_MD_CTX_cleanup (ctx); |
100 |
#endif |
101 |
+ EVP_MD_CTX_free (ctx); |
102 |
} |
103 |
|
104 |
void |
105 |
VerifyFile (int fd, const char *filename, const char *sigfile) |
106 |
{ |
107 |
const EVP_MD *mdType; |
108 |
- EVP_MD_CTX ctx; |
109 |
+ EVP_MD_CTX *ctx; |
110 |
ssize_t len; |
111 |
unsigned char *sig = NULL; |
112 |
int f; |
113 |
@@ -181,8 +212,12 @@ |
114 |
if (!pkey) |
115 |
return; |
116 |
|
117 |
+#if OPENSSL_VERSION_NUMBER < 0x10100000L |
118 |
mdType = EVP_PKEY_type (pkey->type) == EVP_PKEY_DSA ? EVP_dss1 () : |
119 |
EVP_sha1 (); |
120 |
+#else |
121 |
+ mdType = EVP_sha1 (); |
122 |
+#endif |
123 |
|
124 |
if (!sigfile) { |
125 |
int tlen = strlen (filename) + 4 + 1; |
126 |
@@ -195,13 +230,15 @@ |
127 |
fprintf (stderr, "Verifying %s: ", filename); |
128 |
fflush (stderr); |
129 |
|
130 |
+ if ((ctx = EVP_MD_CTX_new ()) == NULL) |
131 |
+ opensslError ("EVP_MD_CTX_new"); |
132 |
#ifdef HAVE_EVP_MD_CTX_INIT |
133 |
- EVP_MD_CTX_init (&ctx); |
134 |
+ EVP_MD_CTX_init (ctx); |
135 |
#endif |
136 |
#ifdef EVP_DIGESTINIT_VOID |
137 |
- EVP_VerifyInit (&ctx, mdType); |
138 |
+ EVP_VerifyInit (ctx, mdType); |
139 |
#else |
140 |
- if (!EVP_VerifyInit (&ctx, mdType)) { |
141 |
+ if (!EVP_VerifyInit (ctx, mdType)) { |
142 |
fprintf (stderr, "Error\n"); |
143 |
opensslError ("EVP_VerifyInit"); |
144 |
} |
145 |
@@ -209,9 +246,9 @@ |
146 |
|
147 |
while ((len = read (fd, HashBuffer, HASH_BUFFER_SIZE)) > 0) { |
148 |
#ifdef EVP_DIGESTINIT_VOID |
149 |
- EVP_VerifyUpdate (&ctx, HashBuffer, len); |
150 |
+ EVP_VerifyUpdate (ctx, HashBuffer, len); |
151 |
#else |
152 |
- if (!EVP_VerifyUpdate (&ctx, HashBuffer, len)) { |
153 |
+ if (!EVP_VerifyUpdate (ctx, HashBuffer, len)) { |
154 |
fprintf (stderr, "Error\n"); |
155 |
opensslError ("EVP_SignUpdate"); |
156 |
} |
157 |
@@ -233,7 +270,7 @@ |
158 |
|
159 |
close (f); |
160 |
|
161 |
- ret = EVP_VerifyFinal (&ctx, sig, len, pkey); |
162 |
+ ret = EVP_VerifyFinal (ctx, sig, len, pkey); |
163 |
if (ret < 0) { |
164 |
fprintf (stderr, "Error\n"); |
165 |
opensslError ("EVP_VerifyFinal"); |
166 |
@@ -254,8 +291,9 @@ |
167 |
if (sig) free (sig); |
168 |
if (tsigfile) free (tsigfile); |
169 |
#ifdef HAVE_EVP_MD_CTX_CLEANUP |
170 |
- EVP_MD_CTX_cleanup (&ctx); |
171 |
+ EVP_MD_CTX_cleanup (ctx); |
172 |
#endif |
173 |
+ EVP_MD_CTX_free (ctx); |
174 |
} |
175 |
|
176 |
const char * |
177 |
@@ -265,7 +303,11 @@ |
178 |
|
179 |
if (pkey) { |
180 |
int bits = EVP_PKEY_bits (pkey); |
181 |
+#if OPENSSL_VERSION_NUMBER < 0x10100000L |
182 |
int type = EVP_PKEY_type (pkey->type); |
183 |
+#else |
184 |
+ int type = EVP_PKEY_base_id (pkey); |
185 |
+#endif |
186 |
|
187 |
switch (type) { |
188 |
case EVP_PKEY_RSA: |