1 /*[clinic input]
2 preserve
3 [clinic start generated code]*/
4
5 PyDoc_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
13 static PyObject *
14 _ssl__SSLSocket_do_handshake_impl(PySSLSocket *self);
15
16 static PyObject *
_ssl__SSLSocket_do_handshake(PySSLSocket * self,PyObject * Py_UNUSED (ignored))17 _ssl__SSLSocket_do_handshake(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
18 {
19 return _ssl__SSLSocket_do_handshake_impl(self);
20 }
21
22 PyDoc_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
30 static PyObject *
31 _ssl__test_decode_cert_impl(PyObject *module, PyObject *path);
32
33 static PyObject *
_ssl__test_decode_cert(PyObject * module,PyObject * arg)34 _ssl__test_decode_cert(PyObject *module, PyObject *arg)
35 {
36 PyObject *return_value = NULL;
37 PyObject *path;
38
39 if (!PyUnicode_FSConverter(arg, &path)) {
40 goto exit;
41 }
42 return_value = _ssl__test_decode_cert_impl(module, path);
43
44 exit:
45 return return_value;
46 }
47
48 PyDoc_STRVAR(_ssl__SSLSocket_getpeercert__doc__,
49 "getpeercert($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_GETPEERCERT_METHODDEF \
63 {"getpeercert", _PyCFunction_CAST(_ssl__SSLSocket_getpeercert), METH_FASTCALL, _ssl__SSLSocket_getpeercert__doc__},
64
65 static PyObject *
66 _ssl__SSLSocket_getpeercert_impl(PySSLSocket *self, int binary_mode);
67
68 static PyObject *
_ssl__SSLSocket_getpeercert(PySSLSocket * self,PyObject * const * args,Py_ssize_t nargs)69 _ssl__SSLSocket_getpeercert(PySSLSocket *self, PyObject *const *args, Py_ssize_t nargs)
70 {
71 PyObject *return_value = NULL;
72 int binary_mode = 0;
73
74 if (!_PyArg_CheckPositional("getpeercert", nargs, 0, 1)) {
75 goto exit;
76 }
77 if (nargs < 1) {
78 goto skip_optional;
79 }
80 binary_mode = PyObject_IsTrue(args[0]);
81 if (binary_mode < 0) {
82 goto exit;
83 }
84 skip_optional:
85 return_value = _ssl__SSLSocket_getpeercert_impl(self, binary_mode);
86
87 exit:
88 return return_value;
89 }
90
91 PyDoc_STRVAR(_ssl__SSLSocket_get_verified_chain__doc__,
92 "get_verified_chain($self, /)\n"
93 "--\n"
94 "\n");
95
96 #define _SSL__SSLSOCKET_GET_VERIFIED_CHAIN_METHODDEF \
97 {"get_verified_chain", (PyCFunction)_ssl__SSLSocket_get_verified_chain, METH_NOARGS, _ssl__SSLSocket_get_verified_chain__doc__},
98
99 static PyObject *
100 _ssl__SSLSocket_get_verified_chain_impl(PySSLSocket *self);
101
102 static PyObject *
_ssl__SSLSocket_get_verified_chain(PySSLSocket * self,PyObject * Py_UNUSED (ignored))103 _ssl__SSLSocket_get_verified_chain(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
104 {
105 return _ssl__SSLSocket_get_verified_chain_impl(self);
106 }
107
108 PyDoc_STRVAR(_ssl__SSLSocket_get_unverified_chain__doc__,
109 "get_unverified_chain($self, /)\n"
110 "--\n"
111 "\n");
112
113 #define _SSL__SSLSOCKET_GET_UNVERIFIED_CHAIN_METHODDEF \
114 {"get_unverified_chain", (PyCFunction)_ssl__SSLSocket_get_unverified_chain, METH_NOARGS, _ssl__SSLSocket_get_unverified_chain__doc__},
115
116 static PyObject *
117 _ssl__SSLSocket_get_unverified_chain_impl(PySSLSocket *self);
118
119 static PyObject *
_ssl__SSLSocket_get_unverified_chain(PySSLSocket * self,PyObject * Py_UNUSED (ignored))120 _ssl__SSLSocket_get_unverified_chain(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
121 {
122 return _ssl__SSLSocket_get_unverified_chain_impl(self);
123 }
124
125 PyDoc_STRVAR(_ssl__SSLSocket_shared_ciphers__doc__,
126 "shared_ciphers($self, /)\n"
127 "--\n"
128 "\n");
129
130 #define _SSL__SSLSOCKET_SHARED_CIPHERS_METHODDEF \
131 {"shared_ciphers", (PyCFunction)_ssl__SSLSocket_shared_ciphers, METH_NOARGS, _ssl__SSLSocket_shared_ciphers__doc__},
132
133 static PyObject *
134 _ssl__SSLSocket_shared_ciphers_impl(PySSLSocket *self);
135
136 static PyObject *
_ssl__SSLSocket_shared_ciphers(PySSLSocket * self,PyObject * Py_UNUSED (ignored))137 _ssl__SSLSocket_shared_ciphers(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
138 {
139 return _ssl__SSLSocket_shared_ciphers_impl(self);
140 }
141
142 PyDoc_STRVAR(_ssl__SSLSocket_cipher__doc__,
143 "cipher($self, /)\n"
144 "--\n"
145 "\n");
146
147 #define _SSL__SSLSOCKET_CIPHER_METHODDEF \
148 {"cipher", (PyCFunction)_ssl__SSLSocket_cipher, METH_NOARGS, _ssl__SSLSocket_cipher__doc__},
149
150 static PyObject *
151 _ssl__SSLSocket_cipher_impl(PySSLSocket *self);
152
153 static PyObject *
_ssl__SSLSocket_cipher(PySSLSocket * self,PyObject * Py_UNUSED (ignored))154 _ssl__SSLSocket_cipher(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
155 {
156 return _ssl__SSLSocket_cipher_impl(self);
157 }
158
159 PyDoc_STRVAR(_ssl__SSLSocket_version__doc__,
160 "version($self, /)\n"
161 "--\n"
162 "\n");
163
164 #define _SSL__SSLSOCKET_VERSION_METHODDEF \
165 {"version", (PyCFunction)_ssl__SSLSocket_version, METH_NOARGS, _ssl__SSLSocket_version__doc__},
166
167 static PyObject *
168 _ssl__SSLSocket_version_impl(PySSLSocket *self);
169
170 static PyObject *
_ssl__SSLSocket_version(PySSLSocket * self,PyObject * Py_UNUSED (ignored))171 _ssl__SSLSocket_version(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
172 {
173 return _ssl__SSLSocket_version_impl(self);
174 }
175
176 PyDoc_STRVAR(_ssl__SSLSocket_selected_alpn_protocol__doc__,
177 "selected_alpn_protocol($self, /)\n"
178 "--\n"
179 "\n");
180
181 #define _SSL__SSLSOCKET_SELECTED_ALPN_PROTOCOL_METHODDEF \
182 {"selected_alpn_protocol", (PyCFunction)_ssl__SSLSocket_selected_alpn_protocol, METH_NOARGS, _ssl__SSLSocket_selected_alpn_protocol__doc__},
183
184 static PyObject *
185 _ssl__SSLSocket_selected_alpn_protocol_impl(PySSLSocket *self);
186
187 static PyObject *
_ssl__SSLSocket_selected_alpn_protocol(PySSLSocket * self,PyObject * Py_UNUSED (ignored))188 _ssl__SSLSocket_selected_alpn_protocol(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
189 {
190 return _ssl__SSLSocket_selected_alpn_protocol_impl(self);
191 }
192
193 PyDoc_STRVAR(_ssl__SSLSocket_compression__doc__,
194 "compression($self, /)\n"
195 "--\n"
196 "\n");
197
198 #define _SSL__SSLSOCKET_COMPRESSION_METHODDEF \
199 {"compression", (PyCFunction)_ssl__SSLSocket_compression, METH_NOARGS, _ssl__SSLSocket_compression__doc__},
200
201 static PyObject *
202 _ssl__SSLSocket_compression_impl(PySSLSocket *self);
203
204 static PyObject *
_ssl__SSLSocket_compression(PySSLSocket * self,PyObject * Py_UNUSED (ignored))205 _ssl__SSLSocket_compression(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
206 {
207 return _ssl__SSLSocket_compression_impl(self);
208 }
209
210 PyDoc_STRVAR(_ssl__SSLSocket_write__doc__,
211 "write($self, b, /)\n"
212 "--\n"
213 "\n"
214 "Writes the bytes-like object b into the SSL object.\n"
215 "\n"
216 "Returns the number of bytes written.");
217
218 #define _SSL__SSLSOCKET_WRITE_METHODDEF \
219 {"write", (PyCFunction)_ssl__SSLSocket_write, METH_O, _ssl__SSLSocket_write__doc__},
220
221 static PyObject *
222 _ssl__SSLSocket_write_impl(PySSLSocket *self, Py_buffer *b);
223
224 static PyObject *
_ssl__SSLSocket_write(PySSLSocket * self,PyObject * arg)225 _ssl__SSLSocket_write(PySSLSocket *self, PyObject *arg)
226 {
227 PyObject *return_value = NULL;
228 Py_buffer b = {NULL, NULL};
229
230 if (PyObject_GetBuffer(arg, &b, PyBUF_SIMPLE) != 0) {
231 goto exit;
232 }
233 if (!PyBuffer_IsContiguous(&b, 'C')) {
234 _PyArg_BadArgument("write", "argument", "contiguous buffer", arg);
235 goto exit;
236 }
237 return_value = _ssl__SSLSocket_write_impl(self, &b);
238
239 exit:
240 /* Cleanup for b */
241 if (b.obj) {
242 PyBuffer_Release(&b);
243 }
244
245 return return_value;
246 }
247
248 PyDoc_STRVAR(_ssl__SSLSocket_pending__doc__,
249 "pending($self, /)\n"
250 "--\n"
251 "\n"
252 "Returns the number of already decrypted bytes available for read, pending on the connection.");
253
254 #define _SSL__SSLSOCKET_PENDING_METHODDEF \
255 {"pending", (PyCFunction)_ssl__SSLSocket_pending, METH_NOARGS, _ssl__SSLSocket_pending__doc__},
256
257 static PyObject *
258 _ssl__SSLSocket_pending_impl(PySSLSocket *self);
259
260 static PyObject *
_ssl__SSLSocket_pending(PySSLSocket * self,PyObject * Py_UNUSED (ignored))261 _ssl__SSLSocket_pending(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
262 {
263 return _ssl__SSLSocket_pending_impl(self);
264 }
265
266 PyDoc_STRVAR(_ssl__SSLSocket_read__doc__,
267 "read(size, [buffer])\n"
268 "Read up to size bytes from the SSL socket.");
269
270 #define _SSL__SSLSOCKET_READ_METHODDEF \
271 {"read", (PyCFunction)_ssl__SSLSocket_read, METH_VARARGS, _ssl__SSLSocket_read__doc__},
272
273 static PyObject *
274 _ssl__SSLSocket_read_impl(PySSLSocket *self, Py_ssize_t len,
275 int group_right_1, Py_buffer *buffer);
276
277 static PyObject *
_ssl__SSLSocket_read(PySSLSocket * self,PyObject * args)278 _ssl__SSLSocket_read(PySSLSocket *self, PyObject *args)
279 {
280 PyObject *return_value = NULL;
281 Py_ssize_t len;
282 int group_right_1 = 0;
283 Py_buffer buffer = {NULL, NULL};
284
285 switch (PyTuple_GET_SIZE(args)) {
286 case 1:
287 if (!PyArg_ParseTuple(args, "n:read", &len)) {
288 goto exit;
289 }
290 break;
291 case 2:
292 if (!PyArg_ParseTuple(args, "nw*:read", &len, &buffer)) {
293 goto exit;
294 }
295 group_right_1 = 1;
296 break;
297 default:
298 PyErr_SetString(PyExc_TypeError, "_ssl._SSLSocket.read requires 1 to 2 arguments");
299 goto exit;
300 }
301 return_value = _ssl__SSLSocket_read_impl(self, len, group_right_1, &buffer);
302
303 exit:
304 /* Cleanup for buffer */
305 if (buffer.obj) {
306 PyBuffer_Release(&buffer);
307 }
308
309 return return_value;
310 }
311
312 PyDoc_STRVAR(_ssl__SSLSocket_shutdown__doc__,
313 "shutdown($self, /)\n"
314 "--\n"
315 "\n"
316 "Does the SSL shutdown handshake with the remote end.");
317
318 #define _SSL__SSLSOCKET_SHUTDOWN_METHODDEF \
319 {"shutdown", (PyCFunction)_ssl__SSLSocket_shutdown, METH_NOARGS, _ssl__SSLSocket_shutdown__doc__},
320
321 static PyObject *
322 _ssl__SSLSocket_shutdown_impl(PySSLSocket *self);
323
324 static PyObject *
_ssl__SSLSocket_shutdown(PySSLSocket * self,PyObject * Py_UNUSED (ignored))325 _ssl__SSLSocket_shutdown(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
326 {
327 return _ssl__SSLSocket_shutdown_impl(self);
328 }
329
330 PyDoc_STRVAR(_ssl__SSLSocket_get_channel_binding__doc__,
331 "get_channel_binding($self, /, cb_type=\'tls-unique\')\n"
332 "--\n"
333 "\n"
334 "Get channel binding data for current connection.\n"
335 "\n"
336 "Raise ValueError if the requested `cb_type` is not supported. Return bytes\n"
337 "of the data or None if the data is not available (e.g. before the handshake).\n"
338 "Only \'tls-unique\' channel binding data from RFC 5929 is supported.");
339
340 #define _SSL__SSLSOCKET_GET_CHANNEL_BINDING_METHODDEF \
341 {"get_channel_binding", _PyCFunction_CAST(_ssl__SSLSocket_get_channel_binding), METH_FASTCALL|METH_KEYWORDS, _ssl__SSLSocket_get_channel_binding__doc__},
342
343 static PyObject *
344 _ssl__SSLSocket_get_channel_binding_impl(PySSLSocket *self,
345 const char *cb_type);
346
347 static PyObject *
_ssl__SSLSocket_get_channel_binding(PySSLSocket * self,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)348 _ssl__SSLSocket_get_channel_binding(PySSLSocket *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
349 {
350 PyObject *return_value = NULL;
351 static const char * const _keywords[] = {"cb_type", NULL};
352 static _PyArg_Parser _parser = {NULL, _keywords, "get_channel_binding", 0};
353 PyObject *argsbuf[1];
354 Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
355 const char *cb_type = "tls-unique";
356
357 args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
358 if (!args) {
359 goto exit;
360 }
361 if (!noptargs) {
362 goto skip_optional_pos;
363 }
364 if (!PyUnicode_Check(args[0])) {
365 _PyArg_BadArgument("get_channel_binding", "argument 'cb_type'", "str", args[0]);
366 goto exit;
367 }
368 Py_ssize_t cb_type_length;
369 cb_type = PyUnicode_AsUTF8AndSize(args[0], &cb_type_length);
370 if (cb_type == NULL) {
371 goto exit;
372 }
373 if (strlen(cb_type) != (size_t)cb_type_length) {
374 PyErr_SetString(PyExc_ValueError, "embedded null character");
375 goto exit;
376 }
377 skip_optional_pos:
378 return_value = _ssl__SSLSocket_get_channel_binding_impl(self, cb_type);
379
380 exit:
381 return return_value;
382 }
383
384 PyDoc_STRVAR(_ssl__SSLSocket_verify_client_post_handshake__doc__,
385 "verify_client_post_handshake($self, /)\n"
386 "--\n"
387 "\n"
388 "Initiate TLS 1.3 post-handshake authentication");
389
390 #define _SSL__SSLSOCKET_VERIFY_CLIENT_POST_HANDSHAKE_METHODDEF \
391 {"verify_client_post_handshake", (PyCFunction)_ssl__SSLSocket_verify_client_post_handshake, METH_NOARGS, _ssl__SSLSocket_verify_client_post_handshake__doc__},
392
393 static PyObject *
394 _ssl__SSLSocket_verify_client_post_handshake_impl(PySSLSocket *self);
395
396 static PyObject *
_ssl__SSLSocket_verify_client_post_handshake(PySSLSocket * self,PyObject * Py_UNUSED (ignored))397 _ssl__SSLSocket_verify_client_post_handshake(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
398 {
399 return _ssl__SSLSocket_verify_client_post_handshake_impl(self);
400 }
401
402 static PyObject *
403 _ssl__SSLContext_impl(PyTypeObject *type, int proto_version);
404
405 static PyObject *
_ssl__SSLContext(PyTypeObject * type,PyObject * args,PyObject * kwargs)406 _ssl__SSLContext(PyTypeObject *type, PyObject *args, PyObject *kwargs)
407 {
408 PyObject *return_value = NULL;
409 int proto_version;
410
411 if ((type == get_state_type(type)->PySSLContext_Type ||
412 type->tp_init == get_state_type(type)->PySSLContext_Type->tp_init) &&
413 !_PyArg_NoKeywords("_SSLContext", kwargs)) {
414 goto exit;
415 }
416 if (!_PyArg_CheckPositional("_SSLContext", PyTuple_GET_SIZE(args), 1, 1)) {
417 goto exit;
418 }
419 proto_version = _PyLong_AsInt(PyTuple_GET_ITEM(args, 0));
420 if (proto_version == -1 && PyErr_Occurred()) {
421 goto exit;
422 }
423 return_value = _ssl__SSLContext_impl(type, proto_version);
424
425 exit:
426 return return_value;
427 }
428
429 PyDoc_STRVAR(_ssl__SSLContext_set_ciphers__doc__,
430 "set_ciphers($self, cipherlist, /)\n"
431 "--\n"
432 "\n");
433
434 #define _SSL__SSLCONTEXT_SET_CIPHERS_METHODDEF \
435 {"set_ciphers", (PyCFunction)_ssl__SSLContext_set_ciphers, METH_O, _ssl__SSLContext_set_ciphers__doc__},
436
437 static PyObject *
438 _ssl__SSLContext_set_ciphers_impl(PySSLContext *self, const char *cipherlist);
439
440 static PyObject *
_ssl__SSLContext_set_ciphers(PySSLContext * self,PyObject * arg)441 _ssl__SSLContext_set_ciphers(PySSLContext *self, PyObject *arg)
442 {
443 PyObject *return_value = NULL;
444 const char *cipherlist;
445
446 if (!PyUnicode_Check(arg)) {
447 _PyArg_BadArgument("set_ciphers", "argument", "str", arg);
448 goto exit;
449 }
450 Py_ssize_t cipherlist_length;
451 cipherlist = PyUnicode_AsUTF8AndSize(arg, &cipherlist_length);
452 if (cipherlist == NULL) {
453 goto exit;
454 }
455 if (strlen(cipherlist) != (size_t)cipherlist_length) {
456 PyErr_SetString(PyExc_ValueError, "embedded null character");
457 goto exit;
458 }
459 return_value = _ssl__SSLContext_set_ciphers_impl(self, cipherlist);
460
461 exit:
462 return return_value;
463 }
464
465 PyDoc_STRVAR(_ssl__SSLContext_get_ciphers__doc__,
466 "get_ciphers($self, /)\n"
467 "--\n"
468 "\n");
469
470 #define _SSL__SSLCONTEXT_GET_CIPHERS_METHODDEF \
471 {"get_ciphers", (PyCFunction)_ssl__SSLContext_get_ciphers, METH_NOARGS, _ssl__SSLContext_get_ciphers__doc__},
472
473 static PyObject *
474 _ssl__SSLContext_get_ciphers_impl(PySSLContext *self);
475
476 static PyObject *
_ssl__SSLContext_get_ciphers(PySSLContext * self,PyObject * Py_UNUSED (ignored))477 _ssl__SSLContext_get_ciphers(PySSLContext *self, PyObject *Py_UNUSED(ignored))
478 {
479 return _ssl__SSLContext_get_ciphers_impl(self);
480 }
481
482 PyDoc_STRVAR(_ssl__SSLContext__set_alpn_protocols__doc__,
483 "_set_alpn_protocols($self, protos, /)\n"
484 "--\n"
485 "\n");
486
487 #define _SSL__SSLCONTEXT__SET_ALPN_PROTOCOLS_METHODDEF \
488 {"_set_alpn_protocols", (PyCFunction)_ssl__SSLContext__set_alpn_protocols, METH_O, _ssl__SSLContext__set_alpn_protocols__doc__},
489
490 static PyObject *
491 _ssl__SSLContext__set_alpn_protocols_impl(PySSLContext *self,
492 Py_buffer *protos);
493
494 static PyObject *
_ssl__SSLContext__set_alpn_protocols(PySSLContext * self,PyObject * arg)495 _ssl__SSLContext__set_alpn_protocols(PySSLContext *self, PyObject *arg)
496 {
497 PyObject *return_value = NULL;
498 Py_buffer protos = {NULL, NULL};
499
500 if (PyObject_GetBuffer(arg, &protos, PyBUF_SIMPLE) != 0) {
501 goto exit;
502 }
503 if (!PyBuffer_IsContiguous(&protos, 'C')) {
504 _PyArg_BadArgument("_set_alpn_protocols", "argument", "contiguous buffer", arg);
505 goto exit;
506 }
507 return_value = _ssl__SSLContext__set_alpn_protocols_impl(self, &protos);
508
509 exit:
510 /* Cleanup for protos */
511 if (protos.obj) {
512 PyBuffer_Release(&protos);
513 }
514
515 return return_value;
516 }
517
518 PyDoc_STRVAR(_ssl__SSLContext_load_cert_chain__doc__,
519 "load_cert_chain($self, /, certfile, keyfile=None, password=None)\n"
520 "--\n"
521 "\n");
522
523 #define _SSL__SSLCONTEXT_LOAD_CERT_CHAIN_METHODDEF \
524 {"load_cert_chain", _PyCFunction_CAST(_ssl__SSLContext_load_cert_chain), METH_FASTCALL|METH_KEYWORDS, _ssl__SSLContext_load_cert_chain__doc__},
525
526 static PyObject *
527 _ssl__SSLContext_load_cert_chain_impl(PySSLContext *self, PyObject *certfile,
528 PyObject *keyfile, PyObject *password);
529
530 static PyObject *
_ssl__SSLContext_load_cert_chain(PySSLContext * self,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)531 _ssl__SSLContext_load_cert_chain(PySSLContext *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
532 {
533 PyObject *return_value = NULL;
534 static const char * const _keywords[] = {"certfile", "keyfile", "password", NULL};
535 static _PyArg_Parser _parser = {NULL, _keywords, "load_cert_chain", 0};
536 PyObject *argsbuf[3];
537 Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
538 PyObject *certfile;
539 PyObject *keyfile = Py_None;
540 PyObject *password = Py_None;
541
542 args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 3, 0, argsbuf);
543 if (!args) {
544 goto exit;
545 }
546 certfile = args[0];
547 if (!noptargs) {
548 goto skip_optional_pos;
549 }
550 if (args[1]) {
551 keyfile = args[1];
552 if (!--noptargs) {
553 goto skip_optional_pos;
554 }
555 }
556 password = args[2];
557 skip_optional_pos:
558 return_value = _ssl__SSLContext_load_cert_chain_impl(self, certfile, keyfile, password);
559
560 exit:
561 return return_value;
562 }
563
564 PyDoc_STRVAR(_ssl__SSLContext_load_verify_locations__doc__,
565 "load_verify_locations($self, /, cafile=None, capath=None, cadata=None)\n"
566 "--\n"
567 "\n");
568
569 #define _SSL__SSLCONTEXT_LOAD_VERIFY_LOCATIONS_METHODDEF \
570 {"load_verify_locations", _PyCFunction_CAST(_ssl__SSLContext_load_verify_locations), METH_FASTCALL|METH_KEYWORDS, _ssl__SSLContext_load_verify_locations__doc__},
571
572 static PyObject *
573 _ssl__SSLContext_load_verify_locations_impl(PySSLContext *self,
574 PyObject *cafile,
575 PyObject *capath,
576 PyObject *cadata);
577
578 static PyObject *
_ssl__SSLContext_load_verify_locations(PySSLContext * self,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)579 _ssl__SSLContext_load_verify_locations(PySSLContext *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
580 {
581 PyObject *return_value = NULL;
582 static const char * const _keywords[] = {"cafile", "capath", "cadata", NULL};
583 static _PyArg_Parser _parser = {NULL, _keywords, "load_verify_locations", 0};
584 PyObject *argsbuf[3];
585 Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
586 PyObject *cafile = Py_None;
587 PyObject *capath = Py_None;
588 PyObject *cadata = Py_None;
589
590 args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 3, 0, argsbuf);
591 if (!args) {
592 goto exit;
593 }
594 if (!noptargs) {
595 goto skip_optional_pos;
596 }
597 if (args[0]) {
598 cafile = args[0];
599 if (!--noptargs) {
600 goto skip_optional_pos;
601 }
602 }
603 if (args[1]) {
604 capath = args[1];
605 if (!--noptargs) {
606 goto skip_optional_pos;
607 }
608 }
609 cadata = args[2];
610 skip_optional_pos:
611 return_value = _ssl__SSLContext_load_verify_locations_impl(self, cafile, capath, cadata);
612
613 exit:
614 return return_value;
615 }
616
617 PyDoc_STRVAR(_ssl__SSLContext_load_dh_params__doc__,
618 "load_dh_params($self, path, /)\n"
619 "--\n"
620 "\n");
621
622 #define _SSL__SSLCONTEXT_LOAD_DH_PARAMS_METHODDEF \
623 {"load_dh_params", (PyCFunction)_ssl__SSLContext_load_dh_params, METH_O, _ssl__SSLContext_load_dh_params__doc__},
624
625 PyDoc_STRVAR(_ssl__SSLContext__wrap_socket__doc__,
626 "_wrap_socket($self, /, sock, server_side, server_hostname=None, *,\n"
627 " owner=None, session=None)\n"
628 "--\n"
629 "\n");
630
631 #define _SSL__SSLCONTEXT__WRAP_SOCKET_METHODDEF \
632 {"_wrap_socket", _PyCFunction_CAST(_ssl__SSLContext__wrap_socket), METH_FASTCALL|METH_KEYWORDS, _ssl__SSLContext__wrap_socket__doc__},
633
634 static PyObject *
635 _ssl__SSLContext__wrap_socket_impl(PySSLContext *self, PyObject *sock,
636 int server_side, PyObject *hostname_obj,
637 PyObject *owner, PyObject *session);
638
639 static PyObject *
_ssl__SSLContext__wrap_socket(PySSLContext * self,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)640 _ssl__SSLContext__wrap_socket(PySSLContext *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
641 {
642 PyObject *return_value = NULL;
643 static const char * const _keywords[] = {"sock", "server_side", "server_hostname", "owner", "session", NULL};
644 static _PyArg_Parser _parser = {NULL, _keywords, "_wrap_socket", 0};
645 PyObject *argsbuf[5];
646 Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
647 PyObject *sock;
648 int server_side;
649 PyObject *hostname_obj = Py_None;
650 PyObject *owner = Py_None;
651 PyObject *session = Py_None;
652
653 args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 3, 0, argsbuf);
654 if (!args) {
655 goto exit;
656 }
657 if (!PyObject_TypeCheck(args[0], get_state_ctx(self)->Sock_Type)) {
658 _PyArg_BadArgument("_wrap_socket", "argument 'sock'", (get_state_ctx(self)->Sock_Type)->tp_name, args[0]);
659 goto exit;
660 }
661 sock = args[0];
662 server_side = _PyLong_AsInt(args[1]);
663 if (server_side == -1 && PyErr_Occurred()) {
664 goto exit;
665 }
666 if (!noptargs) {
667 goto skip_optional_pos;
668 }
669 if (args[2]) {
670 hostname_obj = args[2];
671 if (!--noptargs) {
672 goto skip_optional_pos;
673 }
674 }
675 skip_optional_pos:
676 if (!noptargs) {
677 goto skip_optional_kwonly;
678 }
679 if (args[3]) {
680 owner = args[3];
681 if (!--noptargs) {
682 goto skip_optional_kwonly;
683 }
684 }
685 session = args[4];
686 skip_optional_kwonly:
687 return_value = _ssl__SSLContext__wrap_socket_impl(self, sock, server_side, hostname_obj, owner, session);
688
689 exit:
690 return return_value;
691 }
692
693 PyDoc_STRVAR(_ssl__SSLContext__wrap_bio__doc__,
694 "_wrap_bio($self, /, incoming, outgoing, server_side,\n"
695 " server_hostname=None, *, owner=None, session=None)\n"
696 "--\n"
697 "\n");
698
699 #define _SSL__SSLCONTEXT__WRAP_BIO_METHODDEF \
700 {"_wrap_bio", _PyCFunction_CAST(_ssl__SSLContext__wrap_bio), METH_FASTCALL|METH_KEYWORDS, _ssl__SSLContext__wrap_bio__doc__},
701
702 static PyObject *
703 _ssl__SSLContext__wrap_bio_impl(PySSLContext *self, PySSLMemoryBIO *incoming,
704 PySSLMemoryBIO *outgoing, int server_side,
705 PyObject *hostname_obj, PyObject *owner,
706 PyObject *session);
707
708 static PyObject *
_ssl__SSLContext__wrap_bio(PySSLContext * self,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)709 _ssl__SSLContext__wrap_bio(PySSLContext *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
710 {
711 PyObject *return_value = NULL;
712 static const char * const _keywords[] = {"incoming", "outgoing", "server_side", "server_hostname", "owner", "session", NULL};
713 static _PyArg_Parser _parser = {NULL, _keywords, "_wrap_bio", 0};
714 PyObject *argsbuf[6];
715 Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 3;
716 PySSLMemoryBIO *incoming;
717 PySSLMemoryBIO *outgoing;
718 int server_side;
719 PyObject *hostname_obj = Py_None;
720 PyObject *owner = Py_None;
721 PyObject *session = Py_None;
722
723 args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 4, 0, argsbuf);
724 if (!args) {
725 goto exit;
726 }
727 if (!PyObject_TypeCheck(args[0], get_state_ctx(self)->PySSLMemoryBIO_Type)) {
728 _PyArg_BadArgument("_wrap_bio", "argument 'incoming'", (get_state_ctx(self)->PySSLMemoryBIO_Type)->tp_name, args[0]);
729 goto exit;
730 }
731 incoming = (PySSLMemoryBIO *)args[0];
732 if (!PyObject_TypeCheck(args[1], get_state_ctx(self)->PySSLMemoryBIO_Type)) {
733 _PyArg_BadArgument("_wrap_bio", "argument 'outgoing'", (get_state_ctx(self)->PySSLMemoryBIO_Type)->tp_name, args[1]);
734 goto exit;
735 }
736 outgoing = (PySSLMemoryBIO *)args[1];
737 server_side = _PyLong_AsInt(args[2]);
738 if (server_side == -1 && PyErr_Occurred()) {
739 goto exit;
740 }
741 if (!noptargs) {
742 goto skip_optional_pos;
743 }
744 if (args[3]) {
745 hostname_obj = args[3];
746 if (!--noptargs) {
747 goto skip_optional_pos;
748 }
749 }
750 skip_optional_pos:
751 if (!noptargs) {
752 goto skip_optional_kwonly;
753 }
754 if (args[4]) {
755 owner = args[4];
756 if (!--noptargs) {
757 goto skip_optional_kwonly;
758 }
759 }
760 session = args[5];
761 skip_optional_kwonly:
762 return_value = _ssl__SSLContext__wrap_bio_impl(self, incoming, outgoing, server_side, hostname_obj, owner, session);
763
764 exit:
765 return return_value;
766 }
767
768 PyDoc_STRVAR(_ssl__SSLContext_session_stats__doc__,
769 "session_stats($self, /)\n"
770 "--\n"
771 "\n");
772
773 #define _SSL__SSLCONTEXT_SESSION_STATS_METHODDEF \
774 {"session_stats", (PyCFunction)_ssl__SSLContext_session_stats, METH_NOARGS, _ssl__SSLContext_session_stats__doc__},
775
776 static PyObject *
777 _ssl__SSLContext_session_stats_impl(PySSLContext *self);
778
779 static PyObject *
_ssl__SSLContext_session_stats(PySSLContext * self,PyObject * Py_UNUSED (ignored))780 _ssl__SSLContext_session_stats(PySSLContext *self, PyObject *Py_UNUSED(ignored))
781 {
782 return _ssl__SSLContext_session_stats_impl(self);
783 }
784
785 PyDoc_STRVAR(_ssl__SSLContext_set_default_verify_paths__doc__,
786 "set_default_verify_paths($self, /)\n"
787 "--\n"
788 "\n");
789
790 #define _SSL__SSLCONTEXT_SET_DEFAULT_VERIFY_PATHS_METHODDEF \
791 {"set_default_verify_paths", (PyCFunction)_ssl__SSLContext_set_default_verify_paths, METH_NOARGS, _ssl__SSLContext_set_default_verify_paths__doc__},
792
793 static PyObject *
794 _ssl__SSLContext_set_default_verify_paths_impl(PySSLContext *self);
795
796 static PyObject *
_ssl__SSLContext_set_default_verify_paths(PySSLContext * self,PyObject * Py_UNUSED (ignored))797 _ssl__SSLContext_set_default_verify_paths(PySSLContext *self, PyObject *Py_UNUSED(ignored))
798 {
799 return _ssl__SSLContext_set_default_verify_paths_impl(self);
800 }
801
802 PyDoc_STRVAR(_ssl__SSLContext_set_ecdh_curve__doc__,
803 "set_ecdh_curve($self, name, /)\n"
804 "--\n"
805 "\n");
806
807 #define _SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF \
808 {"set_ecdh_curve", (PyCFunction)_ssl__SSLContext_set_ecdh_curve, METH_O, _ssl__SSLContext_set_ecdh_curve__doc__},
809
810 PyDoc_STRVAR(_ssl__SSLContext_cert_store_stats__doc__,
811 "cert_store_stats($self, /)\n"
812 "--\n"
813 "\n"
814 "Returns quantities of loaded X.509 certificates.\n"
815 "\n"
816 "X.509 certificates with a CA extension and certificate revocation lists\n"
817 "inside the context\'s cert store.\n"
818 "\n"
819 "NOTE: Certificates in a capath directory aren\'t loaded unless they have\n"
820 "been used at least once.");
821
822 #define _SSL__SSLCONTEXT_CERT_STORE_STATS_METHODDEF \
823 {"cert_store_stats", (PyCFunction)_ssl__SSLContext_cert_store_stats, METH_NOARGS, _ssl__SSLContext_cert_store_stats__doc__},
824
825 static PyObject *
826 _ssl__SSLContext_cert_store_stats_impl(PySSLContext *self);
827
828 static PyObject *
_ssl__SSLContext_cert_store_stats(PySSLContext * self,PyObject * Py_UNUSED (ignored))829 _ssl__SSLContext_cert_store_stats(PySSLContext *self, PyObject *Py_UNUSED(ignored))
830 {
831 return _ssl__SSLContext_cert_store_stats_impl(self);
832 }
833
834 PyDoc_STRVAR(_ssl__SSLContext_get_ca_certs__doc__,
835 "get_ca_certs($self, /, binary_form=False)\n"
836 "--\n"
837 "\n"
838 "Returns a list of dicts with information of loaded CA certs.\n"
839 "\n"
840 "If the optional argument is True, returns a DER-encoded copy of the CA\n"
841 "certificate.\n"
842 "\n"
843 "NOTE: Certificates in a capath directory aren\'t loaded unless they have\n"
844 "been used at least once.");
845
846 #define _SSL__SSLCONTEXT_GET_CA_CERTS_METHODDEF \
847 {"get_ca_certs", _PyCFunction_CAST(_ssl__SSLContext_get_ca_certs), METH_FASTCALL|METH_KEYWORDS, _ssl__SSLContext_get_ca_certs__doc__},
848
849 static PyObject *
850 _ssl__SSLContext_get_ca_certs_impl(PySSLContext *self, int binary_form);
851
852 static PyObject *
_ssl__SSLContext_get_ca_certs(PySSLContext * self,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)853 _ssl__SSLContext_get_ca_certs(PySSLContext *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
854 {
855 PyObject *return_value = NULL;
856 static const char * const _keywords[] = {"binary_form", NULL};
857 static _PyArg_Parser _parser = {NULL, _keywords, "get_ca_certs", 0};
858 PyObject *argsbuf[1];
859 Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
860 int binary_form = 0;
861
862 args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
863 if (!args) {
864 goto exit;
865 }
866 if (!noptargs) {
867 goto skip_optional_pos;
868 }
869 binary_form = PyObject_IsTrue(args[0]);
870 if (binary_form < 0) {
871 goto exit;
872 }
873 skip_optional_pos:
874 return_value = _ssl__SSLContext_get_ca_certs_impl(self, binary_form);
875
876 exit:
877 return return_value;
878 }
879
880 static PyObject *
881 _ssl_MemoryBIO_impl(PyTypeObject *type);
882
883 static PyObject *
_ssl_MemoryBIO(PyTypeObject * type,PyObject * args,PyObject * kwargs)884 _ssl_MemoryBIO(PyTypeObject *type, PyObject *args, PyObject *kwargs)
885 {
886 PyObject *return_value = NULL;
887
888 if ((type == get_state_type(type)->PySSLMemoryBIO_Type ||
889 type->tp_init == get_state_type(type)->PySSLMemoryBIO_Type->tp_init) &&
890 !_PyArg_NoPositional("MemoryBIO", args)) {
891 goto exit;
892 }
893 if ((type == get_state_type(type)->PySSLMemoryBIO_Type ||
894 type->tp_init == get_state_type(type)->PySSLMemoryBIO_Type->tp_init) &&
895 !_PyArg_NoKeywords("MemoryBIO", kwargs)) {
896 goto exit;
897 }
898 return_value = _ssl_MemoryBIO_impl(type);
899
900 exit:
901 return return_value;
902 }
903
904 PyDoc_STRVAR(_ssl_MemoryBIO_read__doc__,
905 "read($self, size=-1, /)\n"
906 "--\n"
907 "\n"
908 "Read up to size bytes from the memory BIO.\n"
909 "\n"
910 "If size is not specified, read the entire buffer.\n"
911 "If the return value is an empty bytes instance, this means either\n"
912 "EOF or that no data is available. Use the \"eof\" property to\n"
913 "distinguish between the two.");
914
915 #define _SSL_MEMORYBIO_READ_METHODDEF \
916 {"read", _PyCFunction_CAST(_ssl_MemoryBIO_read), METH_FASTCALL, _ssl_MemoryBIO_read__doc__},
917
918 static PyObject *
919 _ssl_MemoryBIO_read_impl(PySSLMemoryBIO *self, int len);
920
921 static PyObject *
_ssl_MemoryBIO_read(PySSLMemoryBIO * self,PyObject * const * args,Py_ssize_t nargs)922 _ssl_MemoryBIO_read(PySSLMemoryBIO *self, PyObject *const *args, Py_ssize_t nargs)
923 {
924 PyObject *return_value = NULL;
925 int len = -1;
926
927 if (!_PyArg_CheckPositional("read", nargs, 0, 1)) {
928 goto exit;
929 }
930 if (nargs < 1) {
931 goto skip_optional;
932 }
933 len = _PyLong_AsInt(args[0]);
934 if (len == -1 && PyErr_Occurred()) {
935 goto exit;
936 }
937 skip_optional:
938 return_value = _ssl_MemoryBIO_read_impl(self, len);
939
940 exit:
941 return return_value;
942 }
943
944 PyDoc_STRVAR(_ssl_MemoryBIO_write__doc__,
945 "write($self, b, /)\n"
946 "--\n"
947 "\n"
948 "Writes the bytes b into the memory BIO.\n"
949 "\n"
950 "Returns the number of bytes written.");
951
952 #define _SSL_MEMORYBIO_WRITE_METHODDEF \
953 {"write", (PyCFunction)_ssl_MemoryBIO_write, METH_O, _ssl_MemoryBIO_write__doc__},
954
955 static PyObject *
956 _ssl_MemoryBIO_write_impl(PySSLMemoryBIO *self, Py_buffer *b);
957
958 static PyObject *
_ssl_MemoryBIO_write(PySSLMemoryBIO * self,PyObject * arg)959 _ssl_MemoryBIO_write(PySSLMemoryBIO *self, PyObject *arg)
960 {
961 PyObject *return_value = NULL;
962 Py_buffer b = {NULL, NULL};
963
964 if (PyObject_GetBuffer(arg, &b, PyBUF_SIMPLE) != 0) {
965 goto exit;
966 }
967 if (!PyBuffer_IsContiguous(&b, 'C')) {
968 _PyArg_BadArgument("write", "argument", "contiguous buffer", arg);
969 goto exit;
970 }
971 return_value = _ssl_MemoryBIO_write_impl(self, &b);
972
973 exit:
974 /* Cleanup for b */
975 if (b.obj) {
976 PyBuffer_Release(&b);
977 }
978
979 return return_value;
980 }
981
982 PyDoc_STRVAR(_ssl_MemoryBIO_write_eof__doc__,
983 "write_eof($self, /)\n"
984 "--\n"
985 "\n"
986 "Write an EOF marker to the memory BIO.\n"
987 "\n"
988 "When all data has been read, the \"eof\" property will be True.");
989
990 #define _SSL_MEMORYBIO_WRITE_EOF_METHODDEF \
991 {"write_eof", (PyCFunction)_ssl_MemoryBIO_write_eof, METH_NOARGS, _ssl_MemoryBIO_write_eof__doc__},
992
993 static PyObject *
994 _ssl_MemoryBIO_write_eof_impl(PySSLMemoryBIO *self);
995
996 static PyObject *
_ssl_MemoryBIO_write_eof(PySSLMemoryBIO * self,PyObject * Py_UNUSED (ignored))997 _ssl_MemoryBIO_write_eof(PySSLMemoryBIO *self, PyObject *Py_UNUSED(ignored))
998 {
999 return _ssl_MemoryBIO_write_eof_impl(self);
1000 }
1001
1002 PyDoc_STRVAR(_ssl_RAND_add__doc__,
1003 "RAND_add($module, string, entropy, /)\n"
1004 "--\n"
1005 "\n"
1006 "Mix string into the OpenSSL PRNG state.\n"
1007 "\n"
1008 "entropy (a float) is a lower bound on the entropy contained in\n"
1009 "string. See RFC 4086.");
1010
1011 #define _SSL_RAND_ADD_METHODDEF \
1012 {"RAND_add", _PyCFunction_CAST(_ssl_RAND_add), METH_FASTCALL, _ssl_RAND_add__doc__},
1013
1014 static PyObject *
1015 _ssl_RAND_add_impl(PyObject *module, Py_buffer *view, double entropy);
1016
1017 static PyObject *
_ssl_RAND_add(PyObject * module,PyObject * const * args,Py_ssize_t nargs)1018 _ssl_RAND_add(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
1019 {
1020 PyObject *return_value = NULL;
1021 Py_buffer view = {NULL, NULL};
1022 double entropy;
1023
1024 if (!_PyArg_CheckPositional("RAND_add", nargs, 2, 2)) {
1025 goto exit;
1026 }
1027 if (PyUnicode_Check(args[0])) {
1028 Py_ssize_t len;
1029 const char *ptr = PyUnicode_AsUTF8AndSize(args[0], &len);
1030 if (ptr == NULL) {
1031 goto exit;
1032 }
1033 PyBuffer_FillInfo(&view, args[0], (void *)ptr, len, 1, 0);
1034 }
1035 else { /* any bytes-like object */
1036 if (PyObject_GetBuffer(args[0], &view, PyBUF_SIMPLE) != 0) {
1037 goto exit;
1038 }
1039 if (!PyBuffer_IsContiguous(&view, 'C')) {
1040 _PyArg_BadArgument("RAND_add", "argument 1", "contiguous buffer", args[0]);
1041 goto exit;
1042 }
1043 }
1044 if (PyFloat_CheckExact(args[1])) {
1045 entropy = PyFloat_AS_DOUBLE(args[1]);
1046 }
1047 else
1048 {
1049 entropy = PyFloat_AsDouble(args[1]);
1050 if (entropy == -1.0 && PyErr_Occurred()) {
1051 goto exit;
1052 }
1053 }
1054 return_value = _ssl_RAND_add_impl(module, &view, entropy);
1055
1056 exit:
1057 /* Cleanup for view */
1058 if (view.obj) {
1059 PyBuffer_Release(&view);
1060 }
1061
1062 return return_value;
1063 }
1064
1065 PyDoc_STRVAR(_ssl_RAND_bytes__doc__,
1066 "RAND_bytes($module, n, /)\n"
1067 "--\n"
1068 "\n"
1069 "Generate n cryptographically strong pseudo-random bytes.");
1070
1071 #define _SSL_RAND_BYTES_METHODDEF \
1072 {"RAND_bytes", (PyCFunction)_ssl_RAND_bytes, METH_O, _ssl_RAND_bytes__doc__},
1073
1074 static PyObject *
1075 _ssl_RAND_bytes_impl(PyObject *module, int n);
1076
1077 static PyObject *
_ssl_RAND_bytes(PyObject * module,PyObject * arg)1078 _ssl_RAND_bytes(PyObject *module, PyObject *arg)
1079 {
1080 PyObject *return_value = NULL;
1081 int n;
1082
1083 n = _PyLong_AsInt(arg);
1084 if (n == -1 && PyErr_Occurred()) {
1085 goto exit;
1086 }
1087 return_value = _ssl_RAND_bytes_impl(module, n);
1088
1089 exit:
1090 return return_value;
1091 }
1092
1093 PyDoc_STRVAR(_ssl_RAND_pseudo_bytes__doc__,
1094 "RAND_pseudo_bytes($module, n, /)\n"
1095 "--\n"
1096 "\n"
1097 "Generate n pseudo-random bytes.\n"
1098 "\n"
1099 "Return a pair (bytes, is_cryptographic). is_cryptographic is True\n"
1100 "if the bytes generated are cryptographically strong.");
1101
1102 #define _SSL_RAND_PSEUDO_BYTES_METHODDEF \
1103 {"RAND_pseudo_bytes", (PyCFunction)_ssl_RAND_pseudo_bytes, METH_O, _ssl_RAND_pseudo_bytes__doc__},
1104
1105 static PyObject *
1106 _ssl_RAND_pseudo_bytes_impl(PyObject *module, int n);
1107
1108 static PyObject *
_ssl_RAND_pseudo_bytes(PyObject * module,PyObject * arg)1109 _ssl_RAND_pseudo_bytes(PyObject *module, PyObject *arg)
1110 {
1111 PyObject *return_value = NULL;
1112 int n;
1113
1114 n = _PyLong_AsInt(arg);
1115 if (n == -1 && PyErr_Occurred()) {
1116 goto exit;
1117 }
1118 return_value = _ssl_RAND_pseudo_bytes_impl(module, n);
1119
1120 exit:
1121 return return_value;
1122 }
1123
1124 PyDoc_STRVAR(_ssl_RAND_status__doc__,
1125 "RAND_status($module, /)\n"
1126 "--\n"
1127 "\n"
1128 "Returns True if the OpenSSL PRNG has been seeded with enough data and False if not.\n"
1129 "\n"
1130 "It is necessary to seed the PRNG with RAND_add() on some platforms before\n"
1131 "using the ssl() function.");
1132
1133 #define _SSL_RAND_STATUS_METHODDEF \
1134 {"RAND_status", (PyCFunction)_ssl_RAND_status, METH_NOARGS, _ssl_RAND_status__doc__},
1135
1136 static PyObject *
1137 _ssl_RAND_status_impl(PyObject *module);
1138
1139 static PyObject *
_ssl_RAND_status(PyObject * module,PyObject * Py_UNUSED (ignored))1140 _ssl_RAND_status(PyObject *module, PyObject *Py_UNUSED(ignored))
1141 {
1142 return _ssl_RAND_status_impl(module);
1143 }
1144
1145 PyDoc_STRVAR(_ssl_get_default_verify_paths__doc__,
1146 "get_default_verify_paths($module, /)\n"
1147 "--\n"
1148 "\n"
1149 "Return search paths and environment vars that are used by SSLContext\'s set_default_verify_paths() to load default CAs.\n"
1150 "\n"
1151 "The values are \'cert_file_env\', \'cert_file\', \'cert_dir_env\', \'cert_dir\'.");
1152
1153 #define _SSL_GET_DEFAULT_VERIFY_PATHS_METHODDEF \
1154 {"get_default_verify_paths", (PyCFunction)_ssl_get_default_verify_paths, METH_NOARGS, _ssl_get_default_verify_paths__doc__},
1155
1156 static PyObject *
1157 _ssl_get_default_verify_paths_impl(PyObject *module);
1158
1159 static PyObject *
_ssl_get_default_verify_paths(PyObject * module,PyObject * Py_UNUSED (ignored))1160 _ssl_get_default_verify_paths(PyObject *module, PyObject *Py_UNUSED(ignored))
1161 {
1162 return _ssl_get_default_verify_paths_impl(module);
1163 }
1164
1165 PyDoc_STRVAR(_ssl_txt2obj__doc__,
1166 "txt2obj($module, /, txt, name=False)\n"
1167 "--\n"
1168 "\n"
1169 "Lookup NID, short name, long name and OID of an ASN1_OBJECT.\n"
1170 "\n"
1171 "By default objects are looked up by OID. With name=True short and\n"
1172 "long name are also matched.");
1173
1174 #define _SSL_TXT2OBJ_METHODDEF \
1175 {"txt2obj", _PyCFunction_CAST(_ssl_txt2obj), METH_FASTCALL|METH_KEYWORDS, _ssl_txt2obj__doc__},
1176
1177 static PyObject *
1178 _ssl_txt2obj_impl(PyObject *module, const char *txt, int name);
1179
1180 static PyObject *
_ssl_txt2obj(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)1181 _ssl_txt2obj(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1182 {
1183 PyObject *return_value = NULL;
1184 static const char * const _keywords[] = {"txt", "name", NULL};
1185 static _PyArg_Parser _parser = {NULL, _keywords, "txt2obj", 0};
1186 PyObject *argsbuf[2];
1187 Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
1188 const char *txt;
1189 int name = 0;
1190
1191 args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
1192 if (!args) {
1193 goto exit;
1194 }
1195 if (!PyUnicode_Check(args[0])) {
1196 _PyArg_BadArgument("txt2obj", "argument 'txt'", "str", args[0]);
1197 goto exit;
1198 }
1199 Py_ssize_t txt_length;
1200 txt = PyUnicode_AsUTF8AndSize(args[0], &txt_length);
1201 if (txt == NULL) {
1202 goto exit;
1203 }
1204 if (strlen(txt) != (size_t)txt_length) {
1205 PyErr_SetString(PyExc_ValueError, "embedded null character");
1206 goto exit;
1207 }
1208 if (!noptargs) {
1209 goto skip_optional_pos;
1210 }
1211 name = PyObject_IsTrue(args[1]);
1212 if (name < 0) {
1213 goto exit;
1214 }
1215 skip_optional_pos:
1216 return_value = _ssl_txt2obj_impl(module, txt, name);
1217
1218 exit:
1219 return return_value;
1220 }
1221
1222 PyDoc_STRVAR(_ssl_nid2obj__doc__,
1223 "nid2obj($module, nid, /)\n"
1224 "--\n"
1225 "\n"
1226 "Lookup NID, short name, long name and OID of an ASN1_OBJECT by NID.");
1227
1228 #define _SSL_NID2OBJ_METHODDEF \
1229 {"nid2obj", (PyCFunction)_ssl_nid2obj, METH_O, _ssl_nid2obj__doc__},
1230
1231 static PyObject *
1232 _ssl_nid2obj_impl(PyObject *module, int nid);
1233
1234 static PyObject *
_ssl_nid2obj(PyObject * module,PyObject * arg)1235 _ssl_nid2obj(PyObject *module, PyObject *arg)
1236 {
1237 PyObject *return_value = NULL;
1238 int nid;
1239
1240 nid = _PyLong_AsInt(arg);
1241 if (nid == -1 && PyErr_Occurred()) {
1242 goto exit;
1243 }
1244 return_value = _ssl_nid2obj_impl(module, nid);
1245
1246 exit:
1247 return return_value;
1248 }
1249
1250 #if defined(_MSC_VER)
1251
1252 PyDoc_STRVAR(_ssl_enum_certificates__doc__,
1253 "enum_certificates($module, /, store_name)\n"
1254 "--\n"
1255 "\n"
1256 "Retrieve certificates from Windows\' cert store.\n"
1257 "\n"
1258 "store_name may be one of \'CA\', \'ROOT\' or \'MY\'. The system may provide\n"
1259 "more cert storages, too. The function returns a list of (bytes,\n"
1260 "encoding_type, trust) tuples. The encoding_type flag can be interpreted\n"
1261 "with X509_ASN_ENCODING or PKCS_7_ASN_ENCODING. The trust setting is either\n"
1262 "a set of OIDs or the boolean True.");
1263
1264 #define _SSL_ENUM_CERTIFICATES_METHODDEF \
1265 {"enum_certificates", _PyCFunction_CAST(_ssl_enum_certificates), METH_FASTCALL|METH_KEYWORDS, _ssl_enum_certificates__doc__},
1266
1267 static PyObject *
1268 _ssl_enum_certificates_impl(PyObject *module, const char *store_name);
1269
1270 static PyObject *
_ssl_enum_certificates(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)1271 _ssl_enum_certificates(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1272 {
1273 PyObject *return_value = NULL;
1274 static const char * const _keywords[] = {"store_name", NULL};
1275 static _PyArg_Parser _parser = {NULL, _keywords, "enum_certificates", 0};
1276 PyObject *argsbuf[1];
1277 const char *store_name;
1278
1279 args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
1280 if (!args) {
1281 goto exit;
1282 }
1283 if (!PyUnicode_Check(args[0])) {
1284 _PyArg_BadArgument("enum_certificates", "argument 'store_name'", "str", args[0]);
1285 goto exit;
1286 }
1287 Py_ssize_t store_name_length;
1288 store_name = PyUnicode_AsUTF8AndSize(args[0], &store_name_length);
1289 if (store_name == NULL) {
1290 goto exit;
1291 }
1292 if (strlen(store_name) != (size_t)store_name_length) {
1293 PyErr_SetString(PyExc_ValueError, "embedded null character");
1294 goto exit;
1295 }
1296 return_value = _ssl_enum_certificates_impl(module, store_name);
1297
1298 exit:
1299 return return_value;
1300 }
1301
1302 #endif /* defined(_MSC_VER) */
1303
1304 #if defined(_MSC_VER)
1305
1306 PyDoc_STRVAR(_ssl_enum_crls__doc__,
1307 "enum_crls($module, /, store_name)\n"
1308 "--\n"
1309 "\n"
1310 "Retrieve CRLs from Windows\' cert store.\n"
1311 "\n"
1312 "store_name may be one of \'CA\', \'ROOT\' or \'MY\'. The system may provide\n"
1313 "more cert storages, too. The function returns a list of (bytes,\n"
1314 "encoding_type) tuples. The encoding_type flag can be interpreted with\n"
1315 "X509_ASN_ENCODING or PKCS_7_ASN_ENCODING.");
1316
1317 #define _SSL_ENUM_CRLS_METHODDEF \
1318 {"enum_crls", _PyCFunction_CAST(_ssl_enum_crls), METH_FASTCALL|METH_KEYWORDS, _ssl_enum_crls__doc__},
1319
1320 static PyObject *
1321 _ssl_enum_crls_impl(PyObject *module, const char *store_name);
1322
1323 static PyObject *
_ssl_enum_crls(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)1324 _ssl_enum_crls(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1325 {
1326 PyObject *return_value = NULL;
1327 static const char * const _keywords[] = {"store_name", NULL};
1328 static _PyArg_Parser _parser = {NULL, _keywords, "enum_crls", 0};
1329 PyObject *argsbuf[1];
1330 const char *store_name;
1331
1332 args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
1333 if (!args) {
1334 goto exit;
1335 }
1336 if (!PyUnicode_Check(args[0])) {
1337 _PyArg_BadArgument("enum_crls", "argument 'store_name'", "str", args[0]);
1338 goto exit;
1339 }
1340 Py_ssize_t store_name_length;
1341 store_name = PyUnicode_AsUTF8AndSize(args[0], &store_name_length);
1342 if (store_name == NULL) {
1343 goto exit;
1344 }
1345 if (strlen(store_name) != (size_t)store_name_length) {
1346 PyErr_SetString(PyExc_ValueError, "embedded null character");
1347 goto exit;
1348 }
1349 return_value = _ssl_enum_crls_impl(module, store_name);
1350
1351 exit:
1352 return return_value;
1353 }
1354
1355 #endif /* defined(_MSC_VER) */
1356
1357 #ifndef _SSL_ENUM_CERTIFICATES_METHODDEF
1358 #define _SSL_ENUM_CERTIFICATES_METHODDEF
1359 #endif /* !defined(_SSL_ENUM_CERTIFICATES_METHODDEF) */
1360
1361 #ifndef _SSL_ENUM_CRLS_METHODDEF
1362 #define _SSL_ENUM_CRLS_METHODDEF
1363 #endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */
1364 /*[clinic end generated code: output=2a488dd0cbc777df input=a9049054013a1b77]*/
1365