~sebvieira/pyopenssl/pkcs12-crl-0.8

« back to all changes in this revision

Viewing changes to pyOpenSSL-0.8-pkcs12.patch

  • Committer: Sebastian Vieira
  • Date: 2009-05-05 07:43:51 UTC
  • Revision ID: sebvieira@gmail.com-20090505074351-9ghyw4qnc8285f91
Apply pyOpenSSL-0.8-pkcs12.patch and pyOpenSSL-0.8-crl.patch from Arnaud Desmons

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
4
@@ -425,6 +425,42 @@
 
5
     return buffer;
 
6
 }
 
7
 
 
8
+static char crypto_dump_pkcs12_doc[] = "";
 
9
+
 
10
+static PyObject *
 
11
+crypto_dump_pkcs12(PyObject *spam, PyObject *args)
 
12
+{
 
13
+    int type, ret, buf_len;
 
14
+    char *temp;
 
15
+    BIO *bio;
 
16
+    PyObject *buffer;
 
17
+    crypto_PKCS12Obj *p12;
 
18
+    PKCS12 *p12_data;
 
19
+    crypto_PKeyObj *key;
 
20
+    crypto_X509Obj *cert;
 
21
+    char *pass;
 
22
+
 
23
+    if (!PyArg_ParseTuple(args, "O!s:dump_pkcs12",
 
24
+                         &crypto_PKCS12_Type, &p12, &pass))
 
25
+        return NULL;
 
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);
 
31
+    if (ret == 0)
 
32
+           {
 
33
+                   BIO_free(bio);
 
34
+                   exception_from_error_queue();
 
35
+                   return NULL;
 
36
+           }
 
37
+    buf_len = BIO_get_mem_data(bio, &temp);
 
38
+    buffer = PyString_FromStringAndSize(temp, buf_len);
 
39
+    PKCS12_free(p12_data);
 
40
+    BIO_free(bio);
 
41
+    return buffer;
 
42
+}
 
43
+
 
44
 static char crypto_load_pkcs7_data_doc[] = "\n\
 
45
 Load pkcs7 data from a buffer\n\
 
46
 \n\
 
47
@@ -532,6 +568,22 @@
 
48
     return (PyObject *)crypto_X509_New(X509_new(), 1);
 
49
 }
 
50
 
 
51
+static char crypto_PKCS12_doc[] = "";
 
52
+
 
53
+static PyObject *
 
54
+crypto_PKCS12(PyObject *spam, PyObject *args)
 
55
+{
 
56
+       crypto_PKCS12Obj *self;
 
57
+       
 
58
+       if (!PyArg_ParseTuple(args, ":PKCS12"))
 
59
+               return NULL;
 
60
+
 
61
+       if (!(self = PyObject_GC_New(crypto_PKCS12Obj, &crypto_PKCS12_Type)))
 
62
+               return NULL;
 
63
+
 
64
+       return (PyObject *)self;
 
65
+}
 
66
+
 
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\
 
70
@@ -683,8 +735,10 @@
 
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 },
 
81
@@ -782,6 +836,7 @@
 
82
 
 
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
 
92
@@ -70,6 +70,10 @@
 
93
 
 
94
 #define crypto_API_pointers             8
 
95
 
 
96
+#define crypto_PKCS12_New_NUM            9
 
97
+#define crypto_PKCS12_New_RETURN         crypto_PKCS12Obj *
 
98
+#define crypto_PKCS12_New_PROTO          (PKCS12 *, char *)
 
99
+
 
100
 #ifdef crypto_MODULE
 
101
 
 
102
 extern crypto_X509_New_RETURN      crypto_X509_New      crypto_X509_New_PROTO;
 
103
@@ -79,6 +83,7 @@
 
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;
 
109
 
 
110
 #else /* crypto_MODULE */
 
111
@@ -99,6 +104,8 @@
 
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])
 
119
 
 
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
 
123
@@ -55,6 +55,38 @@
 
124
     return self->key;
 
125
 }
 
126
 
 
127
+static char crypto_PKCS12_set_certificate_doc[] = "";
 
128
+static PyObject *
 
129
+crypto_PKCS12_set_certificate(crypto_PKCS12Obj *self, PyObject *args)
 
130
+{
 
131
+    crypto_X509Obj *cert;
 
132
+
 
133
+    if (!PyArg_ParseTuple(args, "O!:set_certificate", &crypto_X509_Type, &cert))
 
134
+        return NULL;
 
135
+
 
136
+    self->cert = (PyObject *)cert;
 
137
+    Py_INCREF(cert);
 
138
+    Py_INCREF(Py_None);
 
139
+    return Py_None;
 
140
+}
 
141
+
 
142
+static char crypto_PKCS12_set_privatekey_doc[] = "";
 
143
+static PyObject *
 
144
+crypto_PKCS12_set_privatekey(crypto_PKCS12Obj *self, PyObject *args)
 
145
+{
 
146
+    crypto_PKeyObj *pkey;
 
147
+
 
148
+    if (!PyArg_ParseTuple(args, "O!:set_privatekey", &crypto_PKey_Type, &pkey))
 
149
+        return NULL;
 
150
+
 
151
+    self->key = (PyObject *)pkey;
 
152
+    Py_INCREF(Py_None);
 
153
+    Py_INCREF(pkey);
 
154
+    return Py_None;
 
155
+}
 
156
+
 
157
+
 
158
+
 
159
 static char crypto_PKCS12_get_ca_certificates_doc[] = "\n\
 
160
 Return CA certificates within of the PKCS12 object\n\
 
161
 \n\
 
162
@@ -83,7 +115,9 @@
 
163
 static PyMethodDef crypto_PKCS12_methods[] =
 
164
 {
 
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),
 
170
     { NULL, NULL }
 
171
 };