1 |
arfrever 10/04/30 18:21:16 |
2 |
|
3 |
Added: m2crypto-0.20.2-openssl-1.0.0.patch |
4 |
Log: |
5 |
Fix building with openssl-1.0.0 (bug #310461). |
6 |
(Portage version: HEAD/cvs/Linux x86_64) |
7 |
|
8 |
Revision Changes Path |
9 |
1.1 dev-python/m2crypto/files/m2crypto-0.20.2-openssl-1.0.0.patch |
10 |
|
11 |
file : http://sources.gentoo.org/viewcvs.py/gentoo-x86/dev-python/m2crypto/files/m2crypto-0.20.2-openssl-1.0.0.patch?rev=1.1&view=markup |
12 |
plain: http://sources.gentoo.org/viewcvs.py/gentoo-x86/dev-python/m2crypto/files/m2crypto-0.20.2-openssl-1.0.0.patch?rev=1.1&content-type=text/plain |
13 |
|
14 |
Index: m2crypto-0.20.2-openssl-1.0.0.patch |
15 |
=================================================================== |
16 |
--- SWIG/_aes.i |
17 |
+++ SWIG/_aes.i |
18 |
@@ -76,7 +76,7 @@ |
19 |
AES_encrypt((const unsigned char *)in, out, key); |
20 |
else |
21 |
AES_decrypt((const unsigned char *)in, out, key); |
22 |
- return PyString_FromStringAndSize(out, outlen); |
23 |
+ return PyString_FromStringAndSize((char*)out, outlen); |
24 |
} |
25 |
|
26 |
int AES_type_check(AES_KEY *key) { |
27 |
--- SWIG/_evp.i |
28 |
+++ SWIG/_evp.i |
29 |
@@ -4,6 +4,9 @@ |
30 |
|
31 |
Portions Copyright (c) 2004-2007 Open Source Applications Foundation. |
32 |
Author: Heikki Toivonen |
33 |
+ |
34 |
+Copyright (c) 2009-2010 Heikki Toivonen. All rights reserved. |
35 |
+ |
36 |
*/ |
37 |
|
38 |
%include <openssl/opensslconf.h> |
39 |
@@ -180,7 +183,7 @@ |
40 |
|
41 |
PKCS5_PBKDF2_HMAC_SHA1(passbuf, passlen, saltbuf, saltlen, iter, |
42 |
keylen, key); |
43 |
- ret = PyString_FromStringAndSize(key, keylen); |
44 |
+ ret = PyString_FromStringAndSize((char*)key, keylen); |
45 |
OPENSSL_cleanse(key, keylen); |
46 |
return ret; |
47 |
} |
48 |
@@ -339,7 +342,7 @@ |
49 |
klen = EVP_BytesToKey(cipher, md, (unsigned char *)sbuf, |
50 |
(unsigned char *)dbuf, dlen, iter, |
51 |
key, NULL); /* Since we are not returning IV no need to derive it */ |
52 |
- ret = PyString_FromStringAndSize(key, klen); |
53 |
+ ret = PyString_FromStringAndSize((char*)key, klen); |
54 |
return ret; |
55 |
} |
56 |
|
57 |
@@ -435,7 +438,7 @@ |
58 |
PyErr_SetString(_evp_err, ERR_reason_error_string(ERR_get_error())); |
59 |
return NULL; |
60 |
} |
61 |
- ret = PyString_FromStringAndSize(sigbuf, siglen); |
62 |
+ ret = PyString_FromStringAndSize((char*)sigbuf, siglen); |
63 |
OPENSSL_cleanse(sigbuf, siglen); |
64 |
OPENSSL_free(sigbuf); |
65 |
return ret; |
66 |
@@ -513,7 +516,7 @@ |
67 |
PyErr_SetString(PyExc_ValueError, "EVP_PKEY as DER failed"); |
68 |
return NULL; |
69 |
} |
70 |
- der = PyString_FromStringAndSize(pp, len); |
71 |
+ der = PyString_FromStringAndSize((char*)pp, len); |
72 |
OPENSSL_free(pp); |
73 |
return der; |
74 |
} |
75 |
--- SWIG/_m2crypto.i |
76 |
+++ SWIG/_m2crypto.i |
77 |
@@ -3,6 +3,9 @@ |
78 |
* |
79 |
* Portions created by Open Source Applications Foundation (OSAF) are |
80 |
* Copyright (C) 2004-2006 OSAF. All Rights Reserved. |
81 |
+ * |
82 |
+ * Copyright (c) 2009-2010 Heikki Toivonen. All rights reserved. |
83 |
+ * |
84 |
*/ |
85 |
|
86 |
%module(threads=1) _m2crypto |
87 |
@@ -38,6 +41,19 @@ |
88 |
#define CONST098 |
89 |
#endif |
90 |
|
91 |
+/* Bring in STACK_OF macro definition */ |
92 |
+%include <openssl/safestack.h> |
93 |
+ |
94 |
+/* Bring in LHASH_OF macro definition */ |
95 |
+/* XXX Can't include lhash.h where LHASH_OF is defined, because it includes |
96 |
+ XXX stdio.h etc. which we fail to include. So we have to (re)define |
97 |
+ XXX LHASH_OF here instead. |
98 |
+%include <openssl/lhash.h> |
99 |
+*/ |
100 |
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L |
101 |
+#define LHASH_OF(type) struct lhash_st_##type |
102 |
+#endif |
103 |
+ |
104 |
%include constraints.i |
105 |
%include _threads.i |
106 |
%include _lib.i |
107 |
--- SWIG/_pkcs7.i |
108 |
+++ SWIG/_pkcs7.i |
109 |
@@ -12,7 +12,7 @@ |
110 |
%apply Pointer NONNULL { EVP_CIPHER * }; |
111 |
%apply Pointer NONNULL { EVP_PKEY * }; |
112 |
%apply Pointer NONNULL { PKCS7 * }; |
113 |
-%apply Pointer NONNULL { STACK * }; |
114 |
+%apply Pointer NONNULL { STACK_OF(X509) * }; |
115 |
%apply Pointer NONNULL { X509 * }; |
116 |
|
117 |
%rename(pkcs7_new) PKCS7_new; |
118 |
@@ -54,8 +54,8 @@ |
119 |
|
120 |
%threadallow pkcs7_encrypt; |
121 |
%inline %{ |
122 |
-PKCS7 *pkcs7_encrypt(STACK *stack, BIO *bio, EVP_CIPHER *cipher, int flags) { |
123 |
- return PKCS7_encrypt((STACK_OF(X509) *)stack, bio, cipher, flags); |
124 |
+PKCS7 *pkcs7_encrypt(STACK_OF(X509) *stack, BIO *bio, EVP_CIPHER *cipher, int flags) { |
125 |
+ return PKCS7_encrypt(stack, bio, cipher, flags); |
126 |
} |
127 |
|
128 |
PyObject *pkcs7_decrypt(PKCS7 *pkcs7, EVP_PKEY *pkey, X509 *cert, int flags) { |
129 |
@@ -96,14 +96,14 @@ |
130 |
|
131 |
%threadallow pkcs7_sign1; |
132 |
%inline %{ |
133 |
-PKCS7 *pkcs7_sign1(X509 *x509, EVP_PKEY *pkey, STACK *stack, BIO *bio, int flags) { |
134 |
- return PKCS7_sign(x509, pkey, (STACK_OF(X509) *)stack, bio, flags); |
135 |
+PKCS7 *pkcs7_sign1(X509 *x509, EVP_PKEY *pkey, STACK_OF(X509) *stack, BIO *bio, int flags) { |
136 |
+ return PKCS7_sign(x509, pkey, stack, bio, flags); |
137 |
} |
138 |
%} |
139 |
|
140 |
%threadallow pkcs7_verify1; |
141 |
%inline %{ |
142 |
-PyObject *pkcs7_verify1(PKCS7 *pkcs7, STACK *stack, X509_STORE *store, BIO *data, int flags) { |
143 |
+PyObject *pkcs7_verify1(PKCS7 *pkcs7, STACK_OF(X509) *stack, X509_STORE *store, BIO *data, int flags) { |
144 |
int outlen; |
145 |
char *outbuf; |
146 |
BIO *bio; |
147 |
@@ -113,7 +113,7 @@ |
148 |
PyErr_SetString(PyExc_MemoryError, "pkcs7_verify1"); |
149 |
return NULL; |
150 |
} |
151 |
- if (!PKCS7_verify(pkcs7, (STACK_OF(X509) *)stack, store, data, bio, flags)) { |
152 |
+ if (!PKCS7_verify(pkcs7, stack, store, data, bio, flags)) { |
153 |
PyErr_SetString(_pkcs7_err, ERR_reason_error_string(ERR_get_error())); |
154 |
BIO_free(bio); |
155 |
return NULL; |
156 |
@@ -131,7 +131,7 @@ |
157 |
return ret; |
158 |
} |
159 |
|
160 |
-PyObject *pkcs7_verify0(PKCS7 *pkcs7, STACK *stack, X509_STORE *store, int flags) { |
161 |
+PyObject *pkcs7_verify0(PKCS7 *pkcs7, STACK_OF(X509) *stack, X509_STORE *store, int flags) { |
162 |
return pkcs7_verify1(pkcs7, stack, store, NULL, flags); |
163 |
} |
164 |
%} |
165 |
@@ -229,7 +229,7 @@ |
166 |
} |
167 |
|
168 |
/* return STACK_OF(X509)* */ |
169 |
-STACK *pkcs7_get0_signers(PKCS7 *p7, STACK *certs, int flags) { |
170 |
+STACK_OF(X509) *pkcs7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, int flags) { |
171 |
return PKCS7_get0_signers(p7, certs, flags); |
172 |
} |
173 |
|
174 |
--- SWIG/_rand.i |
175 |
+++ SWIG/_rand.i |
176 |
@@ -87,7 +87,7 @@ |
177 |
Py_INCREF(Py_None); |
178 |
return Py_None; |
179 |
} else { |
180 |
- PyTuple_SET_ITEM(tuple, 0, PyString_FromStringAndSize(blob, n)); |
181 |
+ PyTuple_SET_ITEM(tuple, 0, PyString_FromStringAndSize((char*)blob, n)); |
182 |
PyMem_Free(blob); |
183 |
PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong((long)ret)); |
184 |
return tuple; |
185 |
--- SWIG/_ssl.i |
186 |
+++ SWIG/_ssl.i |
187 |
@@ -3,6 +3,9 @@ |
188 |
/* |
189 |
** Portions created by Open Source Applications Foundation (OSAF) are |
190 |
** Copyright (C) 2004-2005 OSAF. All Rights Reserved. |
191 |
+** |
192 |
+** Copyright (c) 2009-2010 Heikki Toivonen. All rights reserved. |
193 |
+** |
194 |
*/ |
195 |
/* $Id: m2crypto-0.20.2-openssl-1.0.0.patch,v 1.1 2010/04/30 18:21:16 arfrever Exp $ */ |
196 |
|
197 |
@@ -17,13 +20,17 @@ |
198 |
%apply Pointer NONNULL { SSL_CTX * }; |
199 |
%apply Pointer NONNULL { SSL * }; |
200 |
%apply Pointer NONNULL { SSL_CIPHER * }; |
201 |
-%apply Pointer NONNULL { STACK * }; |
202 |
+%apply Pointer NONNULL { STACK_OF(SSL_CIPHER) * }; |
203 |
+%apply Pointer NONNULL { STACK_OF(X509) * }; |
204 |
%apply Pointer NONNULL { BIO * }; |
205 |
%apply Pointer NONNULL { DH * }; |
206 |
%apply Pointer NONNULL { RSA * }; |
207 |
%apply Pointer NONNULL { EVP_PKEY *}; |
208 |
%apply Pointer NONNULL { PyObject *pyfunc }; |
209 |
|
210 |
+%rename(ssl_get_ciphers) SSL_get_ciphers; |
211 |
+extern STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *ssl); |
212 |
+ |
213 |
%rename(ssl_get_version) SSL_get_version; |
214 |
extern const char *SSL_get_version(CONST SSL *); |
215 |
%rename(ssl_get_error) SSL_get_error; |
216 |
@@ -668,28 +675,24 @@ |
217 |
return SSL_CIPHER_get_bits(c, NULL); |
218 |
} |
219 |
|
220 |
-STACK *ssl_get_ciphers(SSL *ssl) { |
221 |
- return (STACK *)SSL_get_ciphers(ssl); |
222 |
-} |
223 |
- |
224 |
-int sk_ssl_cipher_num(STACK *stack) { |
225 |
- return sk_num(stack); |
226 |
+int sk_ssl_cipher_num(STACK_OF(SSL_CIPHER) *stack) { |
227 |
+ return sk_SSL_CIPHER_num(stack); |
228 |
} |
229 |
|
230 |
-SSL_CIPHER *sk_ssl_cipher_value(STACK *stack, int idx) { |
231 |
- return (SSL_CIPHER *)sk_value(stack, idx); |
232 |
+SSL_CIPHER *sk_ssl_cipher_value(STACK_OF(SSL_CIPHER) *stack, int idx) { |
233 |
+ return sk_SSL_CIPHER_value(stack, idx); |
234 |
} |
235 |
|
236 |
-STACK *ssl_get_peer_cert_chain(SSL *ssl) { |
237 |
- return (STACK *)SSL_get_peer_cert_chain(ssl); |
238 |
+STACK_OF(X509) *ssl_get_peer_cert_chain(SSL *ssl) { |
239 |
+ return SSL_get_peer_cert_chain(ssl); |
240 |
} |
241 |
|
242 |
-int sk_x509_num(STACK *stack) { |
243 |
- return sk_num(stack); |
244 |
+int sk_x509_num(STACK_OF(X509) *stack) { |
245 |
+ return sk_X509_num(stack); |
246 |
} |
247 |
|
248 |
-X509 *sk_x509_value(STACK *stack, int idx) { |
249 |
- return (X509 *)sk_value(stack, idx); |
250 |
+X509 *sk_x509_value(STACK_OF(X509) *stack, int idx) { |
251 |
+ return sk_X509_value(stack, idx); |
252 |
} |
253 |
%} |
254 |
|
255 |
--- SWIG/_util.i |
256 |
+++ SWIG/_util.i |
257 |
@@ -48,7 +48,7 @@ |
258 |
PyErr_SetString(_util_err, ERR_reason_error_string(ERR_get_error())); |
259 |
return NULL; |
260 |
} |
261 |
- obj = PyString_FromStringAndSize(ret, len); |
262 |
+ obj = PyString_FromStringAndSize((char*)ret, len); |
263 |
OPENSSL_free(ret); |
264 |
return obj; |
265 |
} |
266 |
--- SWIG/_x509.i |
267 |
+++ SWIG/_x509.i |
268 |
@@ -3,6 +3,9 @@ |
269 |
/* |
270 |
** Portions created by Open Source Applications Foundation (OSAF) are |
271 |
** Copyright (C) 2004-2005 OSAF. All Rights Reserved. |
272 |
+** |
273 |
+** Copyright (c) 2009-2010 Heikki Toivonen. All rights reserved. |
274 |
+** |
275 |
*/ |
276 |
/* $Id: m2crypto-0.20.2-openssl-1.0.0.patch,v 1.1 2010/04/30 18:21:16 arfrever Exp $ */ |
277 |
|
278 |
@@ -148,8 +151,15 @@ |
279 |
extern int X509_NAME_print_ex(BIO *, X509_NAME *, int, unsigned long); |
280 |
%rename(x509_name_print_ex_fp) X509_NAME_print_ex_fp; |
281 |
extern int X509_NAME_print_ex_fp(FILE *, X509_NAME *, int, unsigned long); |
282 |
+ |
283 |
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L |
284 |
+%rename(x509_name_hash) X509_NAME_hash_old; |
285 |
+extern unsigned long X509_NAME_hash_old(X509_NAME *); |
286 |
+#else |
287 |
%rename(x509_name_hash) X509_NAME_hash; |
288 |
extern unsigned long X509_NAME_hash(X509_NAME *); |
289 |
+#endif |
290 |
+ |
291 |
%rename(x509_name_get_index_by_nid) X509_NAME_get_index_by_NID; |
292 |
extern int X509_NAME_get_index_by_NID(X509_NAME *, int, int); |
293 |
|
294 |
@@ -171,7 +181,7 @@ |
295 |
if (PyString_Check($input)) { |
296 |
Py_ssize_t len; |
297 |
|
298 |
- $1 = PyString_AsString($input); |
299 |
+ $1 = (unsigned char *)PyString_AsString($input); |
300 |
len = PyString_Size($input); |
301 |
if (len > INT_MAX) { |
302 |
PyErr_SetString(PyExc_ValueError, "object too large"); |
303 |
@@ -184,7 +194,7 @@ |
304 |
} |
305 |
} |
306 |
%rename(x509_name_entry_set_data) X509_NAME_ENTRY_set_data; |
307 |
-extern int X509_NAME_ENTRY_set_data( X509_NAME_ENTRY *, int, CONST unsigned char *, int); |
308 |
+extern int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *, int, CONST unsigned char *, int); |
309 |
%typemap(in) (CONST unsigned char *, int); |
310 |
|
311 |
%rename(x509_req_new) X509_REQ_new; |
312 |
@@ -230,7 +240,7 @@ |
313 |
%rename(x509_store_ctx_free) X509_STORE_CTX_free; |
314 |
extern void X509_STORE_CTX_free(X509_STORE_CTX *); |
315 |
%rename(x509_store_ctx_get1_chain) X509_STORE_CTX_get1_chain; |
316 |
-extern STACK *X509_STORE_CTX_get1_chain(X509_STORE_CTX *); |
317 |
+extern STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *); |
318 |
|
319 |
%rename(x509_extension_get_critical) X509_EXTENSION_get_critical; |
320 |
extern int X509_EXTENSION_get_critical(X509_EXTENSION *); |
321 |
@@ -348,7 +358,7 @@ |
322 |
PyErr_SetString(_x509_err, ERR_reason_error_string(ERR_get_error())); |
323 |
} |
324 |
else { |
325 |
- ret = PyString_FromStringAndSize(buf, len); |
326 |
+ ret = PyString_FromStringAndSize((char*)buf, len); |
327 |
OPENSSL_free(buf); |
328 |
} |
329 |
return ret; |
330 |
@@ -435,12 +445,12 @@ |
331 |
} |
332 |
|
333 |
int x509_name_set_by_nid(X509_NAME *name, int nid, PyObject *obj) { |
334 |
- return X509_NAME_add_entry_by_NID(name, nid, MBSTRING_ASC, PyString_AsString(obj), -1, -1, 0); |
335 |
+ return X509_NAME_add_entry_by_NID(name, nid, MBSTRING_ASC, (unsigned char *)PyString_AsString(obj), -1, -1, 0); |
336 |
} |
337 |
|
338 |
/* x509_name_add_entry_by_txt */ |
339 |
int x509_name_add_entry_by_txt(X509_NAME *name, char *field, int type, char *bytes, int len, int loc, int set) { |
340 |
- return X509_NAME_add_entry_by_txt(name, field, type, bytes, len, loc, set); |
341 |
+ return X509_NAME_add_entry_by_txt(name, field, type, (unsigned char *)bytes, len, loc, set); |
342 |
} |
343 |
|
344 |
PyObject *x509_name_get_der(X509_NAME *name) |
345 |
@@ -450,23 +460,23 @@ |
346 |
} |
347 |
|
348 |
/* sk_X509_new_null() is a macro returning "STACK_OF(X509) *". */ |
349 |
-STACK *sk_x509_new_null(void) { |
350 |
- return (STACK *)sk_X509_new_null(); |
351 |
+STACK_OF(X509) *sk_x509_new_null(void) { |
352 |
+ return sk_X509_new_null(); |
353 |
} |
354 |
|
355 |
/* sk_X509_free() is a macro. */ |
356 |
-void sk_x509_free(STACK *stack) { |
357 |
- sk_X509_free((STACK_OF(X509) *)stack); |
358 |
+void sk_x509_free(STACK_OF(X509) *stack) { |
359 |
+ sk_X509_free(stack); |
360 |
} |
361 |
|
362 |
/* sk_X509_push() is a macro. */ |
363 |
-int sk_x509_push(STACK *stack, X509 *x509) { |
364 |
- return sk_X509_push((STACK_OF(X509) *)stack, x509); |
365 |
+int sk_x509_push(STACK_OF(X509) *stack, X509 *x509) { |
366 |
+ return sk_X509_push(stack, x509); |
367 |
} |
368 |
|
369 |
/* sk_X509_pop() is a macro. */ |
370 |
-X509 *sk_x509_pop(STACK *stack) { |
371 |
- return sk_X509_pop((STACK_OF(X509) *)stack); |
372 |
+X509 *sk_x509_pop(STACK_OF(X509) *stack) { |
373 |
+ return sk_X509_pop(stack); |
374 |
} |
375 |
|
376 |
int x509_store_load_locations(X509_STORE *store, const char *file) { |
377 |
@@ -493,21 +503,29 @@ |
378 |
return X509_REQ_set_version(x, version); |
379 |
} |
380 |
|
381 |
-int x509_req_add_extensions(X509_REQ *req, STACK *exts) { |
382 |
- return X509_REQ_add_extensions(req, (STACK_OF(X509_EXTENSION) *)exts); |
383 |
+int x509_req_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts) { |
384 |
+ return X509_REQ_add_extensions(req, exts); |
385 |
} |
386 |
|
387 |
-X509_NAME_ENTRY *x509_name_entry_create_by_txt( X509_NAME_ENTRY **ne, char *field, int type, char *bytes, int len) { |
388 |
- return X509_NAME_ENTRY_create_by_txt( ne, field, type, bytes, len); |
389 |
+X509_NAME_ENTRY *x509_name_entry_create_by_txt(X509_NAME_ENTRY **ne, char *field, int type, char *bytes, int len) { |
390 |
+ return X509_NAME_ENTRY_create_by_txt( ne, field, type, (unsigned char *)bytes, len); |
391 |
} |
392 |
|
393 |
-LHASH * |
394 |
-x509v3_lhash(){ |
395 |
- return lh_new(NULL,NULL); |
396 |
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L |
397 |
+LHASH_OF(CONF_VALUE) |
398 |
+#else |
399 |
+LHASH |
400 |
+#endif |
401 |
+*x509v3_lhash() { |
402 |
+ return lh_new(NULL, NULL); /* Should probably be lh_CONF_VALUE_new but won't compile. */ |
403 |
} |
404 |
|
405 |
X509V3_CTX * |
406 |
-x509v3_set_conf_lhash(LHASH * lhash){ |
407 |
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L |
408 |
+x509v3_set_conf_lhash(LHASH_OF(CONF_VALUE) * lhash) { |
409 |
+#else |
410 |
+x509v3_set_conf_lhash(LHASH * lhash) { |
411 |
+#endif |
412 |
X509V3_CTX * ctx; |
413 |
if (!(ctx=(X509V3_CTX *)PyMem_Malloc(sizeof(X509V3_CTX)))) { |
414 |
PyErr_SetString(PyExc_MemoryError, "x509v3_set_conf_lhash"); |
415 |
@@ -517,11 +535,20 @@ |
416 |
return ctx; |
417 |
} |
418 |
|
419 |
-X509_EXTENSION *x509v3_ext_conf(LHASH *conf, X509V3_CTX *ctx, char *name, char *value) { |
420 |
+X509_EXTENSION * |
421 |
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L |
422 |
+x509v3_ext_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, char *name, char *value) { |
423 |
+#else |
424 |
+x509v3_ext_conf(LHASH *conf, X509V3_CTX *ctx, char *name, char *value) { |
425 |
+#endif |
426 |
X509_EXTENSION * ext = NULL; |
427 |
ext = X509V3_EXT_conf(conf, ctx, name, value); |
428 |
PyMem_Free(ctx); |
429 |
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L |
430 |
+ lh_CONF_VALUE_free(conf); |
431 |
+#else |
432 |
lh_free(conf); |
433 |
+#endif |
434 |
return ext; |
435 |
} |
436 |
|
437 |
@@ -543,33 +570,33 @@ |
438 |
} |
439 |
|
440 |
/* sk_X509_EXTENSION_new_null is a macro. */ |
441 |
-STACK *sk_x509_extension_new_null(void) { |
442 |
- return (STACK *)sk_X509_EXTENSION_new_null(); |
443 |
+STACK_OF(X509_EXTENSION) *sk_x509_extension_new_null(void) { |
444 |
+ return sk_X509_EXTENSION_new_null(); |
445 |
} |
446 |
|
447 |
/* sk_X509_EXTENSION_free() is a macro. */ |
448 |
-void sk_x509_extension_free(STACK *stack) { |
449 |
- sk_X509_EXTENSION_free((STACK_OF(X509_EXTENSION) *)stack); |
450 |
+void sk_x509_extension_free(STACK_OF(X509_EXTENSION) *stack) { |
451 |
+ sk_X509_EXTENSION_free(stack); |
452 |
} |
453 |
|
454 |
/* sk_X509_EXTENSION_push() is a macro. */ |
455 |
-int sk_x509_extension_push(STACK *stack, X509_EXTENSION *x509_ext) { |
456 |
- return sk_X509_EXTENSION_push((STACK_OF(X509_EXTENSION) *)stack, x509_ext); |
457 |
+int sk_x509_extension_push(STACK_OF(X509_EXTENSION) *stack, X509_EXTENSION *x509_ext) { |
458 |
+ return sk_X509_EXTENSION_push(stack, x509_ext); |
459 |
} |
460 |
|
461 |
/* sk_X509_EXTENSION_pop() is a macro. */ |
462 |
-X509_EXTENSION *sk_x509_extension_pop(STACK *stack) { |
463 |
- return sk_X509_EXTENSION_pop((STACK_OF(X509_EXTENSION) *)stack); |
464 |
+X509_EXTENSION *sk_x509_extension_pop(STACK_OF(X509_EXTENSION) *stack) { |
465 |
+ return sk_X509_EXTENSION_pop(stack); |
466 |
} |
467 |
|
468 |
/* sk_X509_EXTENSION_num() is a macro. */ |
469 |
-int sk_x509_extension_num(STACK *stack) { |
470 |
- return sk_X509_EXTENSION_num((STACK_OF(X509_EXTENSION) *)stack); |
471 |
+int sk_x509_extension_num(STACK_OF(X509_EXTENSION) *stack) { |
472 |
+ return sk_X509_EXTENSION_num(stack); |
473 |
} |
474 |
|
475 |
/* sk_X509_EXTENSION_value() is a macro. */ |
476 |
-X509_EXTENSION *sk_x509_extension_value(STACK *stack, int i) { |
477 |
- return sk_X509_EXTENSION_value((STACK_OF(X509_EXTENSION) *)stack, i); |
478 |
+X509_EXTENSION *sk_x509_extension_value(STACK_OF(X509_EXTENSION) *stack, int i) { |
479 |
+ return sk_X509_EXTENSION_value(stack, i); |
480 |
} |
481 |
|
482 |
/* X509_STORE_CTX_get_app_data is a macro. */ |
483 |
@@ -590,7 +617,7 @@ |
484 |
#define I2DTYPE int (*)() |
485 |
#endif |
486 |
|
487 |
-STACK * |
488 |
+STACK_OF(X509) * |
489 |
make_stack_from_der_sequence(PyObject * pyEncodedString){ |
490 |
STACK_OF(X509) *certs; |
491 |
Py_ssize_t encoded_string_len; |
492 |
@@ -606,7 +633,7 @@ |
493 |
return NULL; |
494 |
} |
495 |
|
496 |
- certs = ASN1_seq_unpack((unsigned char *)encoded_string, encoded_string_len, (D2ITYPE)d2i_X509, (void(*)())X509_free ); |
497 |
+ certs = ASN1_seq_unpack_X509((unsigned char *)encoded_string, encoded_string_len, d2i_X509, X509_free ); |
498 |
if (!certs) { |
499 |
PyErr_SetString(_x509_err, ERR_reason_error_string(ERR_get_error())); |
500 |
return NULL; |
501 |
@@ -616,13 +643,13 @@ |
502 |
} |
503 |
|
504 |
PyObject * |
505 |
-get_der_encoding_stack(STACK * stack){ |
506 |
+get_der_encoding_stack(STACK_OF(X509) *stack){ |
507 |
PyObject * encodedString; |
508 |
|
509 |
unsigned char * encoding; |
510 |
int len; |
511 |
|
512 |
- encoding = ASN1_seq_pack((STACK_OF(X509)*) stack, (I2DTYPE)i2d_X509, NULL, &len); |
513 |
+ encoding = ASN1_seq_pack_X509(stack, i2d_X509, NULL, &len); |
514 |
if (!encoding) { |
515 |
PyErr_SetString(_x509_err, ERR_reason_error_string(ERR_get_error())); |
516 |
return NULL; |
517 |
--- tests/alltests.py |
518 |
+++ tests/alltests.py |
519 |
@@ -37,6 +37,7 @@ |
520 |
'tests.test_rc4', |
521 |
'tests.test_rsa', |
522 |
'tests.test_smime', |
523 |
+ 'tests.test_ssl_offline', |
524 |
'tests.test_threading', |
525 |
'tests.test_x509'] |
526 |
if os.name == 'posix': |
527 |
--- tests/test_smime.py |
528 |
+++ tests/test_smime.py |
529 |
@@ -37,7 +37,7 @@ |
530 |
buf = BIO.MemoryBuffer(self.cleartext) |
531 |
s = SMIME.SMIME() |
532 |
s.load_key('tests/signer_key.pem', 'tests/signer.pem') |
533 |
- p7 = s.sign(buf) |
534 |
+ p7 = s.sign(buf, SMIME.PKCS7_DETACHED) |
535 |
assert len(buf) == 0 |
536 |
assert p7.type() == SMIME.PKCS7_SIGNED, p7.type() |
537 |
assert isinstance(p7, SMIME.PKCS7), p7 |
538 |
@@ -73,9 +73,8 @@ |
539 |
|
540 |
p7, data = SMIME.smime_load_pkcs7_bio(self.signed) |
541 |
|
542 |
- assert data.read() == self.cleartext |
543 |
assert isinstance(p7, SMIME.PKCS7), p7 |
544 |
- v = s.verify(p7) |
545 |
+ v = s.verify(p7, data) |
546 |
assert v == self.cleartext |
547 |
|
548 |
t = p7.get0_signers(sk) |
549 |
@@ -95,7 +94,6 @@ |
550 |
s.set_x509_store(st) |
551 |
|
552 |
p7, data = SMIME.smime_load_pkcs7_bio(self.signed) |
553 |
- assert data.read() == self.cleartext |
554 |
assert isinstance(p7, SMIME.PKCS7), p7 |
555 |
self.assertRaises(SMIME.PKCS7_Error, s.verify, p7) # Bad signer |
556 |
|
557 |
@@ -169,7 +167,7 @@ |
558 |
s.set_cipher(SMIME.Cipher('des_ede3_cbc')) |
559 |
|
560 |
tmp = BIO.MemoryBuffer() |
561 |
- s.write(tmp, p7, buf) |
562 |
+ s.write(tmp, p7) |
563 |
|
564 |
p7 = s.encrypt(tmp) |
565 |
|
566 |
@@ -211,6 +209,7 @@ |
567 |
assert p7.write(f) == 1 |
568 |
f.close() |
569 |
|
570 |
+ p7 = s.sign(BIO.MemoryBuffer('some text'), SMIME.PKCS7_DETACHED) |
571 |
self.filenameSmime = 'tests/sig.p7s' |
572 |
f = BIO.openfile(self.filenameSmime, 'wb') |
573 |
assert s.write(f, p7, BIO.MemoryBuffer('some text')) == 1 |
574 |
@@ -220,7 +219,7 @@ |
575 |
buf = BIO.MemoryBuffer() |
576 |
assert SMIME.load_pkcs7(self.filename).write_der(buf) == 1 |
577 |
s = buf.read() |
578 |
- assert len(s) == 1204, len(s) |
579 |
+ assert len(s) in (1204, 1243), len(s) |
580 |
|
581 |
def test_load_pkcs7(self): |
582 |
assert SMIME.load_pkcs7(self.filename).type() == SMIME.PKCS7_SIGNED |
583 |
--- tests/test_ssl_offline.py |
584 |
+++ tests/test_ssl_offline.py |
585 |
@@ -0,0 +1,60 @@ |
586 |
+"""Unit tests for M2Crypto.SSL offline parts |
587 |
+ |
588 |
+Copyright (C) 2006 Open Source Applications Foundation. All Rights Reserved. |
589 |
+ |
590 |
+Copyright (C) 2009-2010 Heikki Toivonen. All Rights Reserved. |
591 |
+""" |
592 |
+ |
593 |
+import unittest, doctest |
594 |
+from M2Crypto.SSL import Checker |
595 |
+from M2Crypto import X509 |
596 |
+from M2Crypto import SSL |
597 |
+from test_ssl import srv_host |
598 |
+ |
599 |
+ |
600 |
+class CheckerTestCase(unittest.TestCase): |
601 |
+ def test_checker(self): |
602 |
+ |
603 |
+ check = Checker.Checker(host=srv_host, |
604 |
+ peerCertHash='7B754EFA41A264AAD370D43460BC8229F9354ECE') |
605 |
+ x509 = X509.load_cert('tests/server.pem') |
606 |
+ assert check(x509, srv_host) |
607 |
+ self.assertRaises(Checker.WrongHost, check, x509, 'example.com') |
608 |
+ |
609 |
+ doctest.testmod(Checker) |
610 |
+ |
611 |
+ |
612 |
+class ContextTestCase(unittest.TestCase): |
613 |
+ def test_ctx_load_verify_locations(self): |
614 |
+ ctx = SSL.Context() |
615 |
+ self.assertRaises(ValueError, ctx.load_verify_locations, None, None) |
616 |
+ |
617 |
+ def test_map(self): |
618 |
+ from M2Crypto.SSL.Context import map, _ctxmap |
619 |
+ assert isinstance(map(), _ctxmap) |
620 |
+ ctx = SSL.Context() |
621 |
+ assert map() |
622 |
+ ctx.close() |
623 |
+ assert map() is _ctxmap.singleton |
624 |
+ |
625 |
+ def test_certstore(self): |
626 |
+ ctx = SSL.Context() |
627 |
+ ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9) |
628 |
+ ctx.load_verify_locations('tests/ca.pem') |
629 |
+ ctx.load_cert('tests/x509.pem') |
630 |
+ |
631 |
+ store = ctx.get_cert_store() |
632 |
+ assert isinstance(store, X509.X509_Store) |
633 |
+ |
634 |
+ |
635 |
+def suite(): |
636 |
+ suite = unittest.TestSuite() |
637 |
+ suite.addTest(unittest.makeSuite(CheckerTestCase)) |
638 |
+ suite.addTest(unittest.makeSuite(ContextTestCase)) |
639 |
+ return suite |
640 |
+ |
641 |
+ |
642 |
+if __name__ == '__main__': |
643 |
+ Rand.load_file('randpool.dat', -1) |
644 |
+ unittest.TextTestRunner().run(suite()) |
645 |
+ Rand.save_file('randpool.dat') |
646 |
--- tests/test_ssl.py |
647 |
+++ tests/test_ssl.py |
648 |
@@ -2,7 +2,10 @@ |
649 |
|
650 |
"""Unit tests for M2Crypto.SSL. |
651 |
|
652 |
-Copyright (c) 2000-2004 Ng Pheng Siong. All rights reserved.""" |
653 |
+Copyright (c) 2000-2004 Ng Pheng Siong. All rights reserved. |
654 |
+ |
655 |
+Copyright (c) 2009-2010 Heikki Toivonen. All rights reserved. |
656 |
+""" |
657 |
|
658 |
""" |
659 |
TODO |
660 |
@@ -405,8 +408,11 @@ |
661 |
try: |
662 |
ctx = SSL.Context('sslv23', weak_crypto=1) |
663 |
s = SSL.Connection(ctx) |
664 |
- s.connect(self.srv_addr) |
665 |
- self.failUnlessEqual(s.get_version(), 'SSLv2') |
666 |
+ if m2.OPENSSL_VERSION_NUMBER < 0x10000000: # SSLv2 ciphers disabled by default in newer OpenSSL |
667 |
+ s.connect(self.srv_addr) |
668 |
+ self.failUnlessEqual(s.get_version(), 'SSLv2') |
669 |
+ else: |
670 |
+ self.assertRaises(SSL.SSLError, s.connect, self.srv_addr) |
671 |
s.close() |
672 |
finally: |
673 |
self.stop_server(pid) |
674 |
@@ -1032,45 +1038,6 @@ |
675 |
# XXX need server to test against |
676 |
|
677 |
|
678 |
-class CheckerTestCase(unittest.TestCase): |
679 |
- def test_checker(self): |
680 |
- from M2Crypto.SSL import Checker |
681 |
- from M2Crypto import X509 |
682 |
- |
683 |
- check = Checker.Checker(host=srv_host, |
684 |
- peerCertHash='7B754EFA41A264AAD370D43460BC8229F9354ECE') |
685 |
- x509 = X509.load_cert('tests/server.pem') |
686 |
- assert check(x509, srv_host) |
687 |
- self.assertRaises(Checker.WrongHost, check, x509, 'example.com') |
688 |
- |
689 |
- import doctest |
690 |
- doctest.testmod(Checker) |
691 |
- |
692 |
- |
693 |
-class ContextTestCase(unittest.TestCase): |
694 |
- def test_ctx_load_verify_locations(self): |
695 |
- ctx = SSL.Context() |
696 |
- self.assertRaises(ValueError, ctx.load_verify_locations, None, None) |
697 |
- |
698 |
- def test_map(self): |
699 |
- from M2Crypto.SSL.Context import map, _ctxmap |
700 |
- assert isinstance(map(), _ctxmap) |
701 |
- ctx = SSL.Context() |
702 |
- assert map() |
703 |
- ctx.close() |
704 |
- assert map() is _ctxmap.singleton |
705 |
- |
706 |
- def test_certstore(self): |
707 |
- ctx = SSL.Context() |
708 |
- ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9) |
709 |
- ctx.load_verify_locations('tests/ca.pem') |
710 |
- ctx.load_cert('tests/x509.pem') |
711 |
- |
712 |
- from M2Crypto import X509 |
713 |
- store = ctx.get_cert_store() |
714 |
- assert isinstance(store, X509.X509_Store) |
715 |
- |
716 |
- |
717 |
class SessionTestCase(unittest.TestCase): |
718 |
def test_session_load_bad(self): |
719 |
self.assertRaises(SSL.SSLError, SSL.Session.load_session, |
720 |
@@ -1086,8 +1053,6 @@ |
721 |
|
722 |
def suite(): |
723 |
suite = unittest.TestSuite() |
724 |
- suite.addTest(unittest.makeSuite(CheckerTestCase)) |
725 |
- suite.addTest(unittest.makeSuite(ContextTestCase)) |
726 |
suite.addTest(unittest.makeSuite(SessionTestCase)) |
727 |
suite.addTest(unittest.makeSuite(XmlRpcLibTestCase)) |
728 |
suite.addTest(unittest.makeSuite(FtpsLibTestCase)) |