blob: 29f58384394c98b75b491db8594de7ef2127dec2 [file] [log] [blame]
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001/*[clinic input]
2preserve
3[clinic start generated code]*/
4
5PyDoc_STRVAR(_ssl__SSLSocket_do_handshake__doc__,
6"do_handshake($self, /)\n"
7"--\n"
8"\n");
9
10#define _SSL__SSLSOCKET_DO_HANDSHAKE_METHODDEF \
11 {"do_handshake", (PyCFunction)_ssl__SSLSocket_do_handshake, METH_NOARGS, _ssl__SSLSocket_do_handshake__doc__},
12
13static PyObject *
14_ssl__SSLSocket_do_handshake_impl(PySSLSocket *self);
15
16static PyObject *
17_ssl__SSLSocket_do_handshake(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
18{
19 return _ssl__SSLSocket_do_handshake_impl(self);
20}
21
22PyDoc_STRVAR(_ssl__test_decode_cert__doc__,
23"_test_decode_cert($module, path, /)\n"
24"--\n"
25"\n");
26
27#define _SSL__TEST_DECODE_CERT_METHODDEF \
28 {"_test_decode_cert", (PyCFunction)_ssl__test_decode_cert, METH_O, _ssl__test_decode_cert__doc__},
29
30static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030031_ssl__test_decode_cert_impl(PyObject *module, PyObject *path);
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +030032
33static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030034_ssl__test_decode_cert(PyObject *module, PyObject *arg)
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +030035{
36 PyObject *return_value = NULL;
37 PyObject *path;
38
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030039 if (!PyArg_Parse(arg, "O&:_test_decode_cert", PyUnicode_FSConverter, &path)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +030040 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030041 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +030042 return_value = _ssl__test_decode_cert_impl(module, path);
43
44exit:
45 return return_value;
46}
47
48PyDoc_STRVAR(_ssl__SSLSocket_peer_certificate__doc__,
49"peer_certificate($self, der=False, /)\n"
50"--\n"
51"\n"
52"Returns the certificate for the peer.\n"
53"\n"
54"If no certificate was provided, returns None. If a certificate was\n"
55"provided, but not validated, returns an empty dictionary. Otherwise\n"
56"returns a dict containing information about the peer certificate.\n"
57"\n"
58"If the optional argument is True, returns a DER-encoded copy of the\n"
59"peer certificate, or None if no certificate was provided. This will\n"
60"return the certificate even if it wasn\'t validated.");
61
62#define _SSL__SSLSOCKET_PEER_CERTIFICATE_METHODDEF \
63 {"peer_certificate", (PyCFunction)_ssl__SSLSocket_peer_certificate, METH_VARARGS, _ssl__SSLSocket_peer_certificate__doc__},
64
65static PyObject *
66_ssl__SSLSocket_peer_certificate_impl(PySSLSocket *self, int binary_mode);
67
68static PyObject *
69_ssl__SSLSocket_peer_certificate(PySSLSocket *self, PyObject *args)
70{
71 PyObject *return_value = NULL;
72 int binary_mode = 0;
73
74 if (!PyArg_ParseTuple(args, "|p:peer_certificate",
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030075 &binary_mode)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +030076 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030077 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +030078 return_value = _ssl__SSLSocket_peer_certificate_impl(self, binary_mode);
79
80exit:
81 return return_value;
82}
83
84PyDoc_STRVAR(_ssl__SSLSocket_shared_ciphers__doc__,
85"shared_ciphers($self, /)\n"
86"--\n"
87"\n");
88
89#define _SSL__SSLSOCKET_SHARED_CIPHERS_METHODDEF \
90 {"shared_ciphers", (PyCFunction)_ssl__SSLSocket_shared_ciphers, METH_NOARGS, _ssl__SSLSocket_shared_ciphers__doc__},
91
92static PyObject *
93_ssl__SSLSocket_shared_ciphers_impl(PySSLSocket *self);
94
95static PyObject *
96_ssl__SSLSocket_shared_ciphers(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
97{
98 return _ssl__SSLSocket_shared_ciphers_impl(self);
99}
100
101PyDoc_STRVAR(_ssl__SSLSocket_cipher__doc__,
102"cipher($self, /)\n"
103"--\n"
104"\n");
105
106#define _SSL__SSLSOCKET_CIPHER_METHODDEF \
107 {"cipher", (PyCFunction)_ssl__SSLSocket_cipher, METH_NOARGS, _ssl__SSLSocket_cipher__doc__},
108
109static PyObject *
110_ssl__SSLSocket_cipher_impl(PySSLSocket *self);
111
112static PyObject *
113_ssl__SSLSocket_cipher(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
114{
115 return _ssl__SSLSocket_cipher_impl(self);
116}
117
118PyDoc_STRVAR(_ssl__SSLSocket_version__doc__,
119"version($self, /)\n"
120"--\n"
121"\n");
122
123#define _SSL__SSLSOCKET_VERSION_METHODDEF \
124 {"version", (PyCFunction)_ssl__SSLSocket_version, METH_NOARGS, _ssl__SSLSocket_version__doc__},
125
126static PyObject *
127_ssl__SSLSocket_version_impl(PySSLSocket *self);
128
129static PyObject *
130_ssl__SSLSocket_version(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
131{
132 return _ssl__SSLSocket_version_impl(self);
133}
134
135#if defined(OPENSSL_NPN_NEGOTIATED)
136
137PyDoc_STRVAR(_ssl__SSLSocket_selected_npn_protocol__doc__,
138"selected_npn_protocol($self, /)\n"
139"--\n"
140"\n");
141
142#define _SSL__SSLSOCKET_SELECTED_NPN_PROTOCOL_METHODDEF \
143 {"selected_npn_protocol", (PyCFunction)_ssl__SSLSocket_selected_npn_protocol, METH_NOARGS, _ssl__SSLSocket_selected_npn_protocol__doc__},
144
145static PyObject *
146_ssl__SSLSocket_selected_npn_protocol_impl(PySSLSocket *self);
147
148static PyObject *
149_ssl__SSLSocket_selected_npn_protocol(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
150{
151 return _ssl__SSLSocket_selected_npn_protocol_impl(self);
152}
153
154#endif /* defined(OPENSSL_NPN_NEGOTIATED) */
155
156#if defined(HAVE_ALPN)
157
158PyDoc_STRVAR(_ssl__SSLSocket_selected_alpn_protocol__doc__,
159"selected_alpn_protocol($self, /)\n"
160"--\n"
161"\n");
162
163#define _SSL__SSLSOCKET_SELECTED_ALPN_PROTOCOL_METHODDEF \
164 {"selected_alpn_protocol", (PyCFunction)_ssl__SSLSocket_selected_alpn_protocol, METH_NOARGS, _ssl__SSLSocket_selected_alpn_protocol__doc__},
165
166static PyObject *
167_ssl__SSLSocket_selected_alpn_protocol_impl(PySSLSocket *self);
168
169static PyObject *
170_ssl__SSLSocket_selected_alpn_protocol(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
171{
172 return _ssl__SSLSocket_selected_alpn_protocol_impl(self);
173}
174
175#endif /* defined(HAVE_ALPN) */
176
177PyDoc_STRVAR(_ssl__SSLSocket_compression__doc__,
178"compression($self, /)\n"
179"--\n"
180"\n");
181
182#define _SSL__SSLSOCKET_COMPRESSION_METHODDEF \
183 {"compression", (PyCFunction)_ssl__SSLSocket_compression, METH_NOARGS, _ssl__SSLSocket_compression__doc__},
184
185static PyObject *
186_ssl__SSLSocket_compression_impl(PySSLSocket *self);
187
188static PyObject *
189_ssl__SSLSocket_compression(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
190{
191 return _ssl__SSLSocket_compression_impl(self);
192}
193
194PyDoc_STRVAR(_ssl__SSLSocket_write__doc__,
195"write($self, b, /)\n"
196"--\n"
197"\n"
198"Writes the bytes-like object b into the SSL object.\n"
199"\n"
200"Returns the number of bytes written.");
201
202#define _SSL__SSLSOCKET_WRITE_METHODDEF \
203 {"write", (PyCFunction)_ssl__SSLSocket_write, METH_O, _ssl__SSLSocket_write__doc__},
204
205static PyObject *
206_ssl__SSLSocket_write_impl(PySSLSocket *self, Py_buffer *b);
207
208static PyObject *
209_ssl__SSLSocket_write(PySSLSocket *self, PyObject *arg)
210{
211 PyObject *return_value = NULL;
212 Py_buffer b = {NULL, NULL};
213
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300214 if (!PyArg_Parse(arg, "y*:write", &b)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300215 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300216 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300217 return_value = _ssl__SSLSocket_write_impl(self, &b);
218
219exit:
220 /* Cleanup for b */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300221 if (b.obj) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300222 PyBuffer_Release(&b);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300223 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300224
225 return return_value;
226}
227
228PyDoc_STRVAR(_ssl__SSLSocket_pending__doc__,
229"pending($self, /)\n"
230"--\n"
231"\n"
232"Returns the number of already decrypted bytes available for read, pending on the connection.");
233
234#define _SSL__SSLSOCKET_PENDING_METHODDEF \
235 {"pending", (PyCFunction)_ssl__SSLSocket_pending, METH_NOARGS, _ssl__SSLSocket_pending__doc__},
236
237static PyObject *
238_ssl__SSLSocket_pending_impl(PySSLSocket *self);
239
240static PyObject *
241_ssl__SSLSocket_pending(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
242{
243 return _ssl__SSLSocket_pending_impl(self);
244}
245
246PyDoc_STRVAR(_ssl__SSLSocket_read__doc__,
247"read(size, [buffer])\n"
248"Read up to size bytes from the SSL socket.");
249
250#define _SSL__SSLSOCKET_READ_METHODDEF \
251 {"read", (PyCFunction)_ssl__SSLSocket_read, METH_VARARGS, _ssl__SSLSocket_read__doc__},
252
253static PyObject *
254_ssl__SSLSocket_read_impl(PySSLSocket *self, int len, int group_right_1,
255 Py_buffer *buffer);
256
257static PyObject *
258_ssl__SSLSocket_read(PySSLSocket *self, PyObject *args)
259{
260 PyObject *return_value = NULL;
261 int len;
262 int group_right_1 = 0;
263 Py_buffer buffer = {NULL, NULL};
264
265 switch (PyTuple_GET_SIZE(args)) {
266 case 1:
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300267 if (!PyArg_ParseTuple(args, "i:read", &len)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300268 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300269 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300270 break;
271 case 2:
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300272 if (!PyArg_ParseTuple(args, "iw*:read", &len, &buffer)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300273 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300274 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300275 group_right_1 = 1;
276 break;
277 default:
278 PyErr_SetString(PyExc_TypeError, "_ssl._SSLSocket.read requires 1 to 2 arguments");
279 goto exit;
280 }
281 return_value = _ssl__SSLSocket_read_impl(self, len, group_right_1, &buffer);
282
283exit:
284 /* Cleanup for buffer */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300285 if (buffer.obj) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300286 PyBuffer_Release(&buffer);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300287 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300288
289 return return_value;
290}
291
292PyDoc_STRVAR(_ssl__SSLSocket_shutdown__doc__,
293"shutdown($self, /)\n"
294"--\n"
295"\n"
296"Does the SSL shutdown handshake with the remote end.\n"
297"\n"
298"Returns the underlying socket object.");
299
300#define _SSL__SSLSOCKET_SHUTDOWN_METHODDEF \
301 {"shutdown", (PyCFunction)_ssl__SSLSocket_shutdown, METH_NOARGS, _ssl__SSLSocket_shutdown__doc__},
302
303static PyObject *
304_ssl__SSLSocket_shutdown_impl(PySSLSocket *self);
305
306static PyObject *
307_ssl__SSLSocket_shutdown(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
308{
309 return _ssl__SSLSocket_shutdown_impl(self);
310}
311
312PyDoc_STRVAR(_ssl__SSLSocket_tls_unique_cb__doc__,
313"tls_unique_cb($self, /)\n"
314"--\n"
315"\n"
316"Returns the \'tls-unique\' channel binding data, as defined by RFC 5929.\n"
317"\n"
318"If the TLS handshake is not yet complete, None is returned.");
319
320#define _SSL__SSLSOCKET_TLS_UNIQUE_CB_METHODDEF \
321 {"tls_unique_cb", (PyCFunction)_ssl__SSLSocket_tls_unique_cb, METH_NOARGS, _ssl__SSLSocket_tls_unique_cb__doc__},
322
323static PyObject *
324_ssl__SSLSocket_tls_unique_cb_impl(PySSLSocket *self);
325
326static PyObject *
327_ssl__SSLSocket_tls_unique_cb(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
328{
329 return _ssl__SSLSocket_tls_unique_cb_impl(self);
330}
331
332static PyObject *
333_ssl__SSLContext_impl(PyTypeObject *type, int proto_version);
334
335static PyObject *
336_ssl__SSLContext(PyTypeObject *type, PyObject *args, PyObject *kwargs)
337{
338 PyObject *return_value = NULL;
339 int proto_version;
340
341 if ((type == &PySSLContext_Type) &&
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300342 !_PyArg_NoKeywords("_SSLContext", kwargs)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300343 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300344 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300345 if (!PyArg_ParseTuple(args, "i:_SSLContext",
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300346 &proto_version)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300347 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300348 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300349 return_value = _ssl__SSLContext_impl(type, proto_version);
350
351exit:
352 return return_value;
353}
354
355PyDoc_STRVAR(_ssl__SSLContext_set_ciphers__doc__,
356"set_ciphers($self, cipherlist, /)\n"
357"--\n"
358"\n");
359
360#define _SSL__SSLCONTEXT_SET_CIPHERS_METHODDEF \
361 {"set_ciphers", (PyCFunction)_ssl__SSLContext_set_ciphers, METH_O, _ssl__SSLContext_set_ciphers__doc__},
362
363static PyObject *
364_ssl__SSLContext_set_ciphers_impl(PySSLContext *self, const char *cipherlist);
365
366static PyObject *
367_ssl__SSLContext_set_ciphers(PySSLContext *self, PyObject *arg)
368{
369 PyObject *return_value = NULL;
370 const char *cipherlist;
371
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300372 if (!PyArg_Parse(arg, "s:set_ciphers", &cipherlist)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300373 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300374 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300375 return_value = _ssl__SSLContext_set_ciphers_impl(self, cipherlist);
376
377exit:
378 return return_value;
379}
380
Christian Heimes25bfcd52016-09-06 00:04:45 +0200381#if (OPENSSL_VERSION_NUMBER >= 0x10002000UL)
382
383PyDoc_STRVAR(_ssl__SSLContext_get_ciphers__doc__,
384"get_ciphers($self, /)\n"
385"--\n"
386"\n");
387
388#define _SSL__SSLCONTEXT_GET_CIPHERS_METHODDEF \
389 {"get_ciphers", (PyCFunction)_ssl__SSLContext_get_ciphers, METH_NOARGS, _ssl__SSLContext_get_ciphers__doc__},
390
391static PyObject *
392_ssl__SSLContext_get_ciphers_impl(PySSLContext *self);
393
394static PyObject *
395_ssl__SSLContext_get_ciphers(PySSLContext *self, PyObject *Py_UNUSED(ignored))
396{
397 return _ssl__SSLContext_get_ciphers_impl(self);
398}
399
400#endif /* (OPENSSL_VERSION_NUMBER >= 0x10002000UL) */
401
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300402PyDoc_STRVAR(_ssl__SSLContext__set_npn_protocols__doc__,
403"_set_npn_protocols($self, protos, /)\n"
404"--\n"
405"\n");
406
407#define _SSL__SSLCONTEXT__SET_NPN_PROTOCOLS_METHODDEF \
408 {"_set_npn_protocols", (PyCFunction)_ssl__SSLContext__set_npn_protocols, METH_O, _ssl__SSLContext__set_npn_protocols__doc__},
409
410static PyObject *
411_ssl__SSLContext__set_npn_protocols_impl(PySSLContext *self,
412 Py_buffer *protos);
413
414static PyObject *
415_ssl__SSLContext__set_npn_protocols(PySSLContext *self, PyObject *arg)
416{
417 PyObject *return_value = NULL;
418 Py_buffer protos = {NULL, NULL};
419
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300420 if (!PyArg_Parse(arg, "y*:_set_npn_protocols", &protos)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300421 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300422 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300423 return_value = _ssl__SSLContext__set_npn_protocols_impl(self, &protos);
424
425exit:
426 /* Cleanup for protos */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300427 if (protos.obj) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300428 PyBuffer_Release(&protos);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300429 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300430
431 return return_value;
432}
433
434PyDoc_STRVAR(_ssl__SSLContext__set_alpn_protocols__doc__,
435"_set_alpn_protocols($self, protos, /)\n"
436"--\n"
437"\n");
438
439#define _SSL__SSLCONTEXT__SET_ALPN_PROTOCOLS_METHODDEF \
440 {"_set_alpn_protocols", (PyCFunction)_ssl__SSLContext__set_alpn_protocols, METH_O, _ssl__SSLContext__set_alpn_protocols__doc__},
441
442static PyObject *
443_ssl__SSLContext__set_alpn_protocols_impl(PySSLContext *self,
444 Py_buffer *protos);
445
446static PyObject *
447_ssl__SSLContext__set_alpn_protocols(PySSLContext *self, PyObject *arg)
448{
449 PyObject *return_value = NULL;
450 Py_buffer protos = {NULL, NULL};
451
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300452 if (!PyArg_Parse(arg, "y*:_set_alpn_protocols", &protos)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300453 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300454 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300455 return_value = _ssl__SSLContext__set_alpn_protocols_impl(self, &protos);
456
457exit:
458 /* Cleanup for protos */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300459 if (protos.obj) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300460 PyBuffer_Release(&protos);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300461 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300462
463 return return_value;
464}
465
466PyDoc_STRVAR(_ssl__SSLContext_load_cert_chain__doc__,
467"load_cert_chain($self, /, certfile, keyfile=None, password=None)\n"
468"--\n"
469"\n");
470
471#define _SSL__SSLCONTEXT_LOAD_CERT_CHAIN_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700472 {"load_cert_chain", (PyCFunction)_ssl__SSLContext_load_cert_chain, METH_FASTCALL, _ssl__SSLContext_load_cert_chain__doc__},
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300473
474static PyObject *
475_ssl__SSLContext_load_cert_chain_impl(PySSLContext *self, PyObject *certfile,
476 PyObject *keyfile, PyObject *password);
477
478static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700479_ssl__SSLContext_load_cert_chain(PySSLContext *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300480{
481 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300482 static const char * const _keywords[] = {"certfile", "keyfile", "password", NULL};
483 static _PyArg_Parser _parser = {"O|OO:load_cert_chain", _keywords, 0};
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300484 PyObject *certfile;
485 PyObject *keyfile = NULL;
486 PyObject *password = NULL;
487
Victor Stinner37e4ef72016-09-09 20:00:13 -0700488 if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300489 &certfile, &keyfile, &password)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300490 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300491 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300492 return_value = _ssl__SSLContext_load_cert_chain_impl(self, certfile, keyfile, password);
493
494exit:
495 return return_value;
496}
497
498PyDoc_STRVAR(_ssl__SSLContext_load_verify_locations__doc__,
499"load_verify_locations($self, /, cafile=None, capath=None, cadata=None)\n"
500"--\n"
501"\n");
502
503#define _SSL__SSLCONTEXT_LOAD_VERIFY_LOCATIONS_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700504 {"load_verify_locations", (PyCFunction)_ssl__SSLContext_load_verify_locations, METH_FASTCALL, _ssl__SSLContext_load_verify_locations__doc__},
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300505
506static PyObject *
507_ssl__SSLContext_load_verify_locations_impl(PySSLContext *self,
508 PyObject *cafile,
509 PyObject *capath,
510 PyObject *cadata);
511
512static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700513_ssl__SSLContext_load_verify_locations(PySSLContext *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300514{
515 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300516 static const char * const _keywords[] = {"cafile", "capath", "cadata", NULL};
517 static _PyArg_Parser _parser = {"|OOO:load_verify_locations", _keywords, 0};
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300518 PyObject *cafile = NULL;
519 PyObject *capath = NULL;
520 PyObject *cadata = NULL;
521
Victor Stinner37e4ef72016-09-09 20:00:13 -0700522 if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300523 &cafile, &capath, &cadata)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300524 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300525 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300526 return_value = _ssl__SSLContext_load_verify_locations_impl(self, cafile, capath, cadata);
527
528exit:
529 return return_value;
530}
531
532PyDoc_STRVAR(_ssl__SSLContext_load_dh_params__doc__,
533"load_dh_params($self, path, /)\n"
534"--\n"
535"\n");
536
537#define _SSL__SSLCONTEXT_LOAD_DH_PARAMS_METHODDEF \
538 {"load_dh_params", (PyCFunction)_ssl__SSLContext_load_dh_params, METH_O, _ssl__SSLContext_load_dh_params__doc__},
539
540PyDoc_STRVAR(_ssl__SSLContext__wrap_socket__doc__,
541"_wrap_socket($self, /, sock, server_side, server_hostname=None)\n"
542"--\n"
543"\n");
544
545#define _SSL__SSLCONTEXT__WRAP_SOCKET_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700546 {"_wrap_socket", (PyCFunction)_ssl__SSLContext__wrap_socket, METH_FASTCALL, _ssl__SSLContext__wrap_socket__doc__},
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300547
548static PyObject *
549_ssl__SSLContext__wrap_socket_impl(PySSLContext *self, PyObject *sock,
550 int server_side, PyObject *hostname_obj);
551
552static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700553_ssl__SSLContext__wrap_socket(PySSLContext *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300554{
555 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300556 static const char * const _keywords[] = {"sock", "server_side", "server_hostname", NULL};
557 static _PyArg_Parser _parser = {"O!i|O:_wrap_socket", _keywords, 0};
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300558 PyObject *sock;
559 int server_side;
560 PyObject *hostname_obj = Py_None;
561
Victor Stinner37e4ef72016-09-09 20:00:13 -0700562 if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300563 PySocketModule.Sock_Type, &sock, &server_side, &hostname_obj)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300564 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300565 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300566 return_value = _ssl__SSLContext__wrap_socket_impl(self, sock, server_side, hostname_obj);
567
568exit:
569 return return_value;
570}
571
572PyDoc_STRVAR(_ssl__SSLContext__wrap_bio__doc__,
573"_wrap_bio($self, /, incoming, outgoing, server_side,\n"
574" server_hostname=None)\n"
575"--\n"
576"\n");
577
578#define _SSL__SSLCONTEXT__WRAP_BIO_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700579 {"_wrap_bio", (PyCFunction)_ssl__SSLContext__wrap_bio, METH_FASTCALL, _ssl__SSLContext__wrap_bio__doc__},
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300580
581static PyObject *
582_ssl__SSLContext__wrap_bio_impl(PySSLContext *self, PySSLMemoryBIO *incoming,
583 PySSLMemoryBIO *outgoing, int server_side,
584 PyObject *hostname_obj);
585
586static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700587_ssl__SSLContext__wrap_bio(PySSLContext *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300588{
589 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300590 static const char * const _keywords[] = {"incoming", "outgoing", "server_side", "server_hostname", NULL};
591 static _PyArg_Parser _parser = {"O!O!i|O:_wrap_bio", _keywords, 0};
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300592 PySSLMemoryBIO *incoming;
593 PySSLMemoryBIO *outgoing;
594 int server_side;
595 PyObject *hostname_obj = Py_None;
596
Victor Stinner37e4ef72016-09-09 20:00:13 -0700597 if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300598 &PySSLMemoryBIO_Type, &incoming, &PySSLMemoryBIO_Type, &outgoing, &server_side, &hostname_obj)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300599 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300600 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300601 return_value = _ssl__SSLContext__wrap_bio_impl(self, incoming, outgoing, server_side, hostname_obj);
602
603exit:
604 return return_value;
605}
606
607PyDoc_STRVAR(_ssl__SSLContext_session_stats__doc__,
608"session_stats($self, /)\n"
609"--\n"
610"\n");
611
612#define _SSL__SSLCONTEXT_SESSION_STATS_METHODDEF \
613 {"session_stats", (PyCFunction)_ssl__SSLContext_session_stats, METH_NOARGS, _ssl__SSLContext_session_stats__doc__},
614
615static PyObject *
616_ssl__SSLContext_session_stats_impl(PySSLContext *self);
617
618static PyObject *
619_ssl__SSLContext_session_stats(PySSLContext *self, PyObject *Py_UNUSED(ignored))
620{
621 return _ssl__SSLContext_session_stats_impl(self);
622}
623
624PyDoc_STRVAR(_ssl__SSLContext_set_default_verify_paths__doc__,
625"set_default_verify_paths($self, /)\n"
626"--\n"
627"\n");
628
629#define _SSL__SSLCONTEXT_SET_DEFAULT_VERIFY_PATHS_METHODDEF \
630 {"set_default_verify_paths", (PyCFunction)_ssl__SSLContext_set_default_verify_paths, METH_NOARGS, _ssl__SSLContext_set_default_verify_paths__doc__},
631
632static PyObject *
633_ssl__SSLContext_set_default_verify_paths_impl(PySSLContext *self);
634
635static PyObject *
636_ssl__SSLContext_set_default_verify_paths(PySSLContext *self, PyObject *Py_UNUSED(ignored))
637{
638 return _ssl__SSLContext_set_default_verify_paths_impl(self);
639}
640
641#if !defined(OPENSSL_NO_ECDH)
642
643PyDoc_STRVAR(_ssl__SSLContext_set_ecdh_curve__doc__,
644"set_ecdh_curve($self, name, /)\n"
645"--\n"
646"\n");
647
648#define _SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF \
649 {"set_ecdh_curve", (PyCFunction)_ssl__SSLContext_set_ecdh_curve, METH_O, _ssl__SSLContext_set_ecdh_curve__doc__},
650
651#endif /* !defined(OPENSSL_NO_ECDH) */
652
653PyDoc_STRVAR(_ssl__SSLContext_set_servername_callback__doc__,
654"set_servername_callback($self, method, /)\n"
655"--\n"
656"\n"
657"Set a callback that will be called when a server name is provided by the SSL/TLS client in the SNI extension.\n"
658"\n"
659"If the argument is None then the callback is disabled. The method is called\n"
660"with the SSLSocket, the server name as a string, and the SSLContext object.\n"
661"See RFC 6066 for details of the SNI extension.");
662
663#define _SSL__SSLCONTEXT_SET_SERVERNAME_CALLBACK_METHODDEF \
664 {"set_servername_callback", (PyCFunction)_ssl__SSLContext_set_servername_callback, METH_O, _ssl__SSLContext_set_servername_callback__doc__},
665
666PyDoc_STRVAR(_ssl__SSLContext_cert_store_stats__doc__,
667"cert_store_stats($self, /)\n"
668"--\n"
669"\n"
670"Returns quantities of loaded X.509 certificates.\n"
671"\n"
672"X.509 certificates with a CA extension and certificate revocation lists\n"
673"inside the context\'s cert store.\n"
674"\n"
675"NOTE: Certificates in a capath directory aren\'t loaded unless they have\n"
676"been used at least once.");
677
678#define _SSL__SSLCONTEXT_CERT_STORE_STATS_METHODDEF \
679 {"cert_store_stats", (PyCFunction)_ssl__SSLContext_cert_store_stats, METH_NOARGS, _ssl__SSLContext_cert_store_stats__doc__},
680
681static PyObject *
682_ssl__SSLContext_cert_store_stats_impl(PySSLContext *self);
683
684static PyObject *
685_ssl__SSLContext_cert_store_stats(PySSLContext *self, PyObject *Py_UNUSED(ignored))
686{
687 return _ssl__SSLContext_cert_store_stats_impl(self);
688}
689
690PyDoc_STRVAR(_ssl__SSLContext_get_ca_certs__doc__,
691"get_ca_certs($self, /, binary_form=False)\n"
692"--\n"
693"\n"
694"Returns a list of dicts with information of loaded CA certs.\n"
695"\n"
696"If the optional argument is True, returns a DER-encoded copy of the CA\n"
697"certificate.\n"
698"\n"
699"NOTE: Certificates in a capath directory aren\'t loaded unless they have\n"
700"been used at least once.");
701
702#define _SSL__SSLCONTEXT_GET_CA_CERTS_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700703 {"get_ca_certs", (PyCFunction)_ssl__SSLContext_get_ca_certs, METH_FASTCALL, _ssl__SSLContext_get_ca_certs__doc__},
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300704
705static PyObject *
706_ssl__SSLContext_get_ca_certs_impl(PySSLContext *self, int binary_form);
707
708static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700709_ssl__SSLContext_get_ca_certs(PySSLContext *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300710{
711 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300712 static const char * const _keywords[] = {"binary_form", NULL};
713 static _PyArg_Parser _parser = {"|p:get_ca_certs", _keywords, 0};
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300714 int binary_form = 0;
715
Victor Stinner37e4ef72016-09-09 20:00:13 -0700716 if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300717 &binary_form)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300718 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300719 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300720 return_value = _ssl__SSLContext_get_ca_certs_impl(self, binary_form);
721
722exit:
723 return return_value;
724}
725
726static PyObject *
727_ssl_MemoryBIO_impl(PyTypeObject *type);
728
729static PyObject *
730_ssl_MemoryBIO(PyTypeObject *type, PyObject *args, PyObject *kwargs)
731{
732 PyObject *return_value = NULL;
733
734 if ((type == &PySSLMemoryBIO_Type) &&
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300735 !_PyArg_NoPositional("MemoryBIO", args)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300736 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300737 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300738 if ((type == &PySSLMemoryBIO_Type) &&
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300739 !_PyArg_NoKeywords("MemoryBIO", kwargs)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300740 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300741 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300742 return_value = _ssl_MemoryBIO_impl(type);
743
744exit:
745 return return_value;
746}
747
748PyDoc_STRVAR(_ssl_MemoryBIO_read__doc__,
749"read($self, size=-1, /)\n"
750"--\n"
751"\n"
752"Read up to size bytes from the memory BIO.\n"
753"\n"
754"If size is not specified, read the entire buffer.\n"
755"If the return value is an empty bytes instance, this means either\n"
756"EOF or that no data is available. Use the \"eof\" property to\n"
757"distinguish between the two.");
758
759#define _SSL_MEMORYBIO_READ_METHODDEF \
760 {"read", (PyCFunction)_ssl_MemoryBIO_read, METH_VARARGS, _ssl_MemoryBIO_read__doc__},
761
762static PyObject *
763_ssl_MemoryBIO_read_impl(PySSLMemoryBIO *self, int len);
764
765static PyObject *
766_ssl_MemoryBIO_read(PySSLMemoryBIO *self, PyObject *args)
767{
768 PyObject *return_value = NULL;
769 int len = -1;
770
771 if (!PyArg_ParseTuple(args, "|i:read",
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300772 &len)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300773 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300774 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300775 return_value = _ssl_MemoryBIO_read_impl(self, len);
776
777exit:
778 return return_value;
779}
780
781PyDoc_STRVAR(_ssl_MemoryBIO_write__doc__,
782"write($self, b, /)\n"
783"--\n"
784"\n"
785"Writes the bytes b into the memory BIO.\n"
786"\n"
787"Returns the number of bytes written.");
788
789#define _SSL_MEMORYBIO_WRITE_METHODDEF \
790 {"write", (PyCFunction)_ssl_MemoryBIO_write, METH_O, _ssl_MemoryBIO_write__doc__},
791
792static PyObject *
793_ssl_MemoryBIO_write_impl(PySSLMemoryBIO *self, Py_buffer *b);
794
795static PyObject *
796_ssl_MemoryBIO_write(PySSLMemoryBIO *self, PyObject *arg)
797{
798 PyObject *return_value = NULL;
799 Py_buffer b = {NULL, NULL};
800
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300801 if (!PyArg_Parse(arg, "y*:write", &b)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300802 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300803 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300804 return_value = _ssl_MemoryBIO_write_impl(self, &b);
805
806exit:
807 /* Cleanup for b */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300808 if (b.obj) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300809 PyBuffer_Release(&b);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300810 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300811
812 return return_value;
813}
814
815PyDoc_STRVAR(_ssl_MemoryBIO_write_eof__doc__,
816"write_eof($self, /)\n"
817"--\n"
818"\n"
819"Write an EOF marker to the memory BIO.\n"
820"\n"
821"When all data has been read, the \"eof\" property will be True.");
822
823#define _SSL_MEMORYBIO_WRITE_EOF_METHODDEF \
824 {"write_eof", (PyCFunction)_ssl_MemoryBIO_write_eof, METH_NOARGS, _ssl_MemoryBIO_write_eof__doc__},
825
826static PyObject *
827_ssl_MemoryBIO_write_eof_impl(PySSLMemoryBIO *self);
828
829static PyObject *
830_ssl_MemoryBIO_write_eof(PySSLMemoryBIO *self, PyObject *Py_UNUSED(ignored))
831{
832 return _ssl_MemoryBIO_write_eof_impl(self);
833}
834
835PyDoc_STRVAR(_ssl_RAND_add__doc__,
836"RAND_add($module, string, entropy, /)\n"
837"--\n"
838"\n"
839"Mix string into the OpenSSL PRNG state.\n"
840"\n"
841"entropy (a float) is a lower bound on the entropy contained in\n"
842"string. See RFC 1750.");
843
844#define _SSL_RAND_ADD_METHODDEF \
845 {"RAND_add", (PyCFunction)_ssl_RAND_add, METH_VARARGS, _ssl_RAND_add__doc__},
846
847static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300848_ssl_RAND_add_impl(PyObject *module, Py_buffer *view, double entropy);
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300849
850static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300851_ssl_RAND_add(PyObject *module, PyObject *args)
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300852{
853 PyObject *return_value = NULL;
854 Py_buffer view = {NULL, NULL};
855 double entropy;
856
857 if (!PyArg_ParseTuple(args, "s*d:RAND_add",
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300858 &view, &entropy)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300859 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300860 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300861 return_value = _ssl_RAND_add_impl(module, &view, entropy);
862
863exit:
864 /* Cleanup for view */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300865 if (view.obj) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300866 PyBuffer_Release(&view);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300867 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300868
869 return return_value;
870}
871
872PyDoc_STRVAR(_ssl_RAND_bytes__doc__,
873"RAND_bytes($module, n, /)\n"
874"--\n"
875"\n"
876"Generate n cryptographically strong pseudo-random bytes.");
877
878#define _SSL_RAND_BYTES_METHODDEF \
879 {"RAND_bytes", (PyCFunction)_ssl_RAND_bytes, METH_O, _ssl_RAND_bytes__doc__},
880
881static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300882_ssl_RAND_bytes_impl(PyObject *module, int n);
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300883
884static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300885_ssl_RAND_bytes(PyObject *module, PyObject *arg)
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300886{
887 PyObject *return_value = NULL;
888 int n;
889
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300890 if (!PyArg_Parse(arg, "i:RAND_bytes", &n)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300891 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300892 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300893 return_value = _ssl_RAND_bytes_impl(module, n);
894
895exit:
896 return return_value;
897}
898
899PyDoc_STRVAR(_ssl_RAND_pseudo_bytes__doc__,
900"RAND_pseudo_bytes($module, n, /)\n"
901"--\n"
902"\n"
903"Generate n pseudo-random bytes.\n"
904"\n"
905"Return a pair (bytes, is_cryptographic). is_cryptographic is True\n"
906"if the bytes generated are cryptographically strong.");
907
908#define _SSL_RAND_PSEUDO_BYTES_METHODDEF \
909 {"RAND_pseudo_bytes", (PyCFunction)_ssl_RAND_pseudo_bytes, METH_O, _ssl_RAND_pseudo_bytes__doc__},
910
911static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300912_ssl_RAND_pseudo_bytes_impl(PyObject *module, int n);
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300913
914static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300915_ssl_RAND_pseudo_bytes(PyObject *module, PyObject *arg)
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300916{
917 PyObject *return_value = NULL;
918 int n;
919
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300920 if (!PyArg_Parse(arg, "i:RAND_pseudo_bytes", &n)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300921 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300922 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300923 return_value = _ssl_RAND_pseudo_bytes_impl(module, n);
924
925exit:
926 return return_value;
927}
928
929PyDoc_STRVAR(_ssl_RAND_status__doc__,
930"RAND_status($module, /)\n"
931"--\n"
932"\n"
933"Returns 1 if the OpenSSL PRNG has been seeded with enough data and 0 if not.\n"
934"\n"
935"It is necessary to seed the PRNG with RAND_add() on some platforms before\n"
936"using the ssl() function.");
937
938#define _SSL_RAND_STATUS_METHODDEF \
939 {"RAND_status", (PyCFunction)_ssl_RAND_status, METH_NOARGS, _ssl_RAND_status__doc__},
940
941static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300942_ssl_RAND_status_impl(PyObject *module);
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300943
944static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300945_ssl_RAND_status(PyObject *module, PyObject *Py_UNUSED(ignored))
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300946{
947 return _ssl_RAND_status_impl(module);
948}
949
Benjamin Petersonb8a2f512016-07-06 23:55:15 -0700950#if !defined(OPENSSL_NO_EGD)
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300951
952PyDoc_STRVAR(_ssl_RAND_egd__doc__,
953"RAND_egd($module, path, /)\n"
954"--\n"
955"\n"
956"Queries the entropy gather daemon (EGD) on the socket named by \'path\'.\n"
957"\n"
958"Returns number of bytes read. Raises SSLError if connection to EGD\n"
959"fails or if it does not provide enough data to seed PRNG.");
960
961#define _SSL_RAND_EGD_METHODDEF \
962 {"RAND_egd", (PyCFunction)_ssl_RAND_egd, METH_O, _ssl_RAND_egd__doc__},
963
964static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300965_ssl_RAND_egd_impl(PyObject *module, PyObject *path);
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300966
967static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300968_ssl_RAND_egd(PyObject *module, PyObject *arg)
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300969{
970 PyObject *return_value = NULL;
971 PyObject *path;
972
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300973 if (!PyArg_Parse(arg, "O&:RAND_egd", PyUnicode_FSConverter, &path)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300974 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300975 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300976 return_value = _ssl_RAND_egd_impl(module, path);
977
978exit:
979 return return_value;
980}
981
Benjamin Petersonb8a2f512016-07-06 23:55:15 -0700982#endif /* !defined(OPENSSL_NO_EGD) */
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300983
984PyDoc_STRVAR(_ssl_get_default_verify_paths__doc__,
985"get_default_verify_paths($module, /)\n"
986"--\n"
987"\n"
988"Return search paths and environment vars that are used by SSLContext\'s set_default_verify_paths() to load default CAs.\n"
989"\n"
990"The values are \'cert_file_env\', \'cert_file\', \'cert_dir_env\', \'cert_dir\'.");
991
992#define _SSL_GET_DEFAULT_VERIFY_PATHS_METHODDEF \
993 {"get_default_verify_paths", (PyCFunction)_ssl_get_default_verify_paths, METH_NOARGS, _ssl_get_default_verify_paths__doc__},
994
995static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300996_ssl_get_default_verify_paths_impl(PyObject *module);
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +0300997
998static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300999_ssl_get_default_verify_paths(PyObject *module, PyObject *Py_UNUSED(ignored))
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001000{
1001 return _ssl_get_default_verify_paths_impl(module);
1002}
1003
1004PyDoc_STRVAR(_ssl_txt2obj__doc__,
1005"txt2obj($module, /, txt, name=False)\n"
1006"--\n"
1007"\n"
1008"Lookup NID, short name, long name and OID of an ASN1_OBJECT.\n"
1009"\n"
1010"By default objects are looked up by OID. With name=True short and\n"
1011"long name are also matched.");
1012
1013#define _SSL_TXT2OBJ_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -07001014 {"txt2obj", (PyCFunction)_ssl_txt2obj, METH_FASTCALL, _ssl_txt2obj__doc__},
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001015
1016static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001017_ssl_txt2obj_impl(PyObject *module, const char *txt, int name);
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001018
1019static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -07001020_ssl_txt2obj(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001021{
1022 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001023 static const char * const _keywords[] = {"txt", "name", NULL};
1024 static _PyArg_Parser _parser = {"s|p:txt2obj", _keywords, 0};
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001025 const char *txt;
1026 int name = 0;
1027
Victor Stinner37e4ef72016-09-09 20:00:13 -07001028 if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +03001029 &txt, &name)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001030 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +03001031 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001032 return_value = _ssl_txt2obj_impl(module, txt, name);
1033
1034exit:
1035 return return_value;
1036}
1037
1038PyDoc_STRVAR(_ssl_nid2obj__doc__,
1039"nid2obj($module, nid, /)\n"
1040"--\n"
1041"\n"
1042"Lookup NID, short name, long name and OID of an ASN1_OBJECT by NID.");
1043
1044#define _SSL_NID2OBJ_METHODDEF \
1045 {"nid2obj", (PyCFunction)_ssl_nid2obj, METH_O, _ssl_nid2obj__doc__},
1046
1047static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001048_ssl_nid2obj_impl(PyObject *module, int nid);
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001049
1050static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001051_ssl_nid2obj(PyObject *module, PyObject *arg)
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001052{
1053 PyObject *return_value = NULL;
1054 int nid;
1055
Serhiy Storchaka5dee6552016-06-09 16:16:06 +03001056 if (!PyArg_Parse(arg, "i:nid2obj", &nid)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001057 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +03001058 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001059 return_value = _ssl_nid2obj_impl(module, nid);
1060
1061exit:
1062 return return_value;
1063}
1064
1065#if defined(_MSC_VER)
1066
1067PyDoc_STRVAR(_ssl_enum_certificates__doc__,
1068"enum_certificates($module, /, store_name)\n"
1069"--\n"
1070"\n"
1071"Retrieve certificates from Windows\' cert store.\n"
1072"\n"
1073"store_name may be one of \'CA\', \'ROOT\' or \'MY\'. The system may provide\n"
1074"more cert storages, too. The function returns a list of (bytes,\n"
1075"encoding_type, trust) tuples. The encoding_type flag can be interpreted\n"
1076"with X509_ASN_ENCODING or PKCS_7_ASN_ENCODING. The trust setting is either\n"
1077"a set of OIDs or the boolean True.");
1078
1079#define _SSL_ENUM_CERTIFICATES_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -07001080 {"enum_certificates", (PyCFunction)_ssl_enum_certificates, METH_FASTCALL, _ssl_enum_certificates__doc__},
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001081
1082static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001083_ssl_enum_certificates_impl(PyObject *module, const char *store_name);
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001084
1085static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -07001086_ssl_enum_certificates(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001087{
1088 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001089 static const char * const _keywords[] = {"store_name", NULL};
1090 static _PyArg_Parser _parser = {"s:enum_certificates", _keywords, 0};
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001091 const char *store_name;
1092
Victor Stinner37e4ef72016-09-09 20:00:13 -07001093 if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +03001094 &store_name)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001095 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +03001096 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001097 return_value = _ssl_enum_certificates_impl(module, store_name);
1098
1099exit:
1100 return return_value;
1101}
1102
1103#endif /* defined(_MSC_VER) */
1104
1105#if defined(_MSC_VER)
1106
1107PyDoc_STRVAR(_ssl_enum_crls__doc__,
1108"enum_crls($module, /, store_name)\n"
1109"--\n"
1110"\n"
1111"Retrieve CRLs from Windows\' cert store.\n"
1112"\n"
1113"store_name may be one of \'CA\', \'ROOT\' or \'MY\'. The system may provide\n"
1114"more cert storages, too. The function returns a list of (bytes,\n"
1115"encoding_type) tuples. The encoding_type flag can be interpreted with\n"
1116"X509_ASN_ENCODING or PKCS_7_ASN_ENCODING.");
1117
1118#define _SSL_ENUM_CRLS_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -07001119 {"enum_crls", (PyCFunction)_ssl_enum_crls, METH_FASTCALL, _ssl_enum_crls__doc__},
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001120
1121static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001122_ssl_enum_crls_impl(PyObject *module, const char *store_name);
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001123
1124static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -07001125_ssl_enum_crls(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001126{
1127 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001128 static const char * const _keywords[] = {"store_name", NULL};
1129 static _PyArg_Parser _parser = {"s:enum_crls", _keywords, 0};
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001130 const char *store_name;
1131
Victor Stinner37e4ef72016-09-09 20:00:13 -07001132 if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +03001133 &store_name)) {
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001134 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +03001135 }
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001136 return_value = _ssl_enum_crls_impl(module, store_name);
1137
1138exit:
1139 return return_value;
1140}
1141
1142#endif /* defined(_MSC_VER) */
1143
1144#ifndef _SSL__SSLSOCKET_SELECTED_NPN_PROTOCOL_METHODDEF
1145 #define _SSL__SSLSOCKET_SELECTED_NPN_PROTOCOL_METHODDEF
1146#endif /* !defined(_SSL__SSLSOCKET_SELECTED_NPN_PROTOCOL_METHODDEF) */
1147
1148#ifndef _SSL__SSLSOCKET_SELECTED_ALPN_PROTOCOL_METHODDEF
1149 #define _SSL__SSLSOCKET_SELECTED_ALPN_PROTOCOL_METHODDEF
1150#endif /* !defined(_SSL__SSLSOCKET_SELECTED_ALPN_PROTOCOL_METHODDEF) */
1151
Christian Heimes25bfcd52016-09-06 00:04:45 +02001152#ifndef _SSL__SSLCONTEXT_GET_CIPHERS_METHODDEF
1153 #define _SSL__SSLCONTEXT_GET_CIPHERS_METHODDEF
1154#endif /* !defined(_SSL__SSLCONTEXT_GET_CIPHERS_METHODDEF) */
1155
Serhiy Storchaka4b7b82f2015-05-03 16:14:08 +03001156#ifndef _SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF
1157 #define _SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF
1158#endif /* !defined(_SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF) */
1159
1160#ifndef _SSL_RAND_EGD_METHODDEF
1161 #define _SSL_RAND_EGD_METHODDEF
1162#endif /* !defined(_SSL_RAND_EGD_METHODDEF) */
1163
1164#ifndef _SSL_ENUM_CERTIFICATES_METHODDEF
1165 #define _SSL_ENUM_CERTIFICATES_METHODDEF
1166#endif /* !defined(_SSL_ENUM_CERTIFICATES_METHODDEF) */
1167
1168#ifndef _SSL_ENUM_CRLS_METHODDEF
1169 #define _SSL_ENUM_CRLS_METHODDEF
1170#endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */
Victor Stinner37e4ef72016-09-09 20:00:13 -07001171/*[clinic end generated code: output=a859b21fe68a6115 input=a9049054013a1b77]*/