17db96d56Sopenharmony_ci/*[clinic input]
27db96d56Sopenharmony_cipreserve
37db96d56Sopenharmony_ci[clinic start generated code]*/
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLSocket_do_handshake__doc__,
67db96d56Sopenharmony_ci"do_handshake($self, /)\n"
77db96d56Sopenharmony_ci"--\n"
87db96d56Sopenharmony_ci"\n");
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci#define _SSL__SSLSOCKET_DO_HANDSHAKE_METHODDEF    \
117db96d56Sopenharmony_ci    {"do_handshake", (PyCFunction)_ssl__SSLSocket_do_handshake, METH_NOARGS, _ssl__SSLSocket_do_handshake__doc__},
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_cistatic PyObject *
147db96d56Sopenharmony_ci_ssl__SSLSocket_do_handshake_impl(PySSLSocket *self);
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_cistatic PyObject *
177db96d56Sopenharmony_ci_ssl__SSLSocket_do_handshake(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
187db96d56Sopenharmony_ci{
197db96d56Sopenharmony_ci    return _ssl__SSLSocket_do_handshake_impl(self);
207db96d56Sopenharmony_ci}
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__test_decode_cert__doc__,
237db96d56Sopenharmony_ci"_test_decode_cert($module, path, /)\n"
247db96d56Sopenharmony_ci"--\n"
257db96d56Sopenharmony_ci"\n");
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ci#define _SSL__TEST_DECODE_CERT_METHODDEF    \
287db96d56Sopenharmony_ci    {"_test_decode_cert", (PyCFunction)_ssl__test_decode_cert, METH_O, _ssl__test_decode_cert__doc__},
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_cistatic PyObject *
317db96d56Sopenharmony_ci_ssl__test_decode_cert_impl(PyObject *module, PyObject *path);
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_cistatic PyObject *
347db96d56Sopenharmony_ci_ssl__test_decode_cert(PyObject *module, PyObject *arg)
357db96d56Sopenharmony_ci{
367db96d56Sopenharmony_ci    PyObject *return_value = NULL;
377db96d56Sopenharmony_ci    PyObject *path;
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci    if (!PyUnicode_FSConverter(arg, &path)) {
407db96d56Sopenharmony_ci        goto exit;
417db96d56Sopenharmony_ci    }
427db96d56Sopenharmony_ci    return_value = _ssl__test_decode_cert_impl(module, path);
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ciexit:
457db96d56Sopenharmony_ci    return return_value;
467db96d56Sopenharmony_ci}
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLSocket_getpeercert__doc__,
497db96d56Sopenharmony_ci"getpeercert($self, der=False, /)\n"
507db96d56Sopenharmony_ci"--\n"
517db96d56Sopenharmony_ci"\n"
527db96d56Sopenharmony_ci"Returns the certificate for the peer.\n"
537db96d56Sopenharmony_ci"\n"
547db96d56Sopenharmony_ci"If no certificate was provided, returns None.  If a certificate was\n"
557db96d56Sopenharmony_ci"provided, but not validated, returns an empty dictionary.  Otherwise\n"
567db96d56Sopenharmony_ci"returns a dict containing information about the peer certificate.\n"
577db96d56Sopenharmony_ci"\n"
587db96d56Sopenharmony_ci"If the optional argument is True, returns a DER-encoded copy of the\n"
597db96d56Sopenharmony_ci"peer certificate, or None if no certificate was provided.  This will\n"
607db96d56Sopenharmony_ci"return the certificate even if it wasn\'t validated.");
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci#define _SSL__SSLSOCKET_GETPEERCERT_METHODDEF    \
637db96d56Sopenharmony_ci    {"getpeercert", _PyCFunction_CAST(_ssl__SSLSocket_getpeercert), METH_FASTCALL, _ssl__SSLSocket_getpeercert__doc__},
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_cistatic PyObject *
667db96d56Sopenharmony_ci_ssl__SSLSocket_getpeercert_impl(PySSLSocket *self, int binary_mode);
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_cistatic PyObject *
697db96d56Sopenharmony_ci_ssl__SSLSocket_getpeercert(PySSLSocket *self, PyObject *const *args, Py_ssize_t nargs)
707db96d56Sopenharmony_ci{
717db96d56Sopenharmony_ci    PyObject *return_value = NULL;
727db96d56Sopenharmony_ci    int binary_mode = 0;
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("getpeercert", nargs, 0, 1)) {
757db96d56Sopenharmony_ci        goto exit;
767db96d56Sopenharmony_ci    }
777db96d56Sopenharmony_ci    if (nargs < 1) {
787db96d56Sopenharmony_ci        goto skip_optional;
797db96d56Sopenharmony_ci    }
807db96d56Sopenharmony_ci    binary_mode = PyObject_IsTrue(args[0]);
817db96d56Sopenharmony_ci    if (binary_mode < 0) {
827db96d56Sopenharmony_ci        goto exit;
837db96d56Sopenharmony_ci    }
847db96d56Sopenharmony_ciskip_optional:
857db96d56Sopenharmony_ci    return_value = _ssl__SSLSocket_getpeercert_impl(self, binary_mode);
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ciexit:
887db96d56Sopenharmony_ci    return return_value;
897db96d56Sopenharmony_ci}
907db96d56Sopenharmony_ci
917db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLSocket_get_verified_chain__doc__,
927db96d56Sopenharmony_ci"get_verified_chain($self, /)\n"
937db96d56Sopenharmony_ci"--\n"
947db96d56Sopenharmony_ci"\n");
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ci#define _SSL__SSLSOCKET_GET_VERIFIED_CHAIN_METHODDEF    \
977db96d56Sopenharmony_ci    {"get_verified_chain", (PyCFunction)_ssl__SSLSocket_get_verified_chain, METH_NOARGS, _ssl__SSLSocket_get_verified_chain__doc__},
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_cistatic PyObject *
1007db96d56Sopenharmony_ci_ssl__SSLSocket_get_verified_chain_impl(PySSLSocket *self);
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_cistatic PyObject *
1037db96d56Sopenharmony_ci_ssl__SSLSocket_get_verified_chain(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
1047db96d56Sopenharmony_ci{
1057db96d56Sopenharmony_ci    return _ssl__SSLSocket_get_verified_chain_impl(self);
1067db96d56Sopenharmony_ci}
1077db96d56Sopenharmony_ci
1087db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLSocket_get_unverified_chain__doc__,
1097db96d56Sopenharmony_ci"get_unverified_chain($self, /)\n"
1107db96d56Sopenharmony_ci"--\n"
1117db96d56Sopenharmony_ci"\n");
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci#define _SSL__SSLSOCKET_GET_UNVERIFIED_CHAIN_METHODDEF    \
1147db96d56Sopenharmony_ci    {"get_unverified_chain", (PyCFunction)_ssl__SSLSocket_get_unverified_chain, METH_NOARGS, _ssl__SSLSocket_get_unverified_chain__doc__},
1157db96d56Sopenharmony_ci
1167db96d56Sopenharmony_cistatic PyObject *
1177db96d56Sopenharmony_ci_ssl__SSLSocket_get_unverified_chain_impl(PySSLSocket *self);
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_cistatic PyObject *
1207db96d56Sopenharmony_ci_ssl__SSLSocket_get_unverified_chain(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
1217db96d56Sopenharmony_ci{
1227db96d56Sopenharmony_ci    return _ssl__SSLSocket_get_unverified_chain_impl(self);
1237db96d56Sopenharmony_ci}
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLSocket_shared_ciphers__doc__,
1267db96d56Sopenharmony_ci"shared_ciphers($self, /)\n"
1277db96d56Sopenharmony_ci"--\n"
1287db96d56Sopenharmony_ci"\n");
1297db96d56Sopenharmony_ci
1307db96d56Sopenharmony_ci#define _SSL__SSLSOCKET_SHARED_CIPHERS_METHODDEF    \
1317db96d56Sopenharmony_ci    {"shared_ciphers", (PyCFunction)_ssl__SSLSocket_shared_ciphers, METH_NOARGS, _ssl__SSLSocket_shared_ciphers__doc__},
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_cistatic PyObject *
1347db96d56Sopenharmony_ci_ssl__SSLSocket_shared_ciphers_impl(PySSLSocket *self);
1357db96d56Sopenharmony_ci
1367db96d56Sopenharmony_cistatic PyObject *
1377db96d56Sopenharmony_ci_ssl__SSLSocket_shared_ciphers(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
1387db96d56Sopenharmony_ci{
1397db96d56Sopenharmony_ci    return _ssl__SSLSocket_shared_ciphers_impl(self);
1407db96d56Sopenharmony_ci}
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLSocket_cipher__doc__,
1437db96d56Sopenharmony_ci"cipher($self, /)\n"
1447db96d56Sopenharmony_ci"--\n"
1457db96d56Sopenharmony_ci"\n");
1467db96d56Sopenharmony_ci
1477db96d56Sopenharmony_ci#define _SSL__SSLSOCKET_CIPHER_METHODDEF    \
1487db96d56Sopenharmony_ci    {"cipher", (PyCFunction)_ssl__SSLSocket_cipher, METH_NOARGS, _ssl__SSLSocket_cipher__doc__},
1497db96d56Sopenharmony_ci
1507db96d56Sopenharmony_cistatic PyObject *
1517db96d56Sopenharmony_ci_ssl__SSLSocket_cipher_impl(PySSLSocket *self);
1527db96d56Sopenharmony_ci
1537db96d56Sopenharmony_cistatic PyObject *
1547db96d56Sopenharmony_ci_ssl__SSLSocket_cipher(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
1557db96d56Sopenharmony_ci{
1567db96d56Sopenharmony_ci    return _ssl__SSLSocket_cipher_impl(self);
1577db96d56Sopenharmony_ci}
1587db96d56Sopenharmony_ci
1597db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLSocket_version__doc__,
1607db96d56Sopenharmony_ci"version($self, /)\n"
1617db96d56Sopenharmony_ci"--\n"
1627db96d56Sopenharmony_ci"\n");
1637db96d56Sopenharmony_ci
1647db96d56Sopenharmony_ci#define _SSL__SSLSOCKET_VERSION_METHODDEF    \
1657db96d56Sopenharmony_ci    {"version", (PyCFunction)_ssl__SSLSocket_version, METH_NOARGS, _ssl__SSLSocket_version__doc__},
1667db96d56Sopenharmony_ci
1677db96d56Sopenharmony_cistatic PyObject *
1687db96d56Sopenharmony_ci_ssl__SSLSocket_version_impl(PySSLSocket *self);
1697db96d56Sopenharmony_ci
1707db96d56Sopenharmony_cistatic PyObject *
1717db96d56Sopenharmony_ci_ssl__SSLSocket_version(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
1727db96d56Sopenharmony_ci{
1737db96d56Sopenharmony_ci    return _ssl__SSLSocket_version_impl(self);
1747db96d56Sopenharmony_ci}
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLSocket_selected_alpn_protocol__doc__,
1777db96d56Sopenharmony_ci"selected_alpn_protocol($self, /)\n"
1787db96d56Sopenharmony_ci"--\n"
1797db96d56Sopenharmony_ci"\n");
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci#define _SSL__SSLSOCKET_SELECTED_ALPN_PROTOCOL_METHODDEF    \
1827db96d56Sopenharmony_ci    {"selected_alpn_protocol", (PyCFunction)_ssl__SSLSocket_selected_alpn_protocol, METH_NOARGS, _ssl__SSLSocket_selected_alpn_protocol__doc__},
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_cistatic PyObject *
1857db96d56Sopenharmony_ci_ssl__SSLSocket_selected_alpn_protocol_impl(PySSLSocket *self);
1867db96d56Sopenharmony_ci
1877db96d56Sopenharmony_cistatic PyObject *
1887db96d56Sopenharmony_ci_ssl__SSLSocket_selected_alpn_protocol(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
1897db96d56Sopenharmony_ci{
1907db96d56Sopenharmony_ci    return _ssl__SSLSocket_selected_alpn_protocol_impl(self);
1917db96d56Sopenharmony_ci}
1927db96d56Sopenharmony_ci
1937db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLSocket_compression__doc__,
1947db96d56Sopenharmony_ci"compression($self, /)\n"
1957db96d56Sopenharmony_ci"--\n"
1967db96d56Sopenharmony_ci"\n");
1977db96d56Sopenharmony_ci
1987db96d56Sopenharmony_ci#define _SSL__SSLSOCKET_COMPRESSION_METHODDEF    \
1997db96d56Sopenharmony_ci    {"compression", (PyCFunction)_ssl__SSLSocket_compression, METH_NOARGS, _ssl__SSLSocket_compression__doc__},
2007db96d56Sopenharmony_ci
2017db96d56Sopenharmony_cistatic PyObject *
2027db96d56Sopenharmony_ci_ssl__SSLSocket_compression_impl(PySSLSocket *self);
2037db96d56Sopenharmony_ci
2047db96d56Sopenharmony_cistatic PyObject *
2057db96d56Sopenharmony_ci_ssl__SSLSocket_compression(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
2067db96d56Sopenharmony_ci{
2077db96d56Sopenharmony_ci    return _ssl__SSLSocket_compression_impl(self);
2087db96d56Sopenharmony_ci}
2097db96d56Sopenharmony_ci
2107db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLSocket_write__doc__,
2117db96d56Sopenharmony_ci"write($self, b, /)\n"
2127db96d56Sopenharmony_ci"--\n"
2137db96d56Sopenharmony_ci"\n"
2147db96d56Sopenharmony_ci"Writes the bytes-like object b into the SSL object.\n"
2157db96d56Sopenharmony_ci"\n"
2167db96d56Sopenharmony_ci"Returns the number of bytes written.");
2177db96d56Sopenharmony_ci
2187db96d56Sopenharmony_ci#define _SSL__SSLSOCKET_WRITE_METHODDEF    \
2197db96d56Sopenharmony_ci    {"write", (PyCFunction)_ssl__SSLSocket_write, METH_O, _ssl__SSLSocket_write__doc__},
2207db96d56Sopenharmony_ci
2217db96d56Sopenharmony_cistatic PyObject *
2227db96d56Sopenharmony_ci_ssl__SSLSocket_write_impl(PySSLSocket *self, Py_buffer *b);
2237db96d56Sopenharmony_ci
2247db96d56Sopenharmony_cistatic PyObject *
2257db96d56Sopenharmony_ci_ssl__SSLSocket_write(PySSLSocket *self, PyObject *arg)
2267db96d56Sopenharmony_ci{
2277db96d56Sopenharmony_ci    PyObject *return_value = NULL;
2287db96d56Sopenharmony_ci    Py_buffer b = {NULL, NULL};
2297db96d56Sopenharmony_ci
2307db96d56Sopenharmony_ci    if (PyObject_GetBuffer(arg, &b, PyBUF_SIMPLE) != 0) {
2317db96d56Sopenharmony_ci        goto exit;
2327db96d56Sopenharmony_ci    }
2337db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&b, 'C')) {
2347db96d56Sopenharmony_ci        _PyArg_BadArgument("write", "argument", "contiguous buffer", arg);
2357db96d56Sopenharmony_ci        goto exit;
2367db96d56Sopenharmony_ci    }
2377db96d56Sopenharmony_ci    return_value = _ssl__SSLSocket_write_impl(self, &b);
2387db96d56Sopenharmony_ci
2397db96d56Sopenharmony_ciexit:
2407db96d56Sopenharmony_ci    /* Cleanup for b */
2417db96d56Sopenharmony_ci    if (b.obj) {
2427db96d56Sopenharmony_ci       PyBuffer_Release(&b);
2437db96d56Sopenharmony_ci    }
2447db96d56Sopenharmony_ci
2457db96d56Sopenharmony_ci    return return_value;
2467db96d56Sopenharmony_ci}
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLSocket_pending__doc__,
2497db96d56Sopenharmony_ci"pending($self, /)\n"
2507db96d56Sopenharmony_ci"--\n"
2517db96d56Sopenharmony_ci"\n"
2527db96d56Sopenharmony_ci"Returns the number of already decrypted bytes available for read, pending on the connection.");
2537db96d56Sopenharmony_ci
2547db96d56Sopenharmony_ci#define _SSL__SSLSOCKET_PENDING_METHODDEF    \
2557db96d56Sopenharmony_ci    {"pending", (PyCFunction)_ssl__SSLSocket_pending, METH_NOARGS, _ssl__SSLSocket_pending__doc__},
2567db96d56Sopenharmony_ci
2577db96d56Sopenharmony_cistatic PyObject *
2587db96d56Sopenharmony_ci_ssl__SSLSocket_pending_impl(PySSLSocket *self);
2597db96d56Sopenharmony_ci
2607db96d56Sopenharmony_cistatic PyObject *
2617db96d56Sopenharmony_ci_ssl__SSLSocket_pending(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
2627db96d56Sopenharmony_ci{
2637db96d56Sopenharmony_ci    return _ssl__SSLSocket_pending_impl(self);
2647db96d56Sopenharmony_ci}
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLSocket_read__doc__,
2677db96d56Sopenharmony_ci"read(size, [buffer])\n"
2687db96d56Sopenharmony_ci"Read up to size bytes from the SSL socket.");
2697db96d56Sopenharmony_ci
2707db96d56Sopenharmony_ci#define _SSL__SSLSOCKET_READ_METHODDEF    \
2717db96d56Sopenharmony_ci    {"read", (PyCFunction)_ssl__SSLSocket_read, METH_VARARGS, _ssl__SSLSocket_read__doc__},
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_cistatic PyObject *
2747db96d56Sopenharmony_ci_ssl__SSLSocket_read_impl(PySSLSocket *self, Py_ssize_t len,
2757db96d56Sopenharmony_ci                          int group_right_1, Py_buffer *buffer);
2767db96d56Sopenharmony_ci
2777db96d56Sopenharmony_cistatic PyObject *
2787db96d56Sopenharmony_ci_ssl__SSLSocket_read(PySSLSocket *self, PyObject *args)
2797db96d56Sopenharmony_ci{
2807db96d56Sopenharmony_ci    PyObject *return_value = NULL;
2817db96d56Sopenharmony_ci    Py_ssize_t len;
2827db96d56Sopenharmony_ci    int group_right_1 = 0;
2837db96d56Sopenharmony_ci    Py_buffer buffer = {NULL, NULL};
2847db96d56Sopenharmony_ci
2857db96d56Sopenharmony_ci    switch (PyTuple_GET_SIZE(args)) {
2867db96d56Sopenharmony_ci        case 1:
2877db96d56Sopenharmony_ci            if (!PyArg_ParseTuple(args, "n:read", &len)) {
2887db96d56Sopenharmony_ci                goto exit;
2897db96d56Sopenharmony_ci            }
2907db96d56Sopenharmony_ci            break;
2917db96d56Sopenharmony_ci        case 2:
2927db96d56Sopenharmony_ci            if (!PyArg_ParseTuple(args, "nw*:read", &len, &buffer)) {
2937db96d56Sopenharmony_ci                goto exit;
2947db96d56Sopenharmony_ci            }
2957db96d56Sopenharmony_ci            group_right_1 = 1;
2967db96d56Sopenharmony_ci            break;
2977db96d56Sopenharmony_ci        default:
2987db96d56Sopenharmony_ci            PyErr_SetString(PyExc_TypeError, "_ssl._SSLSocket.read requires 1 to 2 arguments");
2997db96d56Sopenharmony_ci            goto exit;
3007db96d56Sopenharmony_ci    }
3017db96d56Sopenharmony_ci    return_value = _ssl__SSLSocket_read_impl(self, len, group_right_1, &buffer);
3027db96d56Sopenharmony_ci
3037db96d56Sopenharmony_ciexit:
3047db96d56Sopenharmony_ci    /* Cleanup for buffer */
3057db96d56Sopenharmony_ci    if (buffer.obj) {
3067db96d56Sopenharmony_ci       PyBuffer_Release(&buffer);
3077db96d56Sopenharmony_ci    }
3087db96d56Sopenharmony_ci
3097db96d56Sopenharmony_ci    return return_value;
3107db96d56Sopenharmony_ci}
3117db96d56Sopenharmony_ci
3127db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLSocket_shutdown__doc__,
3137db96d56Sopenharmony_ci"shutdown($self, /)\n"
3147db96d56Sopenharmony_ci"--\n"
3157db96d56Sopenharmony_ci"\n"
3167db96d56Sopenharmony_ci"Does the SSL shutdown handshake with the remote end.");
3177db96d56Sopenharmony_ci
3187db96d56Sopenharmony_ci#define _SSL__SSLSOCKET_SHUTDOWN_METHODDEF    \
3197db96d56Sopenharmony_ci    {"shutdown", (PyCFunction)_ssl__SSLSocket_shutdown, METH_NOARGS, _ssl__SSLSocket_shutdown__doc__},
3207db96d56Sopenharmony_ci
3217db96d56Sopenharmony_cistatic PyObject *
3227db96d56Sopenharmony_ci_ssl__SSLSocket_shutdown_impl(PySSLSocket *self);
3237db96d56Sopenharmony_ci
3247db96d56Sopenharmony_cistatic PyObject *
3257db96d56Sopenharmony_ci_ssl__SSLSocket_shutdown(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
3267db96d56Sopenharmony_ci{
3277db96d56Sopenharmony_ci    return _ssl__SSLSocket_shutdown_impl(self);
3287db96d56Sopenharmony_ci}
3297db96d56Sopenharmony_ci
3307db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLSocket_get_channel_binding__doc__,
3317db96d56Sopenharmony_ci"get_channel_binding($self, /, cb_type=\'tls-unique\')\n"
3327db96d56Sopenharmony_ci"--\n"
3337db96d56Sopenharmony_ci"\n"
3347db96d56Sopenharmony_ci"Get channel binding data for current connection.\n"
3357db96d56Sopenharmony_ci"\n"
3367db96d56Sopenharmony_ci"Raise ValueError if the requested `cb_type` is not supported.  Return bytes\n"
3377db96d56Sopenharmony_ci"of the data or None if the data is not available (e.g. before the handshake).\n"
3387db96d56Sopenharmony_ci"Only \'tls-unique\' channel binding data from RFC 5929 is supported.");
3397db96d56Sopenharmony_ci
3407db96d56Sopenharmony_ci#define _SSL__SSLSOCKET_GET_CHANNEL_BINDING_METHODDEF    \
3417db96d56Sopenharmony_ci    {"get_channel_binding", _PyCFunction_CAST(_ssl__SSLSocket_get_channel_binding), METH_FASTCALL|METH_KEYWORDS, _ssl__SSLSocket_get_channel_binding__doc__},
3427db96d56Sopenharmony_ci
3437db96d56Sopenharmony_cistatic PyObject *
3447db96d56Sopenharmony_ci_ssl__SSLSocket_get_channel_binding_impl(PySSLSocket *self,
3457db96d56Sopenharmony_ci                                         const char *cb_type);
3467db96d56Sopenharmony_ci
3477db96d56Sopenharmony_cistatic PyObject *
3487db96d56Sopenharmony_ci_ssl__SSLSocket_get_channel_binding(PySSLSocket *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
3497db96d56Sopenharmony_ci{
3507db96d56Sopenharmony_ci    PyObject *return_value = NULL;
3517db96d56Sopenharmony_ci    static const char * const _keywords[] = {"cb_type", NULL};
3527db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "get_channel_binding", 0};
3537db96d56Sopenharmony_ci    PyObject *argsbuf[1];
3547db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
3557db96d56Sopenharmony_ci    const char *cb_type = "tls-unique";
3567db96d56Sopenharmony_ci
3577db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
3587db96d56Sopenharmony_ci    if (!args) {
3597db96d56Sopenharmony_ci        goto exit;
3607db96d56Sopenharmony_ci    }
3617db96d56Sopenharmony_ci    if (!noptargs) {
3627db96d56Sopenharmony_ci        goto skip_optional_pos;
3637db96d56Sopenharmony_ci    }
3647db96d56Sopenharmony_ci    if (!PyUnicode_Check(args[0])) {
3657db96d56Sopenharmony_ci        _PyArg_BadArgument("get_channel_binding", "argument 'cb_type'", "str", args[0]);
3667db96d56Sopenharmony_ci        goto exit;
3677db96d56Sopenharmony_ci    }
3687db96d56Sopenharmony_ci    Py_ssize_t cb_type_length;
3697db96d56Sopenharmony_ci    cb_type = PyUnicode_AsUTF8AndSize(args[0], &cb_type_length);
3707db96d56Sopenharmony_ci    if (cb_type == NULL) {
3717db96d56Sopenharmony_ci        goto exit;
3727db96d56Sopenharmony_ci    }
3737db96d56Sopenharmony_ci    if (strlen(cb_type) != (size_t)cb_type_length) {
3747db96d56Sopenharmony_ci        PyErr_SetString(PyExc_ValueError, "embedded null character");
3757db96d56Sopenharmony_ci        goto exit;
3767db96d56Sopenharmony_ci    }
3777db96d56Sopenharmony_ciskip_optional_pos:
3787db96d56Sopenharmony_ci    return_value = _ssl__SSLSocket_get_channel_binding_impl(self, cb_type);
3797db96d56Sopenharmony_ci
3807db96d56Sopenharmony_ciexit:
3817db96d56Sopenharmony_ci    return return_value;
3827db96d56Sopenharmony_ci}
3837db96d56Sopenharmony_ci
3847db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLSocket_verify_client_post_handshake__doc__,
3857db96d56Sopenharmony_ci"verify_client_post_handshake($self, /)\n"
3867db96d56Sopenharmony_ci"--\n"
3877db96d56Sopenharmony_ci"\n"
3887db96d56Sopenharmony_ci"Initiate TLS 1.3 post-handshake authentication");
3897db96d56Sopenharmony_ci
3907db96d56Sopenharmony_ci#define _SSL__SSLSOCKET_VERIFY_CLIENT_POST_HANDSHAKE_METHODDEF    \
3917db96d56Sopenharmony_ci    {"verify_client_post_handshake", (PyCFunction)_ssl__SSLSocket_verify_client_post_handshake, METH_NOARGS, _ssl__SSLSocket_verify_client_post_handshake__doc__},
3927db96d56Sopenharmony_ci
3937db96d56Sopenharmony_cistatic PyObject *
3947db96d56Sopenharmony_ci_ssl__SSLSocket_verify_client_post_handshake_impl(PySSLSocket *self);
3957db96d56Sopenharmony_ci
3967db96d56Sopenharmony_cistatic PyObject *
3977db96d56Sopenharmony_ci_ssl__SSLSocket_verify_client_post_handshake(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
3987db96d56Sopenharmony_ci{
3997db96d56Sopenharmony_ci    return _ssl__SSLSocket_verify_client_post_handshake_impl(self);
4007db96d56Sopenharmony_ci}
4017db96d56Sopenharmony_ci
4027db96d56Sopenharmony_cistatic PyObject *
4037db96d56Sopenharmony_ci_ssl__SSLContext_impl(PyTypeObject *type, int proto_version);
4047db96d56Sopenharmony_ci
4057db96d56Sopenharmony_cistatic PyObject *
4067db96d56Sopenharmony_ci_ssl__SSLContext(PyTypeObject *type, PyObject *args, PyObject *kwargs)
4077db96d56Sopenharmony_ci{
4087db96d56Sopenharmony_ci    PyObject *return_value = NULL;
4097db96d56Sopenharmony_ci    int proto_version;
4107db96d56Sopenharmony_ci
4117db96d56Sopenharmony_ci    if ((type == get_state_type(type)->PySSLContext_Type ||
4127db96d56Sopenharmony_ci         type->tp_init == get_state_type(type)->PySSLContext_Type->tp_init) &&
4137db96d56Sopenharmony_ci        !_PyArg_NoKeywords("_SSLContext", kwargs)) {
4147db96d56Sopenharmony_ci        goto exit;
4157db96d56Sopenharmony_ci    }
4167db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("_SSLContext", PyTuple_GET_SIZE(args), 1, 1)) {
4177db96d56Sopenharmony_ci        goto exit;
4187db96d56Sopenharmony_ci    }
4197db96d56Sopenharmony_ci    proto_version = _PyLong_AsInt(PyTuple_GET_ITEM(args, 0));
4207db96d56Sopenharmony_ci    if (proto_version == -1 && PyErr_Occurred()) {
4217db96d56Sopenharmony_ci        goto exit;
4227db96d56Sopenharmony_ci    }
4237db96d56Sopenharmony_ci    return_value = _ssl__SSLContext_impl(type, proto_version);
4247db96d56Sopenharmony_ci
4257db96d56Sopenharmony_ciexit:
4267db96d56Sopenharmony_ci    return return_value;
4277db96d56Sopenharmony_ci}
4287db96d56Sopenharmony_ci
4297db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLContext_set_ciphers__doc__,
4307db96d56Sopenharmony_ci"set_ciphers($self, cipherlist, /)\n"
4317db96d56Sopenharmony_ci"--\n"
4327db96d56Sopenharmony_ci"\n");
4337db96d56Sopenharmony_ci
4347db96d56Sopenharmony_ci#define _SSL__SSLCONTEXT_SET_CIPHERS_METHODDEF    \
4357db96d56Sopenharmony_ci    {"set_ciphers", (PyCFunction)_ssl__SSLContext_set_ciphers, METH_O, _ssl__SSLContext_set_ciphers__doc__},
4367db96d56Sopenharmony_ci
4377db96d56Sopenharmony_cistatic PyObject *
4387db96d56Sopenharmony_ci_ssl__SSLContext_set_ciphers_impl(PySSLContext *self, const char *cipherlist);
4397db96d56Sopenharmony_ci
4407db96d56Sopenharmony_cistatic PyObject *
4417db96d56Sopenharmony_ci_ssl__SSLContext_set_ciphers(PySSLContext *self, PyObject *arg)
4427db96d56Sopenharmony_ci{
4437db96d56Sopenharmony_ci    PyObject *return_value = NULL;
4447db96d56Sopenharmony_ci    const char *cipherlist;
4457db96d56Sopenharmony_ci
4467db96d56Sopenharmony_ci    if (!PyUnicode_Check(arg)) {
4477db96d56Sopenharmony_ci        _PyArg_BadArgument("set_ciphers", "argument", "str", arg);
4487db96d56Sopenharmony_ci        goto exit;
4497db96d56Sopenharmony_ci    }
4507db96d56Sopenharmony_ci    Py_ssize_t cipherlist_length;
4517db96d56Sopenharmony_ci    cipherlist = PyUnicode_AsUTF8AndSize(arg, &cipherlist_length);
4527db96d56Sopenharmony_ci    if (cipherlist == NULL) {
4537db96d56Sopenharmony_ci        goto exit;
4547db96d56Sopenharmony_ci    }
4557db96d56Sopenharmony_ci    if (strlen(cipherlist) != (size_t)cipherlist_length) {
4567db96d56Sopenharmony_ci        PyErr_SetString(PyExc_ValueError, "embedded null character");
4577db96d56Sopenharmony_ci        goto exit;
4587db96d56Sopenharmony_ci    }
4597db96d56Sopenharmony_ci    return_value = _ssl__SSLContext_set_ciphers_impl(self, cipherlist);
4607db96d56Sopenharmony_ci
4617db96d56Sopenharmony_ciexit:
4627db96d56Sopenharmony_ci    return return_value;
4637db96d56Sopenharmony_ci}
4647db96d56Sopenharmony_ci
4657db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLContext_get_ciphers__doc__,
4667db96d56Sopenharmony_ci"get_ciphers($self, /)\n"
4677db96d56Sopenharmony_ci"--\n"
4687db96d56Sopenharmony_ci"\n");
4697db96d56Sopenharmony_ci
4707db96d56Sopenharmony_ci#define _SSL__SSLCONTEXT_GET_CIPHERS_METHODDEF    \
4717db96d56Sopenharmony_ci    {"get_ciphers", (PyCFunction)_ssl__SSLContext_get_ciphers, METH_NOARGS, _ssl__SSLContext_get_ciphers__doc__},
4727db96d56Sopenharmony_ci
4737db96d56Sopenharmony_cistatic PyObject *
4747db96d56Sopenharmony_ci_ssl__SSLContext_get_ciphers_impl(PySSLContext *self);
4757db96d56Sopenharmony_ci
4767db96d56Sopenharmony_cistatic PyObject *
4777db96d56Sopenharmony_ci_ssl__SSLContext_get_ciphers(PySSLContext *self, PyObject *Py_UNUSED(ignored))
4787db96d56Sopenharmony_ci{
4797db96d56Sopenharmony_ci    return _ssl__SSLContext_get_ciphers_impl(self);
4807db96d56Sopenharmony_ci}
4817db96d56Sopenharmony_ci
4827db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLContext__set_alpn_protocols__doc__,
4837db96d56Sopenharmony_ci"_set_alpn_protocols($self, protos, /)\n"
4847db96d56Sopenharmony_ci"--\n"
4857db96d56Sopenharmony_ci"\n");
4867db96d56Sopenharmony_ci
4877db96d56Sopenharmony_ci#define _SSL__SSLCONTEXT__SET_ALPN_PROTOCOLS_METHODDEF    \
4887db96d56Sopenharmony_ci    {"_set_alpn_protocols", (PyCFunction)_ssl__SSLContext__set_alpn_protocols, METH_O, _ssl__SSLContext__set_alpn_protocols__doc__},
4897db96d56Sopenharmony_ci
4907db96d56Sopenharmony_cistatic PyObject *
4917db96d56Sopenharmony_ci_ssl__SSLContext__set_alpn_protocols_impl(PySSLContext *self,
4927db96d56Sopenharmony_ci                                          Py_buffer *protos);
4937db96d56Sopenharmony_ci
4947db96d56Sopenharmony_cistatic PyObject *
4957db96d56Sopenharmony_ci_ssl__SSLContext__set_alpn_protocols(PySSLContext *self, PyObject *arg)
4967db96d56Sopenharmony_ci{
4977db96d56Sopenharmony_ci    PyObject *return_value = NULL;
4987db96d56Sopenharmony_ci    Py_buffer protos = {NULL, NULL};
4997db96d56Sopenharmony_ci
5007db96d56Sopenharmony_ci    if (PyObject_GetBuffer(arg, &protos, PyBUF_SIMPLE) != 0) {
5017db96d56Sopenharmony_ci        goto exit;
5027db96d56Sopenharmony_ci    }
5037db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&protos, 'C')) {
5047db96d56Sopenharmony_ci        _PyArg_BadArgument("_set_alpn_protocols", "argument", "contiguous buffer", arg);
5057db96d56Sopenharmony_ci        goto exit;
5067db96d56Sopenharmony_ci    }
5077db96d56Sopenharmony_ci    return_value = _ssl__SSLContext__set_alpn_protocols_impl(self, &protos);
5087db96d56Sopenharmony_ci
5097db96d56Sopenharmony_ciexit:
5107db96d56Sopenharmony_ci    /* Cleanup for protos */
5117db96d56Sopenharmony_ci    if (protos.obj) {
5127db96d56Sopenharmony_ci       PyBuffer_Release(&protos);
5137db96d56Sopenharmony_ci    }
5147db96d56Sopenharmony_ci
5157db96d56Sopenharmony_ci    return return_value;
5167db96d56Sopenharmony_ci}
5177db96d56Sopenharmony_ci
5187db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLContext_load_cert_chain__doc__,
5197db96d56Sopenharmony_ci"load_cert_chain($self, /, certfile, keyfile=None, password=None)\n"
5207db96d56Sopenharmony_ci"--\n"
5217db96d56Sopenharmony_ci"\n");
5227db96d56Sopenharmony_ci
5237db96d56Sopenharmony_ci#define _SSL__SSLCONTEXT_LOAD_CERT_CHAIN_METHODDEF    \
5247db96d56Sopenharmony_ci    {"load_cert_chain", _PyCFunction_CAST(_ssl__SSLContext_load_cert_chain), METH_FASTCALL|METH_KEYWORDS, _ssl__SSLContext_load_cert_chain__doc__},
5257db96d56Sopenharmony_ci
5267db96d56Sopenharmony_cistatic PyObject *
5277db96d56Sopenharmony_ci_ssl__SSLContext_load_cert_chain_impl(PySSLContext *self, PyObject *certfile,
5287db96d56Sopenharmony_ci                                      PyObject *keyfile, PyObject *password);
5297db96d56Sopenharmony_ci
5307db96d56Sopenharmony_cistatic PyObject *
5317db96d56Sopenharmony_ci_ssl__SSLContext_load_cert_chain(PySSLContext *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
5327db96d56Sopenharmony_ci{
5337db96d56Sopenharmony_ci    PyObject *return_value = NULL;
5347db96d56Sopenharmony_ci    static const char * const _keywords[] = {"certfile", "keyfile", "password", NULL};
5357db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "load_cert_chain", 0};
5367db96d56Sopenharmony_ci    PyObject *argsbuf[3];
5377db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
5387db96d56Sopenharmony_ci    PyObject *certfile;
5397db96d56Sopenharmony_ci    PyObject *keyfile = Py_None;
5407db96d56Sopenharmony_ci    PyObject *password = Py_None;
5417db96d56Sopenharmony_ci
5427db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 3, 0, argsbuf);
5437db96d56Sopenharmony_ci    if (!args) {
5447db96d56Sopenharmony_ci        goto exit;
5457db96d56Sopenharmony_ci    }
5467db96d56Sopenharmony_ci    certfile = args[0];
5477db96d56Sopenharmony_ci    if (!noptargs) {
5487db96d56Sopenharmony_ci        goto skip_optional_pos;
5497db96d56Sopenharmony_ci    }
5507db96d56Sopenharmony_ci    if (args[1]) {
5517db96d56Sopenharmony_ci        keyfile = args[1];
5527db96d56Sopenharmony_ci        if (!--noptargs) {
5537db96d56Sopenharmony_ci            goto skip_optional_pos;
5547db96d56Sopenharmony_ci        }
5557db96d56Sopenharmony_ci    }
5567db96d56Sopenharmony_ci    password = args[2];
5577db96d56Sopenharmony_ciskip_optional_pos:
5587db96d56Sopenharmony_ci    return_value = _ssl__SSLContext_load_cert_chain_impl(self, certfile, keyfile, password);
5597db96d56Sopenharmony_ci
5607db96d56Sopenharmony_ciexit:
5617db96d56Sopenharmony_ci    return return_value;
5627db96d56Sopenharmony_ci}
5637db96d56Sopenharmony_ci
5647db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLContext_load_verify_locations__doc__,
5657db96d56Sopenharmony_ci"load_verify_locations($self, /, cafile=None, capath=None, cadata=None)\n"
5667db96d56Sopenharmony_ci"--\n"
5677db96d56Sopenharmony_ci"\n");
5687db96d56Sopenharmony_ci
5697db96d56Sopenharmony_ci#define _SSL__SSLCONTEXT_LOAD_VERIFY_LOCATIONS_METHODDEF    \
5707db96d56Sopenharmony_ci    {"load_verify_locations", _PyCFunction_CAST(_ssl__SSLContext_load_verify_locations), METH_FASTCALL|METH_KEYWORDS, _ssl__SSLContext_load_verify_locations__doc__},
5717db96d56Sopenharmony_ci
5727db96d56Sopenharmony_cistatic PyObject *
5737db96d56Sopenharmony_ci_ssl__SSLContext_load_verify_locations_impl(PySSLContext *self,
5747db96d56Sopenharmony_ci                                            PyObject *cafile,
5757db96d56Sopenharmony_ci                                            PyObject *capath,
5767db96d56Sopenharmony_ci                                            PyObject *cadata);
5777db96d56Sopenharmony_ci
5787db96d56Sopenharmony_cistatic PyObject *
5797db96d56Sopenharmony_ci_ssl__SSLContext_load_verify_locations(PySSLContext *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
5807db96d56Sopenharmony_ci{
5817db96d56Sopenharmony_ci    PyObject *return_value = NULL;
5827db96d56Sopenharmony_ci    static const char * const _keywords[] = {"cafile", "capath", "cadata", NULL};
5837db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "load_verify_locations", 0};
5847db96d56Sopenharmony_ci    PyObject *argsbuf[3];
5857db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
5867db96d56Sopenharmony_ci    PyObject *cafile = Py_None;
5877db96d56Sopenharmony_ci    PyObject *capath = Py_None;
5887db96d56Sopenharmony_ci    PyObject *cadata = Py_None;
5897db96d56Sopenharmony_ci
5907db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 3, 0, argsbuf);
5917db96d56Sopenharmony_ci    if (!args) {
5927db96d56Sopenharmony_ci        goto exit;
5937db96d56Sopenharmony_ci    }
5947db96d56Sopenharmony_ci    if (!noptargs) {
5957db96d56Sopenharmony_ci        goto skip_optional_pos;
5967db96d56Sopenharmony_ci    }
5977db96d56Sopenharmony_ci    if (args[0]) {
5987db96d56Sopenharmony_ci        cafile = args[0];
5997db96d56Sopenharmony_ci        if (!--noptargs) {
6007db96d56Sopenharmony_ci            goto skip_optional_pos;
6017db96d56Sopenharmony_ci        }
6027db96d56Sopenharmony_ci    }
6037db96d56Sopenharmony_ci    if (args[1]) {
6047db96d56Sopenharmony_ci        capath = args[1];
6057db96d56Sopenharmony_ci        if (!--noptargs) {
6067db96d56Sopenharmony_ci            goto skip_optional_pos;
6077db96d56Sopenharmony_ci        }
6087db96d56Sopenharmony_ci    }
6097db96d56Sopenharmony_ci    cadata = args[2];
6107db96d56Sopenharmony_ciskip_optional_pos:
6117db96d56Sopenharmony_ci    return_value = _ssl__SSLContext_load_verify_locations_impl(self, cafile, capath, cadata);
6127db96d56Sopenharmony_ci
6137db96d56Sopenharmony_ciexit:
6147db96d56Sopenharmony_ci    return return_value;
6157db96d56Sopenharmony_ci}
6167db96d56Sopenharmony_ci
6177db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLContext_load_dh_params__doc__,
6187db96d56Sopenharmony_ci"load_dh_params($self, path, /)\n"
6197db96d56Sopenharmony_ci"--\n"
6207db96d56Sopenharmony_ci"\n");
6217db96d56Sopenharmony_ci
6227db96d56Sopenharmony_ci#define _SSL__SSLCONTEXT_LOAD_DH_PARAMS_METHODDEF    \
6237db96d56Sopenharmony_ci    {"load_dh_params", (PyCFunction)_ssl__SSLContext_load_dh_params, METH_O, _ssl__SSLContext_load_dh_params__doc__},
6247db96d56Sopenharmony_ci
6257db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLContext__wrap_socket__doc__,
6267db96d56Sopenharmony_ci"_wrap_socket($self, /, sock, server_side, server_hostname=None, *,\n"
6277db96d56Sopenharmony_ci"             owner=None, session=None)\n"
6287db96d56Sopenharmony_ci"--\n"
6297db96d56Sopenharmony_ci"\n");
6307db96d56Sopenharmony_ci
6317db96d56Sopenharmony_ci#define _SSL__SSLCONTEXT__WRAP_SOCKET_METHODDEF    \
6327db96d56Sopenharmony_ci    {"_wrap_socket", _PyCFunction_CAST(_ssl__SSLContext__wrap_socket), METH_FASTCALL|METH_KEYWORDS, _ssl__SSLContext__wrap_socket__doc__},
6337db96d56Sopenharmony_ci
6347db96d56Sopenharmony_cistatic PyObject *
6357db96d56Sopenharmony_ci_ssl__SSLContext__wrap_socket_impl(PySSLContext *self, PyObject *sock,
6367db96d56Sopenharmony_ci                                   int server_side, PyObject *hostname_obj,
6377db96d56Sopenharmony_ci                                   PyObject *owner, PyObject *session);
6387db96d56Sopenharmony_ci
6397db96d56Sopenharmony_cistatic PyObject *
6407db96d56Sopenharmony_ci_ssl__SSLContext__wrap_socket(PySSLContext *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
6417db96d56Sopenharmony_ci{
6427db96d56Sopenharmony_ci    PyObject *return_value = NULL;
6437db96d56Sopenharmony_ci    static const char * const _keywords[] = {"sock", "server_side", "server_hostname", "owner", "session", NULL};
6447db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "_wrap_socket", 0};
6457db96d56Sopenharmony_ci    PyObject *argsbuf[5];
6467db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
6477db96d56Sopenharmony_ci    PyObject *sock;
6487db96d56Sopenharmony_ci    int server_side;
6497db96d56Sopenharmony_ci    PyObject *hostname_obj = Py_None;
6507db96d56Sopenharmony_ci    PyObject *owner = Py_None;
6517db96d56Sopenharmony_ci    PyObject *session = Py_None;
6527db96d56Sopenharmony_ci
6537db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 3, 0, argsbuf);
6547db96d56Sopenharmony_ci    if (!args) {
6557db96d56Sopenharmony_ci        goto exit;
6567db96d56Sopenharmony_ci    }
6577db96d56Sopenharmony_ci    if (!PyObject_TypeCheck(args[0], get_state_ctx(self)->Sock_Type)) {
6587db96d56Sopenharmony_ci        _PyArg_BadArgument("_wrap_socket", "argument 'sock'", (get_state_ctx(self)->Sock_Type)->tp_name, args[0]);
6597db96d56Sopenharmony_ci        goto exit;
6607db96d56Sopenharmony_ci    }
6617db96d56Sopenharmony_ci    sock = args[0];
6627db96d56Sopenharmony_ci    server_side = _PyLong_AsInt(args[1]);
6637db96d56Sopenharmony_ci    if (server_side == -1 && PyErr_Occurred()) {
6647db96d56Sopenharmony_ci        goto exit;
6657db96d56Sopenharmony_ci    }
6667db96d56Sopenharmony_ci    if (!noptargs) {
6677db96d56Sopenharmony_ci        goto skip_optional_pos;
6687db96d56Sopenharmony_ci    }
6697db96d56Sopenharmony_ci    if (args[2]) {
6707db96d56Sopenharmony_ci        hostname_obj = args[2];
6717db96d56Sopenharmony_ci        if (!--noptargs) {
6727db96d56Sopenharmony_ci            goto skip_optional_pos;
6737db96d56Sopenharmony_ci        }
6747db96d56Sopenharmony_ci    }
6757db96d56Sopenharmony_ciskip_optional_pos:
6767db96d56Sopenharmony_ci    if (!noptargs) {
6777db96d56Sopenharmony_ci        goto skip_optional_kwonly;
6787db96d56Sopenharmony_ci    }
6797db96d56Sopenharmony_ci    if (args[3]) {
6807db96d56Sopenharmony_ci        owner = args[3];
6817db96d56Sopenharmony_ci        if (!--noptargs) {
6827db96d56Sopenharmony_ci            goto skip_optional_kwonly;
6837db96d56Sopenharmony_ci        }
6847db96d56Sopenharmony_ci    }
6857db96d56Sopenharmony_ci    session = args[4];
6867db96d56Sopenharmony_ciskip_optional_kwonly:
6877db96d56Sopenharmony_ci    return_value = _ssl__SSLContext__wrap_socket_impl(self, sock, server_side, hostname_obj, owner, session);
6887db96d56Sopenharmony_ci
6897db96d56Sopenharmony_ciexit:
6907db96d56Sopenharmony_ci    return return_value;
6917db96d56Sopenharmony_ci}
6927db96d56Sopenharmony_ci
6937db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLContext__wrap_bio__doc__,
6947db96d56Sopenharmony_ci"_wrap_bio($self, /, incoming, outgoing, server_side,\n"
6957db96d56Sopenharmony_ci"          server_hostname=None, *, owner=None, session=None)\n"
6967db96d56Sopenharmony_ci"--\n"
6977db96d56Sopenharmony_ci"\n");
6987db96d56Sopenharmony_ci
6997db96d56Sopenharmony_ci#define _SSL__SSLCONTEXT__WRAP_BIO_METHODDEF    \
7007db96d56Sopenharmony_ci    {"_wrap_bio", _PyCFunction_CAST(_ssl__SSLContext__wrap_bio), METH_FASTCALL|METH_KEYWORDS, _ssl__SSLContext__wrap_bio__doc__},
7017db96d56Sopenharmony_ci
7027db96d56Sopenharmony_cistatic PyObject *
7037db96d56Sopenharmony_ci_ssl__SSLContext__wrap_bio_impl(PySSLContext *self, PySSLMemoryBIO *incoming,
7047db96d56Sopenharmony_ci                                PySSLMemoryBIO *outgoing, int server_side,
7057db96d56Sopenharmony_ci                                PyObject *hostname_obj, PyObject *owner,
7067db96d56Sopenharmony_ci                                PyObject *session);
7077db96d56Sopenharmony_ci
7087db96d56Sopenharmony_cistatic PyObject *
7097db96d56Sopenharmony_ci_ssl__SSLContext__wrap_bio(PySSLContext *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
7107db96d56Sopenharmony_ci{
7117db96d56Sopenharmony_ci    PyObject *return_value = NULL;
7127db96d56Sopenharmony_ci    static const char * const _keywords[] = {"incoming", "outgoing", "server_side", "server_hostname", "owner", "session", NULL};
7137db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "_wrap_bio", 0};
7147db96d56Sopenharmony_ci    PyObject *argsbuf[6];
7157db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 3;
7167db96d56Sopenharmony_ci    PySSLMemoryBIO *incoming;
7177db96d56Sopenharmony_ci    PySSLMemoryBIO *outgoing;
7187db96d56Sopenharmony_ci    int server_side;
7197db96d56Sopenharmony_ci    PyObject *hostname_obj = Py_None;
7207db96d56Sopenharmony_ci    PyObject *owner = Py_None;
7217db96d56Sopenharmony_ci    PyObject *session = Py_None;
7227db96d56Sopenharmony_ci
7237db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 4, 0, argsbuf);
7247db96d56Sopenharmony_ci    if (!args) {
7257db96d56Sopenharmony_ci        goto exit;
7267db96d56Sopenharmony_ci    }
7277db96d56Sopenharmony_ci    if (!PyObject_TypeCheck(args[0], get_state_ctx(self)->PySSLMemoryBIO_Type)) {
7287db96d56Sopenharmony_ci        _PyArg_BadArgument("_wrap_bio", "argument 'incoming'", (get_state_ctx(self)->PySSLMemoryBIO_Type)->tp_name, args[0]);
7297db96d56Sopenharmony_ci        goto exit;
7307db96d56Sopenharmony_ci    }
7317db96d56Sopenharmony_ci    incoming = (PySSLMemoryBIO *)args[0];
7327db96d56Sopenharmony_ci    if (!PyObject_TypeCheck(args[1], get_state_ctx(self)->PySSLMemoryBIO_Type)) {
7337db96d56Sopenharmony_ci        _PyArg_BadArgument("_wrap_bio", "argument 'outgoing'", (get_state_ctx(self)->PySSLMemoryBIO_Type)->tp_name, args[1]);
7347db96d56Sopenharmony_ci        goto exit;
7357db96d56Sopenharmony_ci    }
7367db96d56Sopenharmony_ci    outgoing = (PySSLMemoryBIO *)args[1];
7377db96d56Sopenharmony_ci    server_side = _PyLong_AsInt(args[2]);
7387db96d56Sopenharmony_ci    if (server_side == -1 && PyErr_Occurred()) {
7397db96d56Sopenharmony_ci        goto exit;
7407db96d56Sopenharmony_ci    }
7417db96d56Sopenharmony_ci    if (!noptargs) {
7427db96d56Sopenharmony_ci        goto skip_optional_pos;
7437db96d56Sopenharmony_ci    }
7447db96d56Sopenharmony_ci    if (args[3]) {
7457db96d56Sopenharmony_ci        hostname_obj = args[3];
7467db96d56Sopenharmony_ci        if (!--noptargs) {
7477db96d56Sopenharmony_ci            goto skip_optional_pos;
7487db96d56Sopenharmony_ci        }
7497db96d56Sopenharmony_ci    }
7507db96d56Sopenharmony_ciskip_optional_pos:
7517db96d56Sopenharmony_ci    if (!noptargs) {
7527db96d56Sopenharmony_ci        goto skip_optional_kwonly;
7537db96d56Sopenharmony_ci    }
7547db96d56Sopenharmony_ci    if (args[4]) {
7557db96d56Sopenharmony_ci        owner = args[4];
7567db96d56Sopenharmony_ci        if (!--noptargs) {
7577db96d56Sopenharmony_ci            goto skip_optional_kwonly;
7587db96d56Sopenharmony_ci        }
7597db96d56Sopenharmony_ci    }
7607db96d56Sopenharmony_ci    session = args[5];
7617db96d56Sopenharmony_ciskip_optional_kwonly:
7627db96d56Sopenharmony_ci    return_value = _ssl__SSLContext__wrap_bio_impl(self, incoming, outgoing, server_side, hostname_obj, owner, session);
7637db96d56Sopenharmony_ci
7647db96d56Sopenharmony_ciexit:
7657db96d56Sopenharmony_ci    return return_value;
7667db96d56Sopenharmony_ci}
7677db96d56Sopenharmony_ci
7687db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLContext_session_stats__doc__,
7697db96d56Sopenharmony_ci"session_stats($self, /)\n"
7707db96d56Sopenharmony_ci"--\n"
7717db96d56Sopenharmony_ci"\n");
7727db96d56Sopenharmony_ci
7737db96d56Sopenharmony_ci#define _SSL__SSLCONTEXT_SESSION_STATS_METHODDEF    \
7747db96d56Sopenharmony_ci    {"session_stats", (PyCFunction)_ssl__SSLContext_session_stats, METH_NOARGS, _ssl__SSLContext_session_stats__doc__},
7757db96d56Sopenharmony_ci
7767db96d56Sopenharmony_cistatic PyObject *
7777db96d56Sopenharmony_ci_ssl__SSLContext_session_stats_impl(PySSLContext *self);
7787db96d56Sopenharmony_ci
7797db96d56Sopenharmony_cistatic PyObject *
7807db96d56Sopenharmony_ci_ssl__SSLContext_session_stats(PySSLContext *self, PyObject *Py_UNUSED(ignored))
7817db96d56Sopenharmony_ci{
7827db96d56Sopenharmony_ci    return _ssl__SSLContext_session_stats_impl(self);
7837db96d56Sopenharmony_ci}
7847db96d56Sopenharmony_ci
7857db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLContext_set_default_verify_paths__doc__,
7867db96d56Sopenharmony_ci"set_default_verify_paths($self, /)\n"
7877db96d56Sopenharmony_ci"--\n"
7887db96d56Sopenharmony_ci"\n");
7897db96d56Sopenharmony_ci
7907db96d56Sopenharmony_ci#define _SSL__SSLCONTEXT_SET_DEFAULT_VERIFY_PATHS_METHODDEF    \
7917db96d56Sopenharmony_ci    {"set_default_verify_paths", (PyCFunction)_ssl__SSLContext_set_default_verify_paths, METH_NOARGS, _ssl__SSLContext_set_default_verify_paths__doc__},
7927db96d56Sopenharmony_ci
7937db96d56Sopenharmony_cistatic PyObject *
7947db96d56Sopenharmony_ci_ssl__SSLContext_set_default_verify_paths_impl(PySSLContext *self);
7957db96d56Sopenharmony_ci
7967db96d56Sopenharmony_cistatic PyObject *
7977db96d56Sopenharmony_ci_ssl__SSLContext_set_default_verify_paths(PySSLContext *self, PyObject *Py_UNUSED(ignored))
7987db96d56Sopenharmony_ci{
7997db96d56Sopenharmony_ci    return _ssl__SSLContext_set_default_verify_paths_impl(self);
8007db96d56Sopenharmony_ci}
8017db96d56Sopenharmony_ci
8027db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLContext_set_ecdh_curve__doc__,
8037db96d56Sopenharmony_ci"set_ecdh_curve($self, name, /)\n"
8047db96d56Sopenharmony_ci"--\n"
8057db96d56Sopenharmony_ci"\n");
8067db96d56Sopenharmony_ci
8077db96d56Sopenharmony_ci#define _SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF    \
8087db96d56Sopenharmony_ci    {"set_ecdh_curve", (PyCFunction)_ssl__SSLContext_set_ecdh_curve, METH_O, _ssl__SSLContext_set_ecdh_curve__doc__},
8097db96d56Sopenharmony_ci
8107db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLContext_cert_store_stats__doc__,
8117db96d56Sopenharmony_ci"cert_store_stats($self, /)\n"
8127db96d56Sopenharmony_ci"--\n"
8137db96d56Sopenharmony_ci"\n"
8147db96d56Sopenharmony_ci"Returns quantities of loaded X.509 certificates.\n"
8157db96d56Sopenharmony_ci"\n"
8167db96d56Sopenharmony_ci"X.509 certificates with a CA extension and certificate revocation lists\n"
8177db96d56Sopenharmony_ci"inside the context\'s cert store.\n"
8187db96d56Sopenharmony_ci"\n"
8197db96d56Sopenharmony_ci"NOTE: Certificates in a capath directory aren\'t loaded unless they have\n"
8207db96d56Sopenharmony_ci"been used at least once.");
8217db96d56Sopenharmony_ci
8227db96d56Sopenharmony_ci#define _SSL__SSLCONTEXT_CERT_STORE_STATS_METHODDEF    \
8237db96d56Sopenharmony_ci    {"cert_store_stats", (PyCFunction)_ssl__SSLContext_cert_store_stats, METH_NOARGS, _ssl__SSLContext_cert_store_stats__doc__},
8247db96d56Sopenharmony_ci
8257db96d56Sopenharmony_cistatic PyObject *
8267db96d56Sopenharmony_ci_ssl__SSLContext_cert_store_stats_impl(PySSLContext *self);
8277db96d56Sopenharmony_ci
8287db96d56Sopenharmony_cistatic PyObject *
8297db96d56Sopenharmony_ci_ssl__SSLContext_cert_store_stats(PySSLContext *self, PyObject *Py_UNUSED(ignored))
8307db96d56Sopenharmony_ci{
8317db96d56Sopenharmony_ci    return _ssl__SSLContext_cert_store_stats_impl(self);
8327db96d56Sopenharmony_ci}
8337db96d56Sopenharmony_ci
8347db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl__SSLContext_get_ca_certs__doc__,
8357db96d56Sopenharmony_ci"get_ca_certs($self, /, binary_form=False)\n"
8367db96d56Sopenharmony_ci"--\n"
8377db96d56Sopenharmony_ci"\n"
8387db96d56Sopenharmony_ci"Returns a list of dicts with information of loaded CA certs.\n"
8397db96d56Sopenharmony_ci"\n"
8407db96d56Sopenharmony_ci"If the optional argument is True, returns a DER-encoded copy of the CA\n"
8417db96d56Sopenharmony_ci"certificate.\n"
8427db96d56Sopenharmony_ci"\n"
8437db96d56Sopenharmony_ci"NOTE: Certificates in a capath directory aren\'t loaded unless they have\n"
8447db96d56Sopenharmony_ci"been used at least once.");
8457db96d56Sopenharmony_ci
8467db96d56Sopenharmony_ci#define _SSL__SSLCONTEXT_GET_CA_CERTS_METHODDEF    \
8477db96d56Sopenharmony_ci    {"get_ca_certs", _PyCFunction_CAST(_ssl__SSLContext_get_ca_certs), METH_FASTCALL|METH_KEYWORDS, _ssl__SSLContext_get_ca_certs__doc__},
8487db96d56Sopenharmony_ci
8497db96d56Sopenharmony_cistatic PyObject *
8507db96d56Sopenharmony_ci_ssl__SSLContext_get_ca_certs_impl(PySSLContext *self, int binary_form);
8517db96d56Sopenharmony_ci
8527db96d56Sopenharmony_cistatic PyObject *
8537db96d56Sopenharmony_ci_ssl__SSLContext_get_ca_certs(PySSLContext *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
8547db96d56Sopenharmony_ci{
8557db96d56Sopenharmony_ci    PyObject *return_value = NULL;
8567db96d56Sopenharmony_ci    static const char * const _keywords[] = {"binary_form", NULL};
8577db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "get_ca_certs", 0};
8587db96d56Sopenharmony_ci    PyObject *argsbuf[1];
8597db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
8607db96d56Sopenharmony_ci    int binary_form = 0;
8617db96d56Sopenharmony_ci
8627db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
8637db96d56Sopenharmony_ci    if (!args) {
8647db96d56Sopenharmony_ci        goto exit;
8657db96d56Sopenharmony_ci    }
8667db96d56Sopenharmony_ci    if (!noptargs) {
8677db96d56Sopenharmony_ci        goto skip_optional_pos;
8687db96d56Sopenharmony_ci    }
8697db96d56Sopenharmony_ci    binary_form = PyObject_IsTrue(args[0]);
8707db96d56Sopenharmony_ci    if (binary_form < 0) {
8717db96d56Sopenharmony_ci        goto exit;
8727db96d56Sopenharmony_ci    }
8737db96d56Sopenharmony_ciskip_optional_pos:
8747db96d56Sopenharmony_ci    return_value = _ssl__SSLContext_get_ca_certs_impl(self, binary_form);
8757db96d56Sopenharmony_ci
8767db96d56Sopenharmony_ciexit:
8777db96d56Sopenharmony_ci    return return_value;
8787db96d56Sopenharmony_ci}
8797db96d56Sopenharmony_ci
8807db96d56Sopenharmony_cistatic PyObject *
8817db96d56Sopenharmony_ci_ssl_MemoryBIO_impl(PyTypeObject *type);
8827db96d56Sopenharmony_ci
8837db96d56Sopenharmony_cistatic PyObject *
8847db96d56Sopenharmony_ci_ssl_MemoryBIO(PyTypeObject *type, PyObject *args, PyObject *kwargs)
8857db96d56Sopenharmony_ci{
8867db96d56Sopenharmony_ci    PyObject *return_value = NULL;
8877db96d56Sopenharmony_ci
8887db96d56Sopenharmony_ci    if ((type == get_state_type(type)->PySSLMemoryBIO_Type ||
8897db96d56Sopenharmony_ci         type->tp_init == get_state_type(type)->PySSLMemoryBIO_Type->tp_init) &&
8907db96d56Sopenharmony_ci        !_PyArg_NoPositional("MemoryBIO", args)) {
8917db96d56Sopenharmony_ci        goto exit;
8927db96d56Sopenharmony_ci    }
8937db96d56Sopenharmony_ci    if ((type == get_state_type(type)->PySSLMemoryBIO_Type ||
8947db96d56Sopenharmony_ci         type->tp_init == get_state_type(type)->PySSLMemoryBIO_Type->tp_init) &&
8957db96d56Sopenharmony_ci        !_PyArg_NoKeywords("MemoryBIO", kwargs)) {
8967db96d56Sopenharmony_ci        goto exit;
8977db96d56Sopenharmony_ci    }
8987db96d56Sopenharmony_ci    return_value = _ssl_MemoryBIO_impl(type);
8997db96d56Sopenharmony_ci
9007db96d56Sopenharmony_ciexit:
9017db96d56Sopenharmony_ci    return return_value;
9027db96d56Sopenharmony_ci}
9037db96d56Sopenharmony_ci
9047db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl_MemoryBIO_read__doc__,
9057db96d56Sopenharmony_ci"read($self, size=-1, /)\n"
9067db96d56Sopenharmony_ci"--\n"
9077db96d56Sopenharmony_ci"\n"
9087db96d56Sopenharmony_ci"Read up to size bytes from the memory BIO.\n"
9097db96d56Sopenharmony_ci"\n"
9107db96d56Sopenharmony_ci"If size is not specified, read the entire buffer.\n"
9117db96d56Sopenharmony_ci"If the return value is an empty bytes instance, this means either\n"
9127db96d56Sopenharmony_ci"EOF or that no data is available. Use the \"eof\" property to\n"
9137db96d56Sopenharmony_ci"distinguish between the two.");
9147db96d56Sopenharmony_ci
9157db96d56Sopenharmony_ci#define _SSL_MEMORYBIO_READ_METHODDEF    \
9167db96d56Sopenharmony_ci    {"read", _PyCFunction_CAST(_ssl_MemoryBIO_read), METH_FASTCALL, _ssl_MemoryBIO_read__doc__},
9177db96d56Sopenharmony_ci
9187db96d56Sopenharmony_cistatic PyObject *
9197db96d56Sopenharmony_ci_ssl_MemoryBIO_read_impl(PySSLMemoryBIO *self, int len);
9207db96d56Sopenharmony_ci
9217db96d56Sopenharmony_cistatic PyObject *
9227db96d56Sopenharmony_ci_ssl_MemoryBIO_read(PySSLMemoryBIO *self, PyObject *const *args, Py_ssize_t nargs)
9237db96d56Sopenharmony_ci{
9247db96d56Sopenharmony_ci    PyObject *return_value = NULL;
9257db96d56Sopenharmony_ci    int len = -1;
9267db96d56Sopenharmony_ci
9277db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("read", nargs, 0, 1)) {
9287db96d56Sopenharmony_ci        goto exit;
9297db96d56Sopenharmony_ci    }
9307db96d56Sopenharmony_ci    if (nargs < 1) {
9317db96d56Sopenharmony_ci        goto skip_optional;
9327db96d56Sopenharmony_ci    }
9337db96d56Sopenharmony_ci    len = _PyLong_AsInt(args[0]);
9347db96d56Sopenharmony_ci    if (len == -1 && PyErr_Occurred()) {
9357db96d56Sopenharmony_ci        goto exit;
9367db96d56Sopenharmony_ci    }
9377db96d56Sopenharmony_ciskip_optional:
9387db96d56Sopenharmony_ci    return_value = _ssl_MemoryBIO_read_impl(self, len);
9397db96d56Sopenharmony_ci
9407db96d56Sopenharmony_ciexit:
9417db96d56Sopenharmony_ci    return return_value;
9427db96d56Sopenharmony_ci}
9437db96d56Sopenharmony_ci
9447db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl_MemoryBIO_write__doc__,
9457db96d56Sopenharmony_ci"write($self, b, /)\n"
9467db96d56Sopenharmony_ci"--\n"
9477db96d56Sopenharmony_ci"\n"
9487db96d56Sopenharmony_ci"Writes the bytes b into the memory BIO.\n"
9497db96d56Sopenharmony_ci"\n"
9507db96d56Sopenharmony_ci"Returns the number of bytes written.");
9517db96d56Sopenharmony_ci
9527db96d56Sopenharmony_ci#define _SSL_MEMORYBIO_WRITE_METHODDEF    \
9537db96d56Sopenharmony_ci    {"write", (PyCFunction)_ssl_MemoryBIO_write, METH_O, _ssl_MemoryBIO_write__doc__},
9547db96d56Sopenharmony_ci
9557db96d56Sopenharmony_cistatic PyObject *
9567db96d56Sopenharmony_ci_ssl_MemoryBIO_write_impl(PySSLMemoryBIO *self, Py_buffer *b);
9577db96d56Sopenharmony_ci
9587db96d56Sopenharmony_cistatic PyObject *
9597db96d56Sopenharmony_ci_ssl_MemoryBIO_write(PySSLMemoryBIO *self, PyObject *arg)
9607db96d56Sopenharmony_ci{
9617db96d56Sopenharmony_ci    PyObject *return_value = NULL;
9627db96d56Sopenharmony_ci    Py_buffer b = {NULL, NULL};
9637db96d56Sopenharmony_ci
9647db96d56Sopenharmony_ci    if (PyObject_GetBuffer(arg, &b, PyBUF_SIMPLE) != 0) {
9657db96d56Sopenharmony_ci        goto exit;
9667db96d56Sopenharmony_ci    }
9677db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&b, 'C')) {
9687db96d56Sopenharmony_ci        _PyArg_BadArgument("write", "argument", "contiguous buffer", arg);
9697db96d56Sopenharmony_ci        goto exit;
9707db96d56Sopenharmony_ci    }
9717db96d56Sopenharmony_ci    return_value = _ssl_MemoryBIO_write_impl(self, &b);
9727db96d56Sopenharmony_ci
9737db96d56Sopenharmony_ciexit:
9747db96d56Sopenharmony_ci    /* Cleanup for b */
9757db96d56Sopenharmony_ci    if (b.obj) {
9767db96d56Sopenharmony_ci       PyBuffer_Release(&b);
9777db96d56Sopenharmony_ci    }
9787db96d56Sopenharmony_ci
9797db96d56Sopenharmony_ci    return return_value;
9807db96d56Sopenharmony_ci}
9817db96d56Sopenharmony_ci
9827db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl_MemoryBIO_write_eof__doc__,
9837db96d56Sopenharmony_ci"write_eof($self, /)\n"
9847db96d56Sopenharmony_ci"--\n"
9857db96d56Sopenharmony_ci"\n"
9867db96d56Sopenharmony_ci"Write an EOF marker to the memory BIO.\n"
9877db96d56Sopenharmony_ci"\n"
9887db96d56Sopenharmony_ci"When all data has been read, the \"eof\" property will be True.");
9897db96d56Sopenharmony_ci
9907db96d56Sopenharmony_ci#define _SSL_MEMORYBIO_WRITE_EOF_METHODDEF    \
9917db96d56Sopenharmony_ci    {"write_eof", (PyCFunction)_ssl_MemoryBIO_write_eof, METH_NOARGS, _ssl_MemoryBIO_write_eof__doc__},
9927db96d56Sopenharmony_ci
9937db96d56Sopenharmony_cistatic PyObject *
9947db96d56Sopenharmony_ci_ssl_MemoryBIO_write_eof_impl(PySSLMemoryBIO *self);
9957db96d56Sopenharmony_ci
9967db96d56Sopenharmony_cistatic PyObject *
9977db96d56Sopenharmony_ci_ssl_MemoryBIO_write_eof(PySSLMemoryBIO *self, PyObject *Py_UNUSED(ignored))
9987db96d56Sopenharmony_ci{
9997db96d56Sopenharmony_ci    return _ssl_MemoryBIO_write_eof_impl(self);
10007db96d56Sopenharmony_ci}
10017db96d56Sopenharmony_ci
10027db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl_RAND_add__doc__,
10037db96d56Sopenharmony_ci"RAND_add($module, string, entropy, /)\n"
10047db96d56Sopenharmony_ci"--\n"
10057db96d56Sopenharmony_ci"\n"
10067db96d56Sopenharmony_ci"Mix string into the OpenSSL PRNG state.\n"
10077db96d56Sopenharmony_ci"\n"
10087db96d56Sopenharmony_ci"entropy (a float) is a lower bound on the entropy contained in\n"
10097db96d56Sopenharmony_ci"string.  See RFC 4086.");
10107db96d56Sopenharmony_ci
10117db96d56Sopenharmony_ci#define _SSL_RAND_ADD_METHODDEF    \
10127db96d56Sopenharmony_ci    {"RAND_add", _PyCFunction_CAST(_ssl_RAND_add), METH_FASTCALL, _ssl_RAND_add__doc__},
10137db96d56Sopenharmony_ci
10147db96d56Sopenharmony_cistatic PyObject *
10157db96d56Sopenharmony_ci_ssl_RAND_add_impl(PyObject *module, Py_buffer *view, double entropy);
10167db96d56Sopenharmony_ci
10177db96d56Sopenharmony_cistatic PyObject *
10187db96d56Sopenharmony_ci_ssl_RAND_add(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
10197db96d56Sopenharmony_ci{
10207db96d56Sopenharmony_ci    PyObject *return_value = NULL;
10217db96d56Sopenharmony_ci    Py_buffer view = {NULL, NULL};
10227db96d56Sopenharmony_ci    double entropy;
10237db96d56Sopenharmony_ci
10247db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("RAND_add", nargs, 2, 2)) {
10257db96d56Sopenharmony_ci        goto exit;
10267db96d56Sopenharmony_ci    }
10277db96d56Sopenharmony_ci    if (PyUnicode_Check(args[0])) {
10287db96d56Sopenharmony_ci        Py_ssize_t len;
10297db96d56Sopenharmony_ci        const char *ptr = PyUnicode_AsUTF8AndSize(args[0], &len);
10307db96d56Sopenharmony_ci        if (ptr == NULL) {
10317db96d56Sopenharmony_ci            goto exit;
10327db96d56Sopenharmony_ci        }
10337db96d56Sopenharmony_ci        PyBuffer_FillInfo(&view, args[0], (void *)ptr, len, 1, 0);
10347db96d56Sopenharmony_ci    }
10357db96d56Sopenharmony_ci    else { /* any bytes-like object */
10367db96d56Sopenharmony_ci        if (PyObject_GetBuffer(args[0], &view, PyBUF_SIMPLE) != 0) {
10377db96d56Sopenharmony_ci            goto exit;
10387db96d56Sopenharmony_ci        }
10397db96d56Sopenharmony_ci        if (!PyBuffer_IsContiguous(&view, 'C')) {
10407db96d56Sopenharmony_ci            _PyArg_BadArgument("RAND_add", "argument 1", "contiguous buffer", args[0]);
10417db96d56Sopenharmony_ci            goto exit;
10427db96d56Sopenharmony_ci        }
10437db96d56Sopenharmony_ci    }
10447db96d56Sopenharmony_ci    if (PyFloat_CheckExact(args[1])) {
10457db96d56Sopenharmony_ci        entropy = PyFloat_AS_DOUBLE(args[1]);
10467db96d56Sopenharmony_ci    }
10477db96d56Sopenharmony_ci    else
10487db96d56Sopenharmony_ci    {
10497db96d56Sopenharmony_ci        entropy = PyFloat_AsDouble(args[1]);
10507db96d56Sopenharmony_ci        if (entropy == -1.0 && PyErr_Occurred()) {
10517db96d56Sopenharmony_ci            goto exit;
10527db96d56Sopenharmony_ci        }
10537db96d56Sopenharmony_ci    }
10547db96d56Sopenharmony_ci    return_value = _ssl_RAND_add_impl(module, &view, entropy);
10557db96d56Sopenharmony_ci
10567db96d56Sopenharmony_ciexit:
10577db96d56Sopenharmony_ci    /* Cleanup for view */
10587db96d56Sopenharmony_ci    if (view.obj) {
10597db96d56Sopenharmony_ci       PyBuffer_Release(&view);
10607db96d56Sopenharmony_ci    }
10617db96d56Sopenharmony_ci
10627db96d56Sopenharmony_ci    return return_value;
10637db96d56Sopenharmony_ci}
10647db96d56Sopenharmony_ci
10657db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl_RAND_bytes__doc__,
10667db96d56Sopenharmony_ci"RAND_bytes($module, n, /)\n"
10677db96d56Sopenharmony_ci"--\n"
10687db96d56Sopenharmony_ci"\n"
10697db96d56Sopenharmony_ci"Generate n cryptographically strong pseudo-random bytes.");
10707db96d56Sopenharmony_ci
10717db96d56Sopenharmony_ci#define _SSL_RAND_BYTES_METHODDEF    \
10727db96d56Sopenharmony_ci    {"RAND_bytes", (PyCFunction)_ssl_RAND_bytes, METH_O, _ssl_RAND_bytes__doc__},
10737db96d56Sopenharmony_ci
10747db96d56Sopenharmony_cistatic PyObject *
10757db96d56Sopenharmony_ci_ssl_RAND_bytes_impl(PyObject *module, int n);
10767db96d56Sopenharmony_ci
10777db96d56Sopenharmony_cistatic PyObject *
10787db96d56Sopenharmony_ci_ssl_RAND_bytes(PyObject *module, PyObject *arg)
10797db96d56Sopenharmony_ci{
10807db96d56Sopenharmony_ci    PyObject *return_value = NULL;
10817db96d56Sopenharmony_ci    int n;
10827db96d56Sopenharmony_ci
10837db96d56Sopenharmony_ci    n = _PyLong_AsInt(arg);
10847db96d56Sopenharmony_ci    if (n == -1 && PyErr_Occurred()) {
10857db96d56Sopenharmony_ci        goto exit;
10867db96d56Sopenharmony_ci    }
10877db96d56Sopenharmony_ci    return_value = _ssl_RAND_bytes_impl(module, n);
10887db96d56Sopenharmony_ci
10897db96d56Sopenharmony_ciexit:
10907db96d56Sopenharmony_ci    return return_value;
10917db96d56Sopenharmony_ci}
10927db96d56Sopenharmony_ci
10937db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl_RAND_pseudo_bytes__doc__,
10947db96d56Sopenharmony_ci"RAND_pseudo_bytes($module, n, /)\n"
10957db96d56Sopenharmony_ci"--\n"
10967db96d56Sopenharmony_ci"\n"
10977db96d56Sopenharmony_ci"Generate n pseudo-random bytes.\n"
10987db96d56Sopenharmony_ci"\n"
10997db96d56Sopenharmony_ci"Return a pair (bytes, is_cryptographic).  is_cryptographic is True\n"
11007db96d56Sopenharmony_ci"if the bytes generated are cryptographically strong.");
11017db96d56Sopenharmony_ci
11027db96d56Sopenharmony_ci#define _SSL_RAND_PSEUDO_BYTES_METHODDEF    \
11037db96d56Sopenharmony_ci    {"RAND_pseudo_bytes", (PyCFunction)_ssl_RAND_pseudo_bytes, METH_O, _ssl_RAND_pseudo_bytes__doc__},
11047db96d56Sopenharmony_ci
11057db96d56Sopenharmony_cistatic PyObject *
11067db96d56Sopenharmony_ci_ssl_RAND_pseudo_bytes_impl(PyObject *module, int n);
11077db96d56Sopenharmony_ci
11087db96d56Sopenharmony_cistatic PyObject *
11097db96d56Sopenharmony_ci_ssl_RAND_pseudo_bytes(PyObject *module, PyObject *arg)
11107db96d56Sopenharmony_ci{
11117db96d56Sopenharmony_ci    PyObject *return_value = NULL;
11127db96d56Sopenharmony_ci    int n;
11137db96d56Sopenharmony_ci
11147db96d56Sopenharmony_ci    n = _PyLong_AsInt(arg);
11157db96d56Sopenharmony_ci    if (n == -1 && PyErr_Occurred()) {
11167db96d56Sopenharmony_ci        goto exit;
11177db96d56Sopenharmony_ci    }
11187db96d56Sopenharmony_ci    return_value = _ssl_RAND_pseudo_bytes_impl(module, n);
11197db96d56Sopenharmony_ci
11207db96d56Sopenharmony_ciexit:
11217db96d56Sopenharmony_ci    return return_value;
11227db96d56Sopenharmony_ci}
11237db96d56Sopenharmony_ci
11247db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl_RAND_status__doc__,
11257db96d56Sopenharmony_ci"RAND_status($module, /)\n"
11267db96d56Sopenharmony_ci"--\n"
11277db96d56Sopenharmony_ci"\n"
11287db96d56Sopenharmony_ci"Returns True if the OpenSSL PRNG has been seeded with enough data and False if not.\n"
11297db96d56Sopenharmony_ci"\n"
11307db96d56Sopenharmony_ci"It is necessary to seed the PRNG with RAND_add() on some platforms before\n"
11317db96d56Sopenharmony_ci"using the ssl() function.");
11327db96d56Sopenharmony_ci
11337db96d56Sopenharmony_ci#define _SSL_RAND_STATUS_METHODDEF    \
11347db96d56Sopenharmony_ci    {"RAND_status", (PyCFunction)_ssl_RAND_status, METH_NOARGS, _ssl_RAND_status__doc__},
11357db96d56Sopenharmony_ci
11367db96d56Sopenharmony_cistatic PyObject *
11377db96d56Sopenharmony_ci_ssl_RAND_status_impl(PyObject *module);
11387db96d56Sopenharmony_ci
11397db96d56Sopenharmony_cistatic PyObject *
11407db96d56Sopenharmony_ci_ssl_RAND_status(PyObject *module, PyObject *Py_UNUSED(ignored))
11417db96d56Sopenharmony_ci{
11427db96d56Sopenharmony_ci    return _ssl_RAND_status_impl(module);
11437db96d56Sopenharmony_ci}
11447db96d56Sopenharmony_ci
11457db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl_get_default_verify_paths__doc__,
11467db96d56Sopenharmony_ci"get_default_verify_paths($module, /)\n"
11477db96d56Sopenharmony_ci"--\n"
11487db96d56Sopenharmony_ci"\n"
11497db96d56Sopenharmony_ci"Return search paths and environment vars that are used by SSLContext\'s set_default_verify_paths() to load default CAs.\n"
11507db96d56Sopenharmony_ci"\n"
11517db96d56Sopenharmony_ci"The values are \'cert_file_env\', \'cert_file\', \'cert_dir_env\', \'cert_dir\'.");
11527db96d56Sopenharmony_ci
11537db96d56Sopenharmony_ci#define _SSL_GET_DEFAULT_VERIFY_PATHS_METHODDEF    \
11547db96d56Sopenharmony_ci    {"get_default_verify_paths", (PyCFunction)_ssl_get_default_verify_paths, METH_NOARGS, _ssl_get_default_verify_paths__doc__},
11557db96d56Sopenharmony_ci
11567db96d56Sopenharmony_cistatic PyObject *
11577db96d56Sopenharmony_ci_ssl_get_default_verify_paths_impl(PyObject *module);
11587db96d56Sopenharmony_ci
11597db96d56Sopenharmony_cistatic PyObject *
11607db96d56Sopenharmony_ci_ssl_get_default_verify_paths(PyObject *module, PyObject *Py_UNUSED(ignored))
11617db96d56Sopenharmony_ci{
11627db96d56Sopenharmony_ci    return _ssl_get_default_verify_paths_impl(module);
11637db96d56Sopenharmony_ci}
11647db96d56Sopenharmony_ci
11657db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl_txt2obj__doc__,
11667db96d56Sopenharmony_ci"txt2obj($module, /, txt, name=False)\n"
11677db96d56Sopenharmony_ci"--\n"
11687db96d56Sopenharmony_ci"\n"
11697db96d56Sopenharmony_ci"Lookup NID, short name, long name and OID of an ASN1_OBJECT.\n"
11707db96d56Sopenharmony_ci"\n"
11717db96d56Sopenharmony_ci"By default objects are looked up by OID. With name=True short and\n"
11727db96d56Sopenharmony_ci"long name are also matched.");
11737db96d56Sopenharmony_ci
11747db96d56Sopenharmony_ci#define _SSL_TXT2OBJ_METHODDEF    \
11757db96d56Sopenharmony_ci    {"txt2obj", _PyCFunction_CAST(_ssl_txt2obj), METH_FASTCALL|METH_KEYWORDS, _ssl_txt2obj__doc__},
11767db96d56Sopenharmony_ci
11777db96d56Sopenharmony_cistatic PyObject *
11787db96d56Sopenharmony_ci_ssl_txt2obj_impl(PyObject *module, const char *txt, int name);
11797db96d56Sopenharmony_ci
11807db96d56Sopenharmony_cistatic PyObject *
11817db96d56Sopenharmony_ci_ssl_txt2obj(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
11827db96d56Sopenharmony_ci{
11837db96d56Sopenharmony_ci    PyObject *return_value = NULL;
11847db96d56Sopenharmony_ci    static const char * const _keywords[] = {"txt", "name", NULL};
11857db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "txt2obj", 0};
11867db96d56Sopenharmony_ci    PyObject *argsbuf[2];
11877db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
11887db96d56Sopenharmony_ci    const char *txt;
11897db96d56Sopenharmony_ci    int name = 0;
11907db96d56Sopenharmony_ci
11917db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
11927db96d56Sopenharmony_ci    if (!args) {
11937db96d56Sopenharmony_ci        goto exit;
11947db96d56Sopenharmony_ci    }
11957db96d56Sopenharmony_ci    if (!PyUnicode_Check(args[0])) {
11967db96d56Sopenharmony_ci        _PyArg_BadArgument("txt2obj", "argument 'txt'", "str", args[0]);
11977db96d56Sopenharmony_ci        goto exit;
11987db96d56Sopenharmony_ci    }
11997db96d56Sopenharmony_ci    Py_ssize_t txt_length;
12007db96d56Sopenharmony_ci    txt = PyUnicode_AsUTF8AndSize(args[0], &txt_length);
12017db96d56Sopenharmony_ci    if (txt == NULL) {
12027db96d56Sopenharmony_ci        goto exit;
12037db96d56Sopenharmony_ci    }
12047db96d56Sopenharmony_ci    if (strlen(txt) != (size_t)txt_length) {
12057db96d56Sopenharmony_ci        PyErr_SetString(PyExc_ValueError, "embedded null character");
12067db96d56Sopenharmony_ci        goto exit;
12077db96d56Sopenharmony_ci    }
12087db96d56Sopenharmony_ci    if (!noptargs) {
12097db96d56Sopenharmony_ci        goto skip_optional_pos;
12107db96d56Sopenharmony_ci    }
12117db96d56Sopenharmony_ci    name = PyObject_IsTrue(args[1]);
12127db96d56Sopenharmony_ci    if (name < 0) {
12137db96d56Sopenharmony_ci        goto exit;
12147db96d56Sopenharmony_ci    }
12157db96d56Sopenharmony_ciskip_optional_pos:
12167db96d56Sopenharmony_ci    return_value = _ssl_txt2obj_impl(module, txt, name);
12177db96d56Sopenharmony_ci
12187db96d56Sopenharmony_ciexit:
12197db96d56Sopenharmony_ci    return return_value;
12207db96d56Sopenharmony_ci}
12217db96d56Sopenharmony_ci
12227db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl_nid2obj__doc__,
12237db96d56Sopenharmony_ci"nid2obj($module, nid, /)\n"
12247db96d56Sopenharmony_ci"--\n"
12257db96d56Sopenharmony_ci"\n"
12267db96d56Sopenharmony_ci"Lookup NID, short name, long name and OID of an ASN1_OBJECT by NID.");
12277db96d56Sopenharmony_ci
12287db96d56Sopenharmony_ci#define _SSL_NID2OBJ_METHODDEF    \
12297db96d56Sopenharmony_ci    {"nid2obj", (PyCFunction)_ssl_nid2obj, METH_O, _ssl_nid2obj__doc__},
12307db96d56Sopenharmony_ci
12317db96d56Sopenharmony_cistatic PyObject *
12327db96d56Sopenharmony_ci_ssl_nid2obj_impl(PyObject *module, int nid);
12337db96d56Sopenharmony_ci
12347db96d56Sopenharmony_cistatic PyObject *
12357db96d56Sopenharmony_ci_ssl_nid2obj(PyObject *module, PyObject *arg)
12367db96d56Sopenharmony_ci{
12377db96d56Sopenharmony_ci    PyObject *return_value = NULL;
12387db96d56Sopenharmony_ci    int nid;
12397db96d56Sopenharmony_ci
12407db96d56Sopenharmony_ci    nid = _PyLong_AsInt(arg);
12417db96d56Sopenharmony_ci    if (nid == -1 && PyErr_Occurred()) {
12427db96d56Sopenharmony_ci        goto exit;
12437db96d56Sopenharmony_ci    }
12447db96d56Sopenharmony_ci    return_value = _ssl_nid2obj_impl(module, nid);
12457db96d56Sopenharmony_ci
12467db96d56Sopenharmony_ciexit:
12477db96d56Sopenharmony_ci    return return_value;
12487db96d56Sopenharmony_ci}
12497db96d56Sopenharmony_ci
12507db96d56Sopenharmony_ci#if defined(_MSC_VER)
12517db96d56Sopenharmony_ci
12527db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl_enum_certificates__doc__,
12537db96d56Sopenharmony_ci"enum_certificates($module, /, store_name)\n"
12547db96d56Sopenharmony_ci"--\n"
12557db96d56Sopenharmony_ci"\n"
12567db96d56Sopenharmony_ci"Retrieve certificates from Windows\' cert store.\n"
12577db96d56Sopenharmony_ci"\n"
12587db96d56Sopenharmony_ci"store_name may be one of \'CA\', \'ROOT\' or \'MY\'.  The system may provide\n"
12597db96d56Sopenharmony_ci"more cert storages, too.  The function returns a list of (bytes,\n"
12607db96d56Sopenharmony_ci"encoding_type, trust) tuples.  The encoding_type flag can be interpreted\n"
12617db96d56Sopenharmony_ci"with X509_ASN_ENCODING or PKCS_7_ASN_ENCODING. The trust setting is either\n"
12627db96d56Sopenharmony_ci"a set of OIDs or the boolean True.");
12637db96d56Sopenharmony_ci
12647db96d56Sopenharmony_ci#define _SSL_ENUM_CERTIFICATES_METHODDEF    \
12657db96d56Sopenharmony_ci    {"enum_certificates", _PyCFunction_CAST(_ssl_enum_certificates), METH_FASTCALL|METH_KEYWORDS, _ssl_enum_certificates__doc__},
12667db96d56Sopenharmony_ci
12677db96d56Sopenharmony_cistatic PyObject *
12687db96d56Sopenharmony_ci_ssl_enum_certificates_impl(PyObject *module, const char *store_name);
12697db96d56Sopenharmony_ci
12707db96d56Sopenharmony_cistatic PyObject *
12717db96d56Sopenharmony_ci_ssl_enum_certificates(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
12727db96d56Sopenharmony_ci{
12737db96d56Sopenharmony_ci    PyObject *return_value = NULL;
12747db96d56Sopenharmony_ci    static const char * const _keywords[] = {"store_name", NULL};
12757db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "enum_certificates", 0};
12767db96d56Sopenharmony_ci    PyObject *argsbuf[1];
12777db96d56Sopenharmony_ci    const char *store_name;
12787db96d56Sopenharmony_ci
12797db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
12807db96d56Sopenharmony_ci    if (!args) {
12817db96d56Sopenharmony_ci        goto exit;
12827db96d56Sopenharmony_ci    }
12837db96d56Sopenharmony_ci    if (!PyUnicode_Check(args[0])) {
12847db96d56Sopenharmony_ci        _PyArg_BadArgument("enum_certificates", "argument 'store_name'", "str", args[0]);
12857db96d56Sopenharmony_ci        goto exit;
12867db96d56Sopenharmony_ci    }
12877db96d56Sopenharmony_ci    Py_ssize_t store_name_length;
12887db96d56Sopenharmony_ci    store_name = PyUnicode_AsUTF8AndSize(args[0], &store_name_length);
12897db96d56Sopenharmony_ci    if (store_name == NULL) {
12907db96d56Sopenharmony_ci        goto exit;
12917db96d56Sopenharmony_ci    }
12927db96d56Sopenharmony_ci    if (strlen(store_name) != (size_t)store_name_length) {
12937db96d56Sopenharmony_ci        PyErr_SetString(PyExc_ValueError, "embedded null character");
12947db96d56Sopenharmony_ci        goto exit;
12957db96d56Sopenharmony_ci    }
12967db96d56Sopenharmony_ci    return_value = _ssl_enum_certificates_impl(module, store_name);
12977db96d56Sopenharmony_ci
12987db96d56Sopenharmony_ciexit:
12997db96d56Sopenharmony_ci    return return_value;
13007db96d56Sopenharmony_ci}
13017db96d56Sopenharmony_ci
13027db96d56Sopenharmony_ci#endif /* defined(_MSC_VER) */
13037db96d56Sopenharmony_ci
13047db96d56Sopenharmony_ci#if defined(_MSC_VER)
13057db96d56Sopenharmony_ci
13067db96d56Sopenharmony_ciPyDoc_STRVAR(_ssl_enum_crls__doc__,
13077db96d56Sopenharmony_ci"enum_crls($module, /, store_name)\n"
13087db96d56Sopenharmony_ci"--\n"
13097db96d56Sopenharmony_ci"\n"
13107db96d56Sopenharmony_ci"Retrieve CRLs from Windows\' cert store.\n"
13117db96d56Sopenharmony_ci"\n"
13127db96d56Sopenharmony_ci"store_name may be one of \'CA\', \'ROOT\' or \'MY\'.  The system may provide\n"
13137db96d56Sopenharmony_ci"more cert storages, too.  The function returns a list of (bytes,\n"
13147db96d56Sopenharmony_ci"encoding_type) tuples.  The encoding_type flag can be interpreted with\n"
13157db96d56Sopenharmony_ci"X509_ASN_ENCODING or PKCS_7_ASN_ENCODING.");
13167db96d56Sopenharmony_ci
13177db96d56Sopenharmony_ci#define _SSL_ENUM_CRLS_METHODDEF    \
13187db96d56Sopenharmony_ci    {"enum_crls", _PyCFunction_CAST(_ssl_enum_crls), METH_FASTCALL|METH_KEYWORDS, _ssl_enum_crls__doc__},
13197db96d56Sopenharmony_ci
13207db96d56Sopenharmony_cistatic PyObject *
13217db96d56Sopenharmony_ci_ssl_enum_crls_impl(PyObject *module, const char *store_name);
13227db96d56Sopenharmony_ci
13237db96d56Sopenharmony_cistatic PyObject *
13247db96d56Sopenharmony_ci_ssl_enum_crls(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
13257db96d56Sopenharmony_ci{
13267db96d56Sopenharmony_ci    PyObject *return_value = NULL;
13277db96d56Sopenharmony_ci    static const char * const _keywords[] = {"store_name", NULL};
13287db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "enum_crls", 0};
13297db96d56Sopenharmony_ci    PyObject *argsbuf[1];
13307db96d56Sopenharmony_ci    const char *store_name;
13317db96d56Sopenharmony_ci
13327db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
13337db96d56Sopenharmony_ci    if (!args) {
13347db96d56Sopenharmony_ci        goto exit;
13357db96d56Sopenharmony_ci    }
13367db96d56Sopenharmony_ci    if (!PyUnicode_Check(args[0])) {
13377db96d56Sopenharmony_ci        _PyArg_BadArgument("enum_crls", "argument 'store_name'", "str", args[0]);
13387db96d56Sopenharmony_ci        goto exit;
13397db96d56Sopenharmony_ci    }
13407db96d56Sopenharmony_ci    Py_ssize_t store_name_length;
13417db96d56Sopenharmony_ci    store_name = PyUnicode_AsUTF8AndSize(args[0], &store_name_length);
13427db96d56Sopenharmony_ci    if (store_name == NULL) {
13437db96d56Sopenharmony_ci        goto exit;
13447db96d56Sopenharmony_ci    }
13457db96d56Sopenharmony_ci    if (strlen(store_name) != (size_t)store_name_length) {
13467db96d56Sopenharmony_ci        PyErr_SetString(PyExc_ValueError, "embedded null character");
13477db96d56Sopenharmony_ci        goto exit;
13487db96d56Sopenharmony_ci    }
13497db96d56Sopenharmony_ci    return_value = _ssl_enum_crls_impl(module, store_name);
13507db96d56Sopenharmony_ci
13517db96d56Sopenharmony_ciexit:
13527db96d56Sopenharmony_ci    return return_value;
13537db96d56Sopenharmony_ci}
13547db96d56Sopenharmony_ci
13557db96d56Sopenharmony_ci#endif /* defined(_MSC_VER) */
13567db96d56Sopenharmony_ci
13577db96d56Sopenharmony_ci#ifndef _SSL_ENUM_CERTIFICATES_METHODDEF
13587db96d56Sopenharmony_ci    #define _SSL_ENUM_CERTIFICATES_METHODDEF
13597db96d56Sopenharmony_ci#endif /* !defined(_SSL_ENUM_CERTIFICATES_METHODDEF) */
13607db96d56Sopenharmony_ci
13617db96d56Sopenharmony_ci#ifndef _SSL_ENUM_CRLS_METHODDEF
13627db96d56Sopenharmony_ci    #define _SSL_ENUM_CRLS_METHODDEF
13637db96d56Sopenharmony_ci#endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */
13647db96d56Sopenharmony_ci/*[clinic end generated code: output=2a488dd0cbc777df input=a9049054013a1b77]*/
1365