1
diff -ruN ../pyOpenSSL-0.8/src/crypto/crypto.c ./src/crypto/crypto.c
2
--- ../pyOpenSSL-0.8/src/crypto/crypto.c 2008-09-22 02:36:55.000000000 +0200
3
+++ ./src/crypto/crypto.c 2009-03-29 19:39:23.000000000 +0200
8
+static char crypto_dump_pkcs12_doc[] = "";
11
+crypto_dump_pkcs12(PyObject *spam, PyObject *args)
13
+ int type, ret, buf_len;
17
+ crypto_PKCS12Obj *p12;
19
+ crypto_PKeyObj *key;
20
+ crypto_X509Obj *cert;
23
+ if (!PyArg_ParseTuple(args, "O!s:dump_pkcs12",
24
+ &crypto_PKCS12_Type, &p12, &pass))
26
+ key = (crypto_PKeyObj *)p12->key;
27
+ cert = (crypto_X509Obj *)p12->cert;
28
+ p12_data = PKCS12_create(pass, 0, key->pkey, cert->x509, 0, 0, 0, 0, 0, 0);
29
+ bio = BIO_new(BIO_s_mem());
30
+ ret = i2d_PKCS12_bio(bio, p12_data);
34
+ exception_from_error_queue();
37
+ buf_len = BIO_get_mem_data(bio, &temp);
38
+ buffer = PyString_FromStringAndSize(temp, buf_len);
39
+ PKCS12_free(p12_data);
44
static char crypto_load_pkcs7_data_doc[] = "\n\
45
Load pkcs7 data from a buffer\n\
48
return (PyObject *)crypto_X509_New(X509_new(), 1);
51
+static char crypto_PKCS12_doc[] = "";
54
+crypto_PKCS12(PyObject *spam, PyObject *args)
56
+ crypto_PKCS12Obj *self;
58
+ if (!PyArg_ParseTuple(args, ":PKCS12"))
61
+ if (!(self = PyObject_GC_New(crypto_PKCS12Obj, &crypto_PKCS12_Type)))
64
+ return (PyObject *)self;
67
static char crypto_X509Name_doc[] = "\n\
68
The factory function inserted in the module dictionary as a copy\n\
69
constructor for X509Name objects.\n\
71
{ "dump_certificate_request", (PyCFunction)crypto_dump_certificate_request, METH_VARARGS, crypto_dump_certificate_request_doc },
72
{ "load_pkcs7_data", (PyCFunction)crypto_load_pkcs7_data, METH_VARARGS, crypto_load_pkcs7_data_doc },
73
{ "load_pkcs12", (PyCFunction)crypto_load_pkcs12, METH_VARARGS, crypto_load_pkcs12_doc },
74
+ { "dump_pkcs12", (PyCFunction)crypto_dump_pkcs12, METH_VARARGS, crypto_dump_pkcs12_doc },
75
/* Factory functions */
76
{ "X509", (PyCFunction)crypto_X509, METH_VARARGS, crypto_X509_doc },
77
+ { "PKCS12", (PyCFunction)crypto_PKCS12, METH_VARARGS, crypto_PKCS12_doc },
78
{ "X509Name",(PyCFunction)crypto_X509Name,METH_VARARGS, crypto_X509Name_doc },
79
{ "X509Req", (PyCFunction)crypto_X509Req, METH_VARARGS, crypto_X509Req_doc },
80
{ "PKey", (PyCFunction)crypto_PKey, METH_VARARGS, crypto_PKey_doc },
83
/* Initialize the C API pointer array */
84
crypto_API[crypto_X509_New_NUM] = (void *)crypto_X509_New;
85
+ crypto_API[crypto_PKCS12_New_NUM] = (void *)crypto_PKCS12_New;
86
crypto_API[crypto_X509Name_New_NUM] = (void *)crypto_X509Name_New;
87
crypto_API[crypto_X509Req_New_NUM] = (void *)crypto_X509Req_New;
88
crypto_API[crypto_X509Store_New_NUM] = (void *)crypto_X509Store_New;
89
diff -ruN ../pyOpenSSL-0.8/src/crypto/crypto.h ./src/crypto/crypto.h
90
--- ../pyOpenSSL-0.8/src/crypto/crypto.h 2008-09-22 02:36:55.000000000 +0200
91
+++ ./src/crypto/crypto.h 2009-03-29 19:39:23.000000000 +0200
94
#define crypto_API_pointers 8
96
+#define crypto_PKCS12_New_NUM 9
97
+#define crypto_PKCS12_New_RETURN crypto_PKCS12Obj *
98
+#define crypto_PKCS12_New_PROTO (PKCS12 *, char *)
102
extern crypto_X509_New_RETURN crypto_X509_New crypto_X509_New_PROTO;
104
extern crypto_PKey_New_RETURN crypto_PKey_New crypto_PKey_New_PROTO;
105
extern crypto_X509Extension_New_RETURN crypto_X509Extension_New crypto_X509Extension_New_PROTO;
106
extern crypto_PKCS7_New_RETURN crypto_PKCS7_New crypto_PKCS7_New_PROTO;
107
+extern crypto_PKCS12_New_RETURN crypto_PKCS12_New crypto_PKCS12_New_PROTO;
108
extern crypto_NetscapeSPKI_New_RETURN crypto_NetscapeSPKI_New crypto_NetscapeSPKI_New_PROTO;
110
#else /* crypto_MODULE */
112
(*(crypto_X509Extension_New_RETURN (*)crypto_X509Extension_New_PROTO) crypto_API[crypto_X509Extension_New_NUM])
113
#define crypto_PKCS7_New \
114
(*(crypto_PKCS7_New_RETURN (*)crypto_PKCS7_New_PROTO) crypto_API[crypto_PKCS7_New_NUM])
115
+#define crypto_PKCS12_New \
116
+ (*(crypto_PKCS12_New_RETURN (*)crypto_PKCS12_New_PROTO) crypto_API[crypto_PKCS12_New_NUM])
117
#define crypto_NetscapeSPKI_New \
118
(*(crypto_NetscapeSPKI_New_RETURN (*)crypto_NetscapeSPKI_New_PROTO) crypto_API[crypto_NetscapeSPKI_New_NUM])
120
diff -ruN ../pyOpenSSL-0.8/src/crypto/pkcs12.c ./src/crypto/pkcs12.c
121
--- ../pyOpenSSL-0.8/src/crypto/pkcs12.c 2008-09-22 02:36:55.000000000 +0200
122
+++ ./src/crypto/pkcs12.c 2009-03-29 19:39:23.000000000 +0200
127
+static char crypto_PKCS12_set_certificate_doc[] = "";
129
+crypto_PKCS12_set_certificate(crypto_PKCS12Obj *self, PyObject *args)
131
+ crypto_X509Obj *cert;
133
+ if (!PyArg_ParseTuple(args, "O!:set_certificate", &crypto_X509_Type, &cert))
136
+ self->cert = (PyObject *)cert;
138
+ Py_INCREF(Py_None);
142
+static char crypto_PKCS12_set_privatekey_doc[] = "";
144
+crypto_PKCS12_set_privatekey(crypto_PKCS12Obj *self, PyObject *args)
146
+ crypto_PKeyObj *pkey;
148
+ if (!PyArg_ParseTuple(args, "O!:set_privatekey", &crypto_PKey_Type, &pkey))
151
+ self->key = (PyObject *)pkey;
152
+ Py_INCREF(Py_None);
159
static char crypto_PKCS12_get_ca_certificates_doc[] = "\n\
160
Return CA certificates within of the PKCS12 object\n\
163
static PyMethodDef crypto_PKCS12_methods[] =
165
ADD_METHOD(get_certificate),
166
+ ADD_METHOD(set_certificate),
167
ADD_METHOD(get_privatekey),
168
+ ADD_METHOD(set_privatekey),
169
ADD_METHOD(get_ca_certificates),