Gentoo Archives: gentoo-commits

From: "Arfrever Frehtes Taifersar Arahesis (arfrever)" <arfrever@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] gentoo-x86 commit in dev-python/m2crypto/files: m2crypto-0.20.2-openssl-1.0.0.patch
Date: Fri, 30 Apr 2010 18:21:22
Message-Id: 20100430182116.3742B2C04C@corvid.gentoo.org
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))