17db96d56Sopenharmony_ci/*[clinic input]
27db96d56Sopenharmony_cipreserve
37db96d56Sopenharmony_ci[clinic start generated code]*/
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciPyDoc_STRVAR(EVP_copy__doc__,
67db96d56Sopenharmony_ci"copy($self, /)\n"
77db96d56Sopenharmony_ci"--\n"
87db96d56Sopenharmony_ci"\n"
97db96d56Sopenharmony_ci"Return a copy of the hash object.");
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci#define EVP_COPY_METHODDEF    \
127db96d56Sopenharmony_ci    {"copy", (PyCFunction)EVP_copy, METH_NOARGS, EVP_copy__doc__},
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_cistatic PyObject *
157db96d56Sopenharmony_ciEVP_copy_impl(EVPobject *self);
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_cistatic PyObject *
187db96d56Sopenharmony_ciEVP_copy(EVPobject *self, PyObject *Py_UNUSED(ignored))
197db96d56Sopenharmony_ci{
207db96d56Sopenharmony_ci    return EVP_copy_impl(self);
217db96d56Sopenharmony_ci}
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ciPyDoc_STRVAR(EVP_digest__doc__,
247db96d56Sopenharmony_ci"digest($self, /)\n"
257db96d56Sopenharmony_ci"--\n"
267db96d56Sopenharmony_ci"\n"
277db96d56Sopenharmony_ci"Return the digest value as a bytes object.");
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ci#define EVP_DIGEST_METHODDEF    \
307db96d56Sopenharmony_ci    {"digest", (PyCFunction)EVP_digest, METH_NOARGS, EVP_digest__doc__},
317db96d56Sopenharmony_ci
327db96d56Sopenharmony_cistatic PyObject *
337db96d56Sopenharmony_ciEVP_digest_impl(EVPobject *self);
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_cistatic PyObject *
367db96d56Sopenharmony_ciEVP_digest(EVPobject *self, PyObject *Py_UNUSED(ignored))
377db96d56Sopenharmony_ci{
387db96d56Sopenharmony_ci    return EVP_digest_impl(self);
397db96d56Sopenharmony_ci}
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ciPyDoc_STRVAR(EVP_hexdigest__doc__,
427db96d56Sopenharmony_ci"hexdigest($self, /)\n"
437db96d56Sopenharmony_ci"--\n"
447db96d56Sopenharmony_ci"\n"
457db96d56Sopenharmony_ci"Return the digest value as a string of hexadecimal digits.");
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ci#define EVP_HEXDIGEST_METHODDEF    \
487db96d56Sopenharmony_ci    {"hexdigest", (PyCFunction)EVP_hexdigest, METH_NOARGS, EVP_hexdigest__doc__},
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_cistatic PyObject *
517db96d56Sopenharmony_ciEVP_hexdigest_impl(EVPobject *self);
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_cistatic PyObject *
547db96d56Sopenharmony_ciEVP_hexdigest(EVPobject *self, PyObject *Py_UNUSED(ignored))
557db96d56Sopenharmony_ci{
567db96d56Sopenharmony_ci    return EVP_hexdigest_impl(self);
577db96d56Sopenharmony_ci}
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ciPyDoc_STRVAR(EVP_update__doc__,
607db96d56Sopenharmony_ci"update($self, obj, /)\n"
617db96d56Sopenharmony_ci"--\n"
627db96d56Sopenharmony_ci"\n"
637db96d56Sopenharmony_ci"Update this hash object\'s state with the provided string.");
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci#define EVP_UPDATE_METHODDEF    \
667db96d56Sopenharmony_ci    {"update", (PyCFunction)EVP_update, METH_O, EVP_update__doc__},
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci#if defined(PY_OPENSSL_HAS_SHAKE)
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ciPyDoc_STRVAR(EVPXOF_digest__doc__,
717db96d56Sopenharmony_ci"digest($self, /, length)\n"
727db96d56Sopenharmony_ci"--\n"
737db96d56Sopenharmony_ci"\n"
747db96d56Sopenharmony_ci"Return the digest value as a bytes object.");
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ci#define EVPXOF_DIGEST_METHODDEF    \
777db96d56Sopenharmony_ci    {"digest", _PyCFunction_CAST(EVPXOF_digest), METH_FASTCALL|METH_KEYWORDS, EVPXOF_digest__doc__},
787db96d56Sopenharmony_ci
797db96d56Sopenharmony_cistatic PyObject *
807db96d56Sopenharmony_ciEVPXOF_digest_impl(EVPobject *self, Py_ssize_t length);
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_cistatic PyObject *
837db96d56Sopenharmony_ciEVPXOF_digest(EVPobject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
847db96d56Sopenharmony_ci{
857db96d56Sopenharmony_ci    PyObject *return_value = NULL;
867db96d56Sopenharmony_ci    static const char * const _keywords[] = {"length", NULL};
877db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "digest", 0};
887db96d56Sopenharmony_ci    PyObject *argsbuf[1];
897db96d56Sopenharmony_ci    Py_ssize_t length;
907db96d56Sopenharmony_ci
917db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
927db96d56Sopenharmony_ci    if (!args) {
937db96d56Sopenharmony_ci        goto exit;
947db96d56Sopenharmony_ci    }
957db96d56Sopenharmony_ci    {
967db96d56Sopenharmony_ci        Py_ssize_t ival = -1;
977db96d56Sopenharmony_ci        PyObject *iobj = _PyNumber_Index(args[0]);
987db96d56Sopenharmony_ci        if (iobj != NULL) {
997db96d56Sopenharmony_ci            ival = PyLong_AsSsize_t(iobj);
1007db96d56Sopenharmony_ci            Py_DECREF(iobj);
1017db96d56Sopenharmony_ci        }
1027db96d56Sopenharmony_ci        if (ival == -1 && PyErr_Occurred()) {
1037db96d56Sopenharmony_ci            goto exit;
1047db96d56Sopenharmony_ci        }
1057db96d56Sopenharmony_ci        length = ival;
1067db96d56Sopenharmony_ci    }
1077db96d56Sopenharmony_ci    return_value = EVPXOF_digest_impl(self, length);
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ciexit:
1107db96d56Sopenharmony_ci    return return_value;
1117db96d56Sopenharmony_ci}
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci#endif /* defined(PY_OPENSSL_HAS_SHAKE) */
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_ci#if defined(PY_OPENSSL_HAS_SHAKE)
1167db96d56Sopenharmony_ci
1177db96d56Sopenharmony_ciPyDoc_STRVAR(EVPXOF_hexdigest__doc__,
1187db96d56Sopenharmony_ci"hexdigest($self, /, length)\n"
1197db96d56Sopenharmony_ci"--\n"
1207db96d56Sopenharmony_ci"\n"
1217db96d56Sopenharmony_ci"Return the digest value as a string of hexadecimal digits.");
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ci#define EVPXOF_HEXDIGEST_METHODDEF    \
1247db96d56Sopenharmony_ci    {"hexdigest", _PyCFunction_CAST(EVPXOF_hexdigest), METH_FASTCALL|METH_KEYWORDS, EVPXOF_hexdigest__doc__},
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_cistatic PyObject *
1277db96d56Sopenharmony_ciEVPXOF_hexdigest_impl(EVPobject *self, Py_ssize_t length);
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_cistatic PyObject *
1307db96d56Sopenharmony_ciEVPXOF_hexdigest(EVPobject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1317db96d56Sopenharmony_ci{
1327db96d56Sopenharmony_ci    PyObject *return_value = NULL;
1337db96d56Sopenharmony_ci    static const char * const _keywords[] = {"length", NULL};
1347db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "hexdigest", 0};
1357db96d56Sopenharmony_ci    PyObject *argsbuf[1];
1367db96d56Sopenharmony_ci    Py_ssize_t length;
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
1397db96d56Sopenharmony_ci    if (!args) {
1407db96d56Sopenharmony_ci        goto exit;
1417db96d56Sopenharmony_ci    }
1427db96d56Sopenharmony_ci    {
1437db96d56Sopenharmony_ci        Py_ssize_t ival = -1;
1447db96d56Sopenharmony_ci        PyObject *iobj = _PyNumber_Index(args[0]);
1457db96d56Sopenharmony_ci        if (iobj != NULL) {
1467db96d56Sopenharmony_ci            ival = PyLong_AsSsize_t(iobj);
1477db96d56Sopenharmony_ci            Py_DECREF(iobj);
1487db96d56Sopenharmony_ci        }
1497db96d56Sopenharmony_ci        if (ival == -1 && PyErr_Occurred()) {
1507db96d56Sopenharmony_ci            goto exit;
1517db96d56Sopenharmony_ci        }
1527db96d56Sopenharmony_ci        length = ival;
1537db96d56Sopenharmony_ci    }
1547db96d56Sopenharmony_ci    return_value = EVPXOF_hexdigest_impl(self, length);
1557db96d56Sopenharmony_ci
1567db96d56Sopenharmony_ciexit:
1577db96d56Sopenharmony_ci    return return_value;
1587db96d56Sopenharmony_ci}
1597db96d56Sopenharmony_ci
1607db96d56Sopenharmony_ci#endif /* defined(PY_OPENSSL_HAS_SHAKE) */
1617db96d56Sopenharmony_ci
1627db96d56Sopenharmony_ciPyDoc_STRVAR(EVP_new__doc__,
1637db96d56Sopenharmony_ci"new($module, /, name, string=b\'\', *, usedforsecurity=True)\n"
1647db96d56Sopenharmony_ci"--\n"
1657db96d56Sopenharmony_ci"\n"
1667db96d56Sopenharmony_ci"Return a new hash object using the named algorithm.\n"
1677db96d56Sopenharmony_ci"\n"
1687db96d56Sopenharmony_ci"An optional string argument may be provided and will be\n"
1697db96d56Sopenharmony_ci"automatically hashed.\n"
1707db96d56Sopenharmony_ci"\n"
1717db96d56Sopenharmony_ci"The MD5 and SHA1 algorithms are always supported.");
1727db96d56Sopenharmony_ci
1737db96d56Sopenharmony_ci#define EVP_NEW_METHODDEF    \
1747db96d56Sopenharmony_ci    {"new", _PyCFunction_CAST(EVP_new), METH_FASTCALL|METH_KEYWORDS, EVP_new__doc__},
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_cistatic PyObject *
1777db96d56Sopenharmony_ciEVP_new_impl(PyObject *module, PyObject *name_obj, PyObject *data_obj,
1787db96d56Sopenharmony_ci             int usedforsecurity);
1797db96d56Sopenharmony_ci
1807db96d56Sopenharmony_cistatic PyObject *
1817db96d56Sopenharmony_ciEVP_new(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1827db96d56Sopenharmony_ci{
1837db96d56Sopenharmony_ci    PyObject *return_value = NULL;
1847db96d56Sopenharmony_ci    static const char * const _keywords[] = {"name", "string", "usedforsecurity", NULL};
1857db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "new", 0};
1867db96d56Sopenharmony_ci    PyObject *argsbuf[3];
1877db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
1887db96d56Sopenharmony_ci    PyObject *name_obj;
1897db96d56Sopenharmony_ci    PyObject *data_obj = NULL;
1907db96d56Sopenharmony_ci    int usedforsecurity = 1;
1917db96d56Sopenharmony_ci
1927db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
1937db96d56Sopenharmony_ci    if (!args) {
1947db96d56Sopenharmony_ci        goto exit;
1957db96d56Sopenharmony_ci    }
1967db96d56Sopenharmony_ci    name_obj = args[0];
1977db96d56Sopenharmony_ci    if (!noptargs) {
1987db96d56Sopenharmony_ci        goto skip_optional_pos;
1997db96d56Sopenharmony_ci    }
2007db96d56Sopenharmony_ci    if (args[1]) {
2017db96d56Sopenharmony_ci        data_obj = args[1];
2027db96d56Sopenharmony_ci        if (!--noptargs) {
2037db96d56Sopenharmony_ci            goto skip_optional_pos;
2047db96d56Sopenharmony_ci        }
2057db96d56Sopenharmony_ci    }
2067db96d56Sopenharmony_ciskip_optional_pos:
2077db96d56Sopenharmony_ci    if (!noptargs) {
2087db96d56Sopenharmony_ci        goto skip_optional_kwonly;
2097db96d56Sopenharmony_ci    }
2107db96d56Sopenharmony_ci    usedforsecurity = PyObject_IsTrue(args[2]);
2117db96d56Sopenharmony_ci    if (usedforsecurity < 0) {
2127db96d56Sopenharmony_ci        goto exit;
2137db96d56Sopenharmony_ci    }
2147db96d56Sopenharmony_ciskip_optional_kwonly:
2157db96d56Sopenharmony_ci    return_value = EVP_new_impl(module, name_obj, data_obj, usedforsecurity);
2167db96d56Sopenharmony_ci
2177db96d56Sopenharmony_ciexit:
2187db96d56Sopenharmony_ci    return return_value;
2197db96d56Sopenharmony_ci}
2207db96d56Sopenharmony_ci
2217db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_openssl_md5__doc__,
2227db96d56Sopenharmony_ci"openssl_md5($module, /, string=b\'\', *, usedforsecurity=True)\n"
2237db96d56Sopenharmony_ci"--\n"
2247db96d56Sopenharmony_ci"\n"
2257db96d56Sopenharmony_ci"Returns a md5 hash object; optionally initialized with a string");
2267db96d56Sopenharmony_ci
2277db96d56Sopenharmony_ci#define _HASHLIB_OPENSSL_MD5_METHODDEF    \
2287db96d56Sopenharmony_ci    {"openssl_md5", _PyCFunction_CAST(_hashlib_openssl_md5), METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_md5__doc__},
2297db96d56Sopenharmony_ci
2307db96d56Sopenharmony_cistatic PyObject *
2317db96d56Sopenharmony_ci_hashlib_openssl_md5_impl(PyObject *module, PyObject *data_obj,
2327db96d56Sopenharmony_ci                          int usedforsecurity);
2337db96d56Sopenharmony_ci
2347db96d56Sopenharmony_cistatic PyObject *
2357db96d56Sopenharmony_ci_hashlib_openssl_md5(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
2367db96d56Sopenharmony_ci{
2377db96d56Sopenharmony_ci    PyObject *return_value = NULL;
2387db96d56Sopenharmony_ci    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
2397db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_md5", 0};
2407db96d56Sopenharmony_ci    PyObject *argsbuf[2];
2417db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
2427db96d56Sopenharmony_ci    PyObject *data_obj = NULL;
2437db96d56Sopenharmony_ci    int usedforsecurity = 1;
2447db96d56Sopenharmony_ci
2457db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
2467db96d56Sopenharmony_ci    if (!args) {
2477db96d56Sopenharmony_ci        goto exit;
2487db96d56Sopenharmony_ci    }
2497db96d56Sopenharmony_ci    if (!noptargs) {
2507db96d56Sopenharmony_ci        goto skip_optional_pos;
2517db96d56Sopenharmony_ci    }
2527db96d56Sopenharmony_ci    if (args[0]) {
2537db96d56Sopenharmony_ci        data_obj = args[0];
2547db96d56Sopenharmony_ci        if (!--noptargs) {
2557db96d56Sopenharmony_ci            goto skip_optional_pos;
2567db96d56Sopenharmony_ci        }
2577db96d56Sopenharmony_ci    }
2587db96d56Sopenharmony_ciskip_optional_pos:
2597db96d56Sopenharmony_ci    if (!noptargs) {
2607db96d56Sopenharmony_ci        goto skip_optional_kwonly;
2617db96d56Sopenharmony_ci    }
2627db96d56Sopenharmony_ci    usedforsecurity = PyObject_IsTrue(args[1]);
2637db96d56Sopenharmony_ci    if (usedforsecurity < 0) {
2647db96d56Sopenharmony_ci        goto exit;
2657db96d56Sopenharmony_ci    }
2667db96d56Sopenharmony_ciskip_optional_kwonly:
2677db96d56Sopenharmony_ci    return_value = _hashlib_openssl_md5_impl(module, data_obj, usedforsecurity);
2687db96d56Sopenharmony_ci
2697db96d56Sopenharmony_ciexit:
2707db96d56Sopenharmony_ci    return return_value;
2717db96d56Sopenharmony_ci}
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_openssl_sha1__doc__,
2747db96d56Sopenharmony_ci"openssl_sha1($module, /, string=b\'\', *, usedforsecurity=True)\n"
2757db96d56Sopenharmony_ci"--\n"
2767db96d56Sopenharmony_ci"\n"
2777db96d56Sopenharmony_ci"Returns a sha1 hash object; optionally initialized with a string");
2787db96d56Sopenharmony_ci
2797db96d56Sopenharmony_ci#define _HASHLIB_OPENSSL_SHA1_METHODDEF    \
2807db96d56Sopenharmony_ci    {"openssl_sha1", _PyCFunction_CAST(_hashlib_openssl_sha1), METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha1__doc__},
2817db96d56Sopenharmony_ci
2827db96d56Sopenharmony_cistatic PyObject *
2837db96d56Sopenharmony_ci_hashlib_openssl_sha1_impl(PyObject *module, PyObject *data_obj,
2847db96d56Sopenharmony_ci                           int usedforsecurity);
2857db96d56Sopenharmony_ci
2867db96d56Sopenharmony_cistatic PyObject *
2877db96d56Sopenharmony_ci_hashlib_openssl_sha1(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
2887db96d56Sopenharmony_ci{
2897db96d56Sopenharmony_ci    PyObject *return_value = NULL;
2907db96d56Sopenharmony_ci    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
2917db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha1", 0};
2927db96d56Sopenharmony_ci    PyObject *argsbuf[2];
2937db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
2947db96d56Sopenharmony_ci    PyObject *data_obj = NULL;
2957db96d56Sopenharmony_ci    int usedforsecurity = 1;
2967db96d56Sopenharmony_ci
2977db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
2987db96d56Sopenharmony_ci    if (!args) {
2997db96d56Sopenharmony_ci        goto exit;
3007db96d56Sopenharmony_ci    }
3017db96d56Sopenharmony_ci    if (!noptargs) {
3027db96d56Sopenharmony_ci        goto skip_optional_pos;
3037db96d56Sopenharmony_ci    }
3047db96d56Sopenharmony_ci    if (args[0]) {
3057db96d56Sopenharmony_ci        data_obj = args[0];
3067db96d56Sopenharmony_ci        if (!--noptargs) {
3077db96d56Sopenharmony_ci            goto skip_optional_pos;
3087db96d56Sopenharmony_ci        }
3097db96d56Sopenharmony_ci    }
3107db96d56Sopenharmony_ciskip_optional_pos:
3117db96d56Sopenharmony_ci    if (!noptargs) {
3127db96d56Sopenharmony_ci        goto skip_optional_kwonly;
3137db96d56Sopenharmony_ci    }
3147db96d56Sopenharmony_ci    usedforsecurity = PyObject_IsTrue(args[1]);
3157db96d56Sopenharmony_ci    if (usedforsecurity < 0) {
3167db96d56Sopenharmony_ci        goto exit;
3177db96d56Sopenharmony_ci    }
3187db96d56Sopenharmony_ciskip_optional_kwonly:
3197db96d56Sopenharmony_ci    return_value = _hashlib_openssl_sha1_impl(module, data_obj, usedforsecurity);
3207db96d56Sopenharmony_ci
3217db96d56Sopenharmony_ciexit:
3227db96d56Sopenharmony_ci    return return_value;
3237db96d56Sopenharmony_ci}
3247db96d56Sopenharmony_ci
3257db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_openssl_sha224__doc__,
3267db96d56Sopenharmony_ci"openssl_sha224($module, /, string=b\'\', *, usedforsecurity=True)\n"
3277db96d56Sopenharmony_ci"--\n"
3287db96d56Sopenharmony_ci"\n"
3297db96d56Sopenharmony_ci"Returns a sha224 hash object; optionally initialized with a string");
3307db96d56Sopenharmony_ci
3317db96d56Sopenharmony_ci#define _HASHLIB_OPENSSL_SHA224_METHODDEF    \
3327db96d56Sopenharmony_ci    {"openssl_sha224", _PyCFunction_CAST(_hashlib_openssl_sha224), METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha224__doc__},
3337db96d56Sopenharmony_ci
3347db96d56Sopenharmony_cistatic PyObject *
3357db96d56Sopenharmony_ci_hashlib_openssl_sha224_impl(PyObject *module, PyObject *data_obj,
3367db96d56Sopenharmony_ci                             int usedforsecurity);
3377db96d56Sopenharmony_ci
3387db96d56Sopenharmony_cistatic PyObject *
3397db96d56Sopenharmony_ci_hashlib_openssl_sha224(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
3407db96d56Sopenharmony_ci{
3417db96d56Sopenharmony_ci    PyObject *return_value = NULL;
3427db96d56Sopenharmony_ci    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
3437db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha224", 0};
3447db96d56Sopenharmony_ci    PyObject *argsbuf[2];
3457db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
3467db96d56Sopenharmony_ci    PyObject *data_obj = NULL;
3477db96d56Sopenharmony_ci    int usedforsecurity = 1;
3487db96d56Sopenharmony_ci
3497db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
3507db96d56Sopenharmony_ci    if (!args) {
3517db96d56Sopenharmony_ci        goto exit;
3527db96d56Sopenharmony_ci    }
3537db96d56Sopenharmony_ci    if (!noptargs) {
3547db96d56Sopenharmony_ci        goto skip_optional_pos;
3557db96d56Sopenharmony_ci    }
3567db96d56Sopenharmony_ci    if (args[0]) {
3577db96d56Sopenharmony_ci        data_obj = args[0];
3587db96d56Sopenharmony_ci        if (!--noptargs) {
3597db96d56Sopenharmony_ci            goto skip_optional_pos;
3607db96d56Sopenharmony_ci        }
3617db96d56Sopenharmony_ci    }
3627db96d56Sopenharmony_ciskip_optional_pos:
3637db96d56Sopenharmony_ci    if (!noptargs) {
3647db96d56Sopenharmony_ci        goto skip_optional_kwonly;
3657db96d56Sopenharmony_ci    }
3667db96d56Sopenharmony_ci    usedforsecurity = PyObject_IsTrue(args[1]);
3677db96d56Sopenharmony_ci    if (usedforsecurity < 0) {
3687db96d56Sopenharmony_ci        goto exit;
3697db96d56Sopenharmony_ci    }
3707db96d56Sopenharmony_ciskip_optional_kwonly:
3717db96d56Sopenharmony_ci    return_value = _hashlib_openssl_sha224_impl(module, data_obj, usedforsecurity);
3727db96d56Sopenharmony_ci
3737db96d56Sopenharmony_ciexit:
3747db96d56Sopenharmony_ci    return return_value;
3757db96d56Sopenharmony_ci}
3767db96d56Sopenharmony_ci
3777db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_openssl_sha256__doc__,
3787db96d56Sopenharmony_ci"openssl_sha256($module, /, string=b\'\', *, usedforsecurity=True)\n"
3797db96d56Sopenharmony_ci"--\n"
3807db96d56Sopenharmony_ci"\n"
3817db96d56Sopenharmony_ci"Returns a sha256 hash object; optionally initialized with a string");
3827db96d56Sopenharmony_ci
3837db96d56Sopenharmony_ci#define _HASHLIB_OPENSSL_SHA256_METHODDEF    \
3847db96d56Sopenharmony_ci    {"openssl_sha256", _PyCFunction_CAST(_hashlib_openssl_sha256), METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha256__doc__},
3857db96d56Sopenharmony_ci
3867db96d56Sopenharmony_cistatic PyObject *
3877db96d56Sopenharmony_ci_hashlib_openssl_sha256_impl(PyObject *module, PyObject *data_obj,
3887db96d56Sopenharmony_ci                             int usedforsecurity);
3897db96d56Sopenharmony_ci
3907db96d56Sopenharmony_cistatic PyObject *
3917db96d56Sopenharmony_ci_hashlib_openssl_sha256(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
3927db96d56Sopenharmony_ci{
3937db96d56Sopenharmony_ci    PyObject *return_value = NULL;
3947db96d56Sopenharmony_ci    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
3957db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha256", 0};
3967db96d56Sopenharmony_ci    PyObject *argsbuf[2];
3977db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
3987db96d56Sopenharmony_ci    PyObject *data_obj = NULL;
3997db96d56Sopenharmony_ci    int usedforsecurity = 1;
4007db96d56Sopenharmony_ci
4017db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
4027db96d56Sopenharmony_ci    if (!args) {
4037db96d56Sopenharmony_ci        goto exit;
4047db96d56Sopenharmony_ci    }
4057db96d56Sopenharmony_ci    if (!noptargs) {
4067db96d56Sopenharmony_ci        goto skip_optional_pos;
4077db96d56Sopenharmony_ci    }
4087db96d56Sopenharmony_ci    if (args[0]) {
4097db96d56Sopenharmony_ci        data_obj = args[0];
4107db96d56Sopenharmony_ci        if (!--noptargs) {
4117db96d56Sopenharmony_ci            goto skip_optional_pos;
4127db96d56Sopenharmony_ci        }
4137db96d56Sopenharmony_ci    }
4147db96d56Sopenharmony_ciskip_optional_pos:
4157db96d56Sopenharmony_ci    if (!noptargs) {
4167db96d56Sopenharmony_ci        goto skip_optional_kwonly;
4177db96d56Sopenharmony_ci    }
4187db96d56Sopenharmony_ci    usedforsecurity = PyObject_IsTrue(args[1]);
4197db96d56Sopenharmony_ci    if (usedforsecurity < 0) {
4207db96d56Sopenharmony_ci        goto exit;
4217db96d56Sopenharmony_ci    }
4227db96d56Sopenharmony_ciskip_optional_kwonly:
4237db96d56Sopenharmony_ci    return_value = _hashlib_openssl_sha256_impl(module, data_obj, usedforsecurity);
4247db96d56Sopenharmony_ci
4257db96d56Sopenharmony_ciexit:
4267db96d56Sopenharmony_ci    return return_value;
4277db96d56Sopenharmony_ci}
4287db96d56Sopenharmony_ci
4297db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_openssl_sha384__doc__,
4307db96d56Sopenharmony_ci"openssl_sha384($module, /, string=b\'\', *, usedforsecurity=True)\n"
4317db96d56Sopenharmony_ci"--\n"
4327db96d56Sopenharmony_ci"\n"
4337db96d56Sopenharmony_ci"Returns a sha384 hash object; optionally initialized with a string");
4347db96d56Sopenharmony_ci
4357db96d56Sopenharmony_ci#define _HASHLIB_OPENSSL_SHA384_METHODDEF    \
4367db96d56Sopenharmony_ci    {"openssl_sha384", _PyCFunction_CAST(_hashlib_openssl_sha384), METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha384__doc__},
4377db96d56Sopenharmony_ci
4387db96d56Sopenharmony_cistatic PyObject *
4397db96d56Sopenharmony_ci_hashlib_openssl_sha384_impl(PyObject *module, PyObject *data_obj,
4407db96d56Sopenharmony_ci                             int usedforsecurity);
4417db96d56Sopenharmony_ci
4427db96d56Sopenharmony_cistatic PyObject *
4437db96d56Sopenharmony_ci_hashlib_openssl_sha384(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
4447db96d56Sopenharmony_ci{
4457db96d56Sopenharmony_ci    PyObject *return_value = NULL;
4467db96d56Sopenharmony_ci    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
4477db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha384", 0};
4487db96d56Sopenharmony_ci    PyObject *argsbuf[2];
4497db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
4507db96d56Sopenharmony_ci    PyObject *data_obj = NULL;
4517db96d56Sopenharmony_ci    int usedforsecurity = 1;
4527db96d56Sopenharmony_ci
4537db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
4547db96d56Sopenharmony_ci    if (!args) {
4557db96d56Sopenharmony_ci        goto exit;
4567db96d56Sopenharmony_ci    }
4577db96d56Sopenharmony_ci    if (!noptargs) {
4587db96d56Sopenharmony_ci        goto skip_optional_pos;
4597db96d56Sopenharmony_ci    }
4607db96d56Sopenharmony_ci    if (args[0]) {
4617db96d56Sopenharmony_ci        data_obj = args[0];
4627db96d56Sopenharmony_ci        if (!--noptargs) {
4637db96d56Sopenharmony_ci            goto skip_optional_pos;
4647db96d56Sopenharmony_ci        }
4657db96d56Sopenharmony_ci    }
4667db96d56Sopenharmony_ciskip_optional_pos:
4677db96d56Sopenharmony_ci    if (!noptargs) {
4687db96d56Sopenharmony_ci        goto skip_optional_kwonly;
4697db96d56Sopenharmony_ci    }
4707db96d56Sopenharmony_ci    usedforsecurity = PyObject_IsTrue(args[1]);
4717db96d56Sopenharmony_ci    if (usedforsecurity < 0) {
4727db96d56Sopenharmony_ci        goto exit;
4737db96d56Sopenharmony_ci    }
4747db96d56Sopenharmony_ciskip_optional_kwonly:
4757db96d56Sopenharmony_ci    return_value = _hashlib_openssl_sha384_impl(module, data_obj, usedforsecurity);
4767db96d56Sopenharmony_ci
4777db96d56Sopenharmony_ciexit:
4787db96d56Sopenharmony_ci    return return_value;
4797db96d56Sopenharmony_ci}
4807db96d56Sopenharmony_ci
4817db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_openssl_sha512__doc__,
4827db96d56Sopenharmony_ci"openssl_sha512($module, /, string=b\'\', *, usedforsecurity=True)\n"
4837db96d56Sopenharmony_ci"--\n"
4847db96d56Sopenharmony_ci"\n"
4857db96d56Sopenharmony_ci"Returns a sha512 hash object; optionally initialized with a string");
4867db96d56Sopenharmony_ci
4877db96d56Sopenharmony_ci#define _HASHLIB_OPENSSL_SHA512_METHODDEF    \
4887db96d56Sopenharmony_ci    {"openssl_sha512", _PyCFunction_CAST(_hashlib_openssl_sha512), METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha512__doc__},
4897db96d56Sopenharmony_ci
4907db96d56Sopenharmony_cistatic PyObject *
4917db96d56Sopenharmony_ci_hashlib_openssl_sha512_impl(PyObject *module, PyObject *data_obj,
4927db96d56Sopenharmony_ci                             int usedforsecurity);
4937db96d56Sopenharmony_ci
4947db96d56Sopenharmony_cistatic PyObject *
4957db96d56Sopenharmony_ci_hashlib_openssl_sha512(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
4967db96d56Sopenharmony_ci{
4977db96d56Sopenharmony_ci    PyObject *return_value = NULL;
4987db96d56Sopenharmony_ci    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
4997db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha512", 0};
5007db96d56Sopenharmony_ci    PyObject *argsbuf[2];
5017db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
5027db96d56Sopenharmony_ci    PyObject *data_obj = NULL;
5037db96d56Sopenharmony_ci    int usedforsecurity = 1;
5047db96d56Sopenharmony_ci
5057db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
5067db96d56Sopenharmony_ci    if (!args) {
5077db96d56Sopenharmony_ci        goto exit;
5087db96d56Sopenharmony_ci    }
5097db96d56Sopenharmony_ci    if (!noptargs) {
5107db96d56Sopenharmony_ci        goto skip_optional_pos;
5117db96d56Sopenharmony_ci    }
5127db96d56Sopenharmony_ci    if (args[0]) {
5137db96d56Sopenharmony_ci        data_obj = args[0];
5147db96d56Sopenharmony_ci        if (!--noptargs) {
5157db96d56Sopenharmony_ci            goto skip_optional_pos;
5167db96d56Sopenharmony_ci        }
5177db96d56Sopenharmony_ci    }
5187db96d56Sopenharmony_ciskip_optional_pos:
5197db96d56Sopenharmony_ci    if (!noptargs) {
5207db96d56Sopenharmony_ci        goto skip_optional_kwonly;
5217db96d56Sopenharmony_ci    }
5227db96d56Sopenharmony_ci    usedforsecurity = PyObject_IsTrue(args[1]);
5237db96d56Sopenharmony_ci    if (usedforsecurity < 0) {
5247db96d56Sopenharmony_ci        goto exit;
5257db96d56Sopenharmony_ci    }
5267db96d56Sopenharmony_ciskip_optional_kwonly:
5277db96d56Sopenharmony_ci    return_value = _hashlib_openssl_sha512_impl(module, data_obj, usedforsecurity);
5287db96d56Sopenharmony_ci
5297db96d56Sopenharmony_ciexit:
5307db96d56Sopenharmony_ci    return return_value;
5317db96d56Sopenharmony_ci}
5327db96d56Sopenharmony_ci
5337db96d56Sopenharmony_ci#if defined(PY_OPENSSL_HAS_SHA3)
5347db96d56Sopenharmony_ci
5357db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_openssl_sha3_224__doc__,
5367db96d56Sopenharmony_ci"openssl_sha3_224($module, /, string=b\'\', *, usedforsecurity=True)\n"
5377db96d56Sopenharmony_ci"--\n"
5387db96d56Sopenharmony_ci"\n"
5397db96d56Sopenharmony_ci"Returns a sha3-224 hash object; optionally initialized with a string");
5407db96d56Sopenharmony_ci
5417db96d56Sopenharmony_ci#define _HASHLIB_OPENSSL_SHA3_224_METHODDEF    \
5427db96d56Sopenharmony_ci    {"openssl_sha3_224", _PyCFunction_CAST(_hashlib_openssl_sha3_224), METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha3_224__doc__},
5437db96d56Sopenharmony_ci
5447db96d56Sopenharmony_cistatic PyObject *
5457db96d56Sopenharmony_ci_hashlib_openssl_sha3_224_impl(PyObject *module, PyObject *data_obj,
5467db96d56Sopenharmony_ci                               int usedforsecurity);
5477db96d56Sopenharmony_ci
5487db96d56Sopenharmony_cistatic PyObject *
5497db96d56Sopenharmony_ci_hashlib_openssl_sha3_224(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
5507db96d56Sopenharmony_ci{
5517db96d56Sopenharmony_ci    PyObject *return_value = NULL;
5527db96d56Sopenharmony_ci    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
5537db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha3_224", 0};
5547db96d56Sopenharmony_ci    PyObject *argsbuf[2];
5557db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
5567db96d56Sopenharmony_ci    PyObject *data_obj = NULL;
5577db96d56Sopenharmony_ci    int usedforsecurity = 1;
5587db96d56Sopenharmony_ci
5597db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
5607db96d56Sopenharmony_ci    if (!args) {
5617db96d56Sopenharmony_ci        goto exit;
5627db96d56Sopenharmony_ci    }
5637db96d56Sopenharmony_ci    if (!noptargs) {
5647db96d56Sopenharmony_ci        goto skip_optional_pos;
5657db96d56Sopenharmony_ci    }
5667db96d56Sopenharmony_ci    if (args[0]) {
5677db96d56Sopenharmony_ci        data_obj = args[0];
5687db96d56Sopenharmony_ci        if (!--noptargs) {
5697db96d56Sopenharmony_ci            goto skip_optional_pos;
5707db96d56Sopenharmony_ci        }
5717db96d56Sopenharmony_ci    }
5727db96d56Sopenharmony_ciskip_optional_pos:
5737db96d56Sopenharmony_ci    if (!noptargs) {
5747db96d56Sopenharmony_ci        goto skip_optional_kwonly;
5757db96d56Sopenharmony_ci    }
5767db96d56Sopenharmony_ci    usedforsecurity = PyObject_IsTrue(args[1]);
5777db96d56Sopenharmony_ci    if (usedforsecurity < 0) {
5787db96d56Sopenharmony_ci        goto exit;
5797db96d56Sopenharmony_ci    }
5807db96d56Sopenharmony_ciskip_optional_kwonly:
5817db96d56Sopenharmony_ci    return_value = _hashlib_openssl_sha3_224_impl(module, data_obj, usedforsecurity);
5827db96d56Sopenharmony_ci
5837db96d56Sopenharmony_ciexit:
5847db96d56Sopenharmony_ci    return return_value;
5857db96d56Sopenharmony_ci}
5867db96d56Sopenharmony_ci
5877db96d56Sopenharmony_ci#endif /* defined(PY_OPENSSL_HAS_SHA3) */
5887db96d56Sopenharmony_ci
5897db96d56Sopenharmony_ci#if defined(PY_OPENSSL_HAS_SHA3)
5907db96d56Sopenharmony_ci
5917db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_openssl_sha3_256__doc__,
5927db96d56Sopenharmony_ci"openssl_sha3_256($module, /, string=b\'\', *, usedforsecurity=True)\n"
5937db96d56Sopenharmony_ci"--\n"
5947db96d56Sopenharmony_ci"\n"
5957db96d56Sopenharmony_ci"Returns a sha3-256 hash object; optionally initialized with a string");
5967db96d56Sopenharmony_ci
5977db96d56Sopenharmony_ci#define _HASHLIB_OPENSSL_SHA3_256_METHODDEF    \
5987db96d56Sopenharmony_ci    {"openssl_sha3_256", _PyCFunction_CAST(_hashlib_openssl_sha3_256), METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha3_256__doc__},
5997db96d56Sopenharmony_ci
6007db96d56Sopenharmony_cistatic PyObject *
6017db96d56Sopenharmony_ci_hashlib_openssl_sha3_256_impl(PyObject *module, PyObject *data_obj,
6027db96d56Sopenharmony_ci                               int usedforsecurity);
6037db96d56Sopenharmony_ci
6047db96d56Sopenharmony_cistatic PyObject *
6057db96d56Sopenharmony_ci_hashlib_openssl_sha3_256(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
6067db96d56Sopenharmony_ci{
6077db96d56Sopenharmony_ci    PyObject *return_value = NULL;
6087db96d56Sopenharmony_ci    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
6097db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha3_256", 0};
6107db96d56Sopenharmony_ci    PyObject *argsbuf[2];
6117db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
6127db96d56Sopenharmony_ci    PyObject *data_obj = NULL;
6137db96d56Sopenharmony_ci    int usedforsecurity = 1;
6147db96d56Sopenharmony_ci
6157db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
6167db96d56Sopenharmony_ci    if (!args) {
6177db96d56Sopenharmony_ci        goto exit;
6187db96d56Sopenharmony_ci    }
6197db96d56Sopenharmony_ci    if (!noptargs) {
6207db96d56Sopenharmony_ci        goto skip_optional_pos;
6217db96d56Sopenharmony_ci    }
6227db96d56Sopenharmony_ci    if (args[0]) {
6237db96d56Sopenharmony_ci        data_obj = args[0];
6247db96d56Sopenharmony_ci        if (!--noptargs) {
6257db96d56Sopenharmony_ci            goto skip_optional_pos;
6267db96d56Sopenharmony_ci        }
6277db96d56Sopenharmony_ci    }
6287db96d56Sopenharmony_ciskip_optional_pos:
6297db96d56Sopenharmony_ci    if (!noptargs) {
6307db96d56Sopenharmony_ci        goto skip_optional_kwonly;
6317db96d56Sopenharmony_ci    }
6327db96d56Sopenharmony_ci    usedforsecurity = PyObject_IsTrue(args[1]);
6337db96d56Sopenharmony_ci    if (usedforsecurity < 0) {
6347db96d56Sopenharmony_ci        goto exit;
6357db96d56Sopenharmony_ci    }
6367db96d56Sopenharmony_ciskip_optional_kwonly:
6377db96d56Sopenharmony_ci    return_value = _hashlib_openssl_sha3_256_impl(module, data_obj, usedforsecurity);
6387db96d56Sopenharmony_ci
6397db96d56Sopenharmony_ciexit:
6407db96d56Sopenharmony_ci    return return_value;
6417db96d56Sopenharmony_ci}
6427db96d56Sopenharmony_ci
6437db96d56Sopenharmony_ci#endif /* defined(PY_OPENSSL_HAS_SHA3) */
6447db96d56Sopenharmony_ci
6457db96d56Sopenharmony_ci#if defined(PY_OPENSSL_HAS_SHA3)
6467db96d56Sopenharmony_ci
6477db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_openssl_sha3_384__doc__,
6487db96d56Sopenharmony_ci"openssl_sha3_384($module, /, string=b\'\', *, usedforsecurity=True)\n"
6497db96d56Sopenharmony_ci"--\n"
6507db96d56Sopenharmony_ci"\n"
6517db96d56Sopenharmony_ci"Returns a sha3-384 hash object; optionally initialized with a string");
6527db96d56Sopenharmony_ci
6537db96d56Sopenharmony_ci#define _HASHLIB_OPENSSL_SHA3_384_METHODDEF    \
6547db96d56Sopenharmony_ci    {"openssl_sha3_384", _PyCFunction_CAST(_hashlib_openssl_sha3_384), METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha3_384__doc__},
6557db96d56Sopenharmony_ci
6567db96d56Sopenharmony_cistatic PyObject *
6577db96d56Sopenharmony_ci_hashlib_openssl_sha3_384_impl(PyObject *module, PyObject *data_obj,
6587db96d56Sopenharmony_ci                               int usedforsecurity);
6597db96d56Sopenharmony_ci
6607db96d56Sopenharmony_cistatic PyObject *
6617db96d56Sopenharmony_ci_hashlib_openssl_sha3_384(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
6627db96d56Sopenharmony_ci{
6637db96d56Sopenharmony_ci    PyObject *return_value = NULL;
6647db96d56Sopenharmony_ci    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
6657db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha3_384", 0};
6667db96d56Sopenharmony_ci    PyObject *argsbuf[2];
6677db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
6687db96d56Sopenharmony_ci    PyObject *data_obj = NULL;
6697db96d56Sopenharmony_ci    int usedforsecurity = 1;
6707db96d56Sopenharmony_ci
6717db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
6727db96d56Sopenharmony_ci    if (!args) {
6737db96d56Sopenharmony_ci        goto exit;
6747db96d56Sopenharmony_ci    }
6757db96d56Sopenharmony_ci    if (!noptargs) {
6767db96d56Sopenharmony_ci        goto skip_optional_pos;
6777db96d56Sopenharmony_ci    }
6787db96d56Sopenharmony_ci    if (args[0]) {
6797db96d56Sopenharmony_ci        data_obj = args[0];
6807db96d56Sopenharmony_ci        if (!--noptargs) {
6817db96d56Sopenharmony_ci            goto skip_optional_pos;
6827db96d56Sopenharmony_ci        }
6837db96d56Sopenharmony_ci    }
6847db96d56Sopenharmony_ciskip_optional_pos:
6857db96d56Sopenharmony_ci    if (!noptargs) {
6867db96d56Sopenharmony_ci        goto skip_optional_kwonly;
6877db96d56Sopenharmony_ci    }
6887db96d56Sopenharmony_ci    usedforsecurity = PyObject_IsTrue(args[1]);
6897db96d56Sopenharmony_ci    if (usedforsecurity < 0) {
6907db96d56Sopenharmony_ci        goto exit;
6917db96d56Sopenharmony_ci    }
6927db96d56Sopenharmony_ciskip_optional_kwonly:
6937db96d56Sopenharmony_ci    return_value = _hashlib_openssl_sha3_384_impl(module, data_obj, usedforsecurity);
6947db96d56Sopenharmony_ci
6957db96d56Sopenharmony_ciexit:
6967db96d56Sopenharmony_ci    return return_value;
6977db96d56Sopenharmony_ci}
6987db96d56Sopenharmony_ci
6997db96d56Sopenharmony_ci#endif /* defined(PY_OPENSSL_HAS_SHA3) */
7007db96d56Sopenharmony_ci
7017db96d56Sopenharmony_ci#if defined(PY_OPENSSL_HAS_SHA3)
7027db96d56Sopenharmony_ci
7037db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_openssl_sha3_512__doc__,
7047db96d56Sopenharmony_ci"openssl_sha3_512($module, /, string=b\'\', *, usedforsecurity=True)\n"
7057db96d56Sopenharmony_ci"--\n"
7067db96d56Sopenharmony_ci"\n"
7077db96d56Sopenharmony_ci"Returns a sha3-512 hash object; optionally initialized with a string");
7087db96d56Sopenharmony_ci
7097db96d56Sopenharmony_ci#define _HASHLIB_OPENSSL_SHA3_512_METHODDEF    \
7107db96d56Sopenharmony_ci    {"openssl_sha3_512", _PyCFunction_CAST(_hashlib_openssl_sha3_512), METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha3_512__doc__},
7117db96d56Sopenharmony_ci
7127db96d56Sopenharmony_cistatic PyObject *
7137db96d56Sopenharmony_ci_hashlib_openssl_sha3_512_impl(PyObject *module, PyObject *data_obj,
7147db96d56Sopenharmony_ci                               int usedforsecurity);
7157db96d56Sopenharmony_ci
7167db96d56Sopenharmony_cistatic PyObject *
7177db96d56Sopenharmony_ci_hashlib_openssl_sha3_512(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
7187db96d56Sopenharmony_ci{
7197db96d56Sopenharmony_ci    PyObject *return_value = NULL;
7207db96d56Sopenharmony_ci    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
7217db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha3_512", 0};
7227db96d56Sopenharmony_ci    PyObject *argsbuf[2];
7237db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
7247db96d56Sopenharmony_ci    PyObject *data_obj = NULL;
7257db96d56Sopenharmony_ci    int usedforsecurity = 1;
7267db96d56Sopenharmony_ci
7277db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
7287db96d56Sopenharmony_ci    if (!args) {
7297db96d56Sopenharmony_ci        goto exit;
7307db96d56Sopenharmony_ci    }
7317db96d56Sopenharmony_ci    if (!noptargs) {
7327db96d56Sopenharmony_ci        goto skip_optional_pos;
7337db96d56Sopenharmony_ci    }
7347db96d56Sopenharmony_ci    if (args[0]) {
7357db96d56Sopenharmony_ci        data_obj = args[0];
7367db96d56Sopenharmony_ci        if (!--noptargs) {
7377db96d56Sopenharmony_ci            goto skip_optional_pos;
7387db96d56Sopenharmony_ci        }
7397db96d56Sopenharmony_ci    }
7407db96d56Sopenharmony_ciskip_optional_pos:
7417db96d56Sopenharmony_ci    if (!noptargs) {
7427db96d56Sopenharmony_ci        goto skip_optional_kwonly;
7437db96d56Sopenharmony_ci    }
7447db96d56Sopenharmony_ci    usedforsecurity = PyObject_IsTrue(args[1]);
7457db96d56Sopenharmony_ci    if (usedforsecurity < 0) {
7467db96d56Sopenharmony_ci        goto exit;
7477db96d56Sopenharmony_ci    }
7487db96d56Sopenharmony_ciskip_optional_kwonly:
7497db96d56Sopenharmony_ci    return_value = _hashlib_openssl_sha3_512_impl(module, data_obj, usedforsecurity);
7507db96d56Sopenharmony_ci
7517db96d56Sopenharmony_ciexit:
7527db96d56Sopenharmony_ci    return return_value;
7537db96d56Sopenharmony_ci}
7547db96d56Sopenharmony_ci
7557db96d56Sopenharmony_ci#endif /* defined(PY_OPENSSL_HAS_SHA3) */
7567db96d56Sopenharmony_ci
7577db96d56Sopenharmony_ci#if defined(PY_OPENSSL_HAS_SHAKE)
7587db96d56Sopenharmony_ci
7597db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_openssl_shake_128__doc__,
7607db96d56Sopenharmony_ci"openssl_shake_128($module, /, string=b\'\', *, usedforsecurity=True)\n"
7617db96d56Sopenharmony_ci"--\n"
7627db96d56Sopenharmony_ci"\n"
7637db96d56Sopenharmony_ci"Returns a shake-128 variable hash object; optionally initialized with a string");
7647db96d56Sopenharmony_ci
7657db96d56Sopenharmony_ci#define _HASHLIB_OPENSSL_SHAKE_128_METHODDEF    \
7667db96d56Sopenharmony_ci    {"openssl_shake_128", _PyCFunction_CAST(_hashlib_openssl_shake_128), METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_shake_128__doc__},
7677db96d56Sopenharmony_ci
7687db96d56Sopenharmony_cistatic PyObject *
7697db96d56Sopenharmony_ci_hashlib_openssl_shake_128_impl(PyObject *module, PyObject *data_obj,
7707db96d56Sopenharmony_ci                                int usedforsecurity);
7717db96d56Sopenharmony_ci
7727db96d56Sopenharmony_cistatic PyObject *
7737db96d56Sopenharmony_ci_hashlib_openssl_shake_128(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
7747db96d56Sopenharmony_ci{
7757db96d56Sopenharmony_ci    PyObject *return_value = NULL;
7767db96d56Sopenharmony_ci    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
7777db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_shake_128", 0};
7787db96d56Sopenharmony_ci    PyObject *argsbuf[2];
7797db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
7807db96d56Sopenharmony_ci    PyObject *data_obj = NULL;
7817db96d56Sopenharmony_ci    int usedforsecurity = 1;
7827db96d56Sopenharmony_ci
7837db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
7847db96d56Sopenharmony_ci    if (!args) {
7857db96d56Sopenharmony_ci        goto exit;
7867db96d56Sopenharmony_ci    }
7877db96d56Sopenharmony_ci    if (!noptargs) {
7887db96d56Sopenharmony_ci        goto skip_optional_pos;
7897db96d56Sopenharmony_ci    }
7907db96d56Sopenharmony_ci    if (args[0]) {
7917db96d56Sopenharmony_ci        data_obj = args[0];
7927db96d56Sopenharmony_ci        if (!--noptargs) {
7937db96d56Sopenharmony_ci            goto skip_optional_pos;
7947db96d56Sopenharmony_ci        }
7957db96d56Sopenharmony_ci    }
7967db96d56Sopenharmony_ciskip_optional_pos:
7977db96d56Sopenharmony_ci    if (!noptargs) {
7987db96d56Sopenharmony_ci        goto skip_optional_kwonly;
7997db96d56Sopenharmony_ci    }
8007db96d56Sopenharmony_ci    usedforsecurity = PyObject_IsTrue(args[1]);
8017db96d56Sopenharmony_ci    if (usedforsecurity < 0) {
8027db96d56Sopenharmony_ci        goto exit;
8037db96d56Sopenharmony_ci    }
8047db96d56Sopenharmony_ciskip_optional_kwonly:
8057db96d56Sopenharmony_ci    return_value = _hashlib_openssl_shake_128_impl(module, data_obj, usedforsecurity);
8067db96d56Sopenharmony_ci
8077db96d56Sopenharmony_ciexit:
8087db96d56Sopenharmony_ci    return return_value;
8097db96d56Sopenharmony_ci}
8107db96d56Sopenharmony_ci
8117db96d56Sopenharmony_ci#endif /* defined(PY_OPENSSL_HAS_SHAKE) */
8127db96d56Sopenharmony_ci
8137db96d56Sopenharmony_ci#if defined(PY_OPENSSL_HAS_SHAKE)
8147db96d56Sopenharmony_ci
8157db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_openssl_shake_256__doc__,
8167db96d56Sopenharmony_ci"openssl_shake_256($module, /, string=b\'\', *, usedforsecurity=True)\n"
8177db96d56Sopenharmony_ci"--\n"
8187db96d56Sopenharmony_ci"\n"
8197db96d56Sopenharmony_ci"Returns a shake-256 variable hash object; optionally initialized with a string");
8207db96d56Sopenharmony_ci
8217db96d56Sopenharmony_ci#define _HASHLIB_OPENSSL_SHAKE_256_METHODDEF    \
8227db96d56Sopenharmony_ci    {"openssl_shake_256", _PyCFunction_CAST(_hashlib_openssl_shake_256), METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_shake_256__doc__},
8237db96d56Sopenharmony_ci
8247db96d56Sopenharmony_cistatic PyObject *
8257db96d56Sopenharmony_ci_hashlib_openssl_shake_256_impl(PyObject *module, PyObject *data_obj,
8267db96d56Sopenharmony_ci                                int usedforsecurity);
8277db96d56Sopenharmony_ci
8287db96d56Sopenharmony_cistatic PyObject *
8297db96d56Sopenharmony_ci_hashlib_openssl_shake_256(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
8307db96d56Sopenharmony_ci{
8317db96d56Sopenharmony_ci    PyObject *return_value = NULL;
8327db96d56Sopenharmony_ci    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
8337db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_shake_256", 0};
8347db96d56Sopenharmony_ci    PyObject *argsbuf[2];
8357db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
8367db96d56Sopenharmony_ci    PyObject *data_obj = NULL;
8377db96d56Sopenharmony_ci    int usedforsecurity = 1;
8387db96d56Sopenharmony_ci
8397db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
8407db96d56Sopenharmony_ci    if (!args) {
8417db96d56Sopenharmony_ci        goto exit;
8427db96d56Sopenharmony_ci    }
8437db96d56Sopenharmony_ci    if (!noptargs) {
8447db96d56Sopenharmony_ci        goto skip_optional_pos;
8457db96d56Sopenharmony_ci    }
8467db96d56Sopenharmony_ci    if (args[0]) {
8477db96d56Sopenharmony_ci        data_obj = args[0];
8487db96d56Sopenharmony_ci        if (!--noptargs) {
8497db96d56Sopenharmony_ci            goto skip_optional_pos;
8507db96d56Sopenharmony_ci        }
8517db96d56Sopenharmony_ci    }
8527db96d56Sopenharmony_ciskip_optional_pos:
8537db96d56Sopenharmony_ci    if (!noptargs) {
8547db96d56Sopenharmony_ci        goto skip_optional_kwonly;
8557db96d56Sopenharmony_ci    }
8567db96d56Sopenharmony_ci    usedforsecurity = PyObject_IsTrue(args[1]);
8577db96d56Sopenharmony_ci    if (usedforsecurity < 0) {
8587db96d56Sopenharmony_ci        goto exit;
8597db96d56Sopenharmony_ci    }
8607db96d56Sopenharmony_ciskip_optional_kwonly:
8617db96d56Sopenharmony_ci    return_value = _hashlib_openssl_shake_256_impl(module, data_obj, usedforsecurity);
8627db96d56Sopenharmony_ci
8637db96d56Sopenharmony_ciexit:
8647db96d56Sopenharmony_ci    return return_value;
8657db96d56Sopenharmony_ci}
8667db96d56Sopenharmony_ci
8677db96d56Sopenharmony_ci#endif /* defined(PY_OPENSSL_HAS_SHAKE) */
8687db96d56Sopenharmony_ci
8697db96d56Sopenharmony_ciPyDoc_STRVAR(pbkdf2_hmac__doc__,
8707db96d56Sopenharmony_ci"pbkdf2_hmac($module, /, hash_name, password, salt, iterations,\n"
8717db96d56Sopenharmony_ci"            dklen=None)\n"
8727db96d56Sopenharmony_ci"--\n"
8737db96d56Sopenharmony_ci"\n"
8747db96d56Sopenharmony_ci"Password based key derivation function 2 (PKCS #5 v2.0) with HMAC as pseudorandom function.");
8757db96d56Sopenharmony_ci
8767db96d56Sopenharmony_ci#define PBKDF2_HMAC_METHODDEF    \
8777db96d56Sopenharmony_ci    {"pbkdf2_hmac", _PyCFunction_CAST(pbkdf2_hmac), METH_FASTCALL|METH_KEYWORDS, pbkdf2_hmac__doc__},
8787db96d56Sopenharmony_ci
8797db96d56Sopenharmony_cistatic PyObject *
8807db96d56Sopenharmony_cipbkdf2_hmac_impl(PyObject *module, const char *hash_name,
8817db96d56Sopenharmony_ci                 Py_buffer *password, Py_buffer *salt, long iterations,
8827db96d56Sopenharmony_ci                 PyObject *dklen_obj);
8837db96d56Sopenharmony_ci
8847db96d56Sopenharmony_cistatic PyObject *
8857db96d56Sopenharmony_cipbkdf2_hmac(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
8867db96d56Sopenharmony_ci{
8877db96d56Sopenharmony_ci    PyObject *return_value = NULL;
8887db96d56Sopenharmony_ci    static const char * const _keywords[] = {"hash_name", "password", "salt", "iterations", "dklen", NULL};
8897db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "pbkdf2_hmac", 0};
8907db96d56Sopenharmony_ci    PyObject *argsbuf[5];
8917db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 4;
8927db96d56Sopenharmony_ci    const char *hash_name;
8937db96d56Sopenharmony_ci    Py_buffer password = {NULL, NULL};
8947db96d56Sopenharmony_ci    Py_buffer salt = {NULL, NULL};
8957db96d56Sopenharmony_ci    long iterations;
8967db96d56Sopenharmony_ci    PyObject *dklen_obj = Py_None;
8977db96d56Sopenharmony_ci
8987db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 4, 5, 0, argsbuf);
8997db96d56Sopenharmony_ci    if (!args) {
9007db96d56Sopenharmony_ci        goto exit;
9017db96d56Sopenharmony_ci    }
9027db96d56Sopenharmony_ci    if (!PyUnicode_Check(args[0])) {
9037db96d56Sopenharmony_ci        _PyArg_BadArgument("pbkdf2_hmac", "argument 'hash_name'", "str", args[0]);
9047db96d56Sopenharmony_ci        goto exit;
9057db96d56Sopenharmony_ci    }
9067db96d56Sopenharmony_ci    Py_ssize_t hash_name_length;
9077db96d56Sopenharmony_ci    hash_name = PyUnicode_AsUTF8AndSize(args[0], &hash_name_length);
9087db96d56Sopenharmony_ci    if (hash_name == NULL) {
9097db96d56Sopenharmony_ci        goto exit;
9107db96d56Sopenharmony_ci    }
9117db96d56Sopenharmony_ci    if (strlen(hash_name) != (size_t)hash_name_length) {
9127db96d56Sopenharmony_ci        PyErr_SetString(PyExc_ValueError, "embedded null character");
9137db96d56Sopenharmony_ci        goto exit;
9147db96d56Sopenharmony_ci    }
9157db96d56Sopenharmony_ci    if (PyObject_GetBuffer(args[1], &password, PyBUF_SIMPLE) != 0) {
9167db96d56Sopenharmony_ci        goto exit;
9177db96d56Sopenharmony_ci    }
9187db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&password, 'C')) {
9197db96d56Sopenharmony_ci        _PyArg_BadArgument("pbkdf2_hmac", "argument 'password'", "contiguous buffer", args[1]);
9207db96d56Sopenharmony_ci        goto exit;
9217db96d56Sopenharmony_ci    }
9227db96d56Sopenharmony_ci    if (PyObject_GetBuffer(args[2], &salt, PyBUF_SIMPLE) != 0) {
9237db96d56Sopenharmony_ci        goto exit;
9247db96d56Sopenharmony_ci    }
9257db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&salt, 'C')) {
9267db96d56Sopenharmony_ci        _PyArg_BadArgument("pbkdf2_hmac", "argument 'salt'", "contiguous buffer", args[2]);
9277db96d56Sopenharmony_ci        goto exit;
9287db96d56Sopenharmony_ci    }
9297db96d56Sopenharmony_ci    iterations = PyLong_AsLong(args[3]);
9307db96d56Sopenharmony_ci    if (iterations == -1 && PyErr_Occurred()) {
9317db96d56Sopenharmony_ci        goto exit;
9327db96d56Sopenharmony_ci    }
9337db96d56Sopenharmony_ci    if (!noptargs) {
9347db96d56Sopenharmony_ci        goto skip_optional_pos;
9357db96d56Sopenharmony_ci    }
9367db96d56Sopenharmony_ci    dklen_obj = args[4];
9377db96d56Sopenharmony_ciskip_optional_pos:
9387db96d56Sopenharmony_ci    return_value = pbkdf2_hmac_impl(module, hash_name, &password, &salt, iterations, dklen_obj);
9397db96d56Sopenharmony_ci
9407db96d56Sopenharmony_ciexit:
9417db96d56Sopenharmony_ci    /* Cleanup for password */
9427db96d56Sopenharmony_ci    if (password.obj) {
9437db96d56Sopenharmony_ci       PyBuffer_Release(&password);
9447db96d56Sopenharmony_ci    }
9457db96d56Sopenharmony_ci    /* Cleanup for salt */
9467db96d56Sopenharmony_ci    if (salt.obj) {
9477db96d56Sopenharmony_ci       PyBuffer_Release(&salt);
9487db96d56Sopenharmony_ci    }
9497db96d56Sopenharmony_ci
9507db96d56Sopenharmony_ci    return return_value;
9517db96d56Sopenharmony_ci}
9527db96d56Sopenharmony_ci
9537db96d56Sopenharmony_ci#if defined(PY_OPENSSL_HAS_SCRYPT)
9547db96d56Sopenharmony_ci
9557db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_scrypt__doc__,
9567db96d56Sopenharmony_ci"scrypt($module, /, password, *, salt=None, n=None, r=None, p=None,\n"
9577db96d56Sopenharmony_ci"       maxmem=0, dklen=64)\n"
9587db96d56Sopenharmony_ci"--\n"
9597db96d56Sopenharmony_ci"\n"
9607db96d56Sopenharmony_ci"scrypt password-based key derivation function.");
9617db96d56Sopenharmony_ci
9627db96d56Sopenharmony_ci#define _HASHLIB_SCRYPT_METHODDEF    \
9637db96d56Sopenharmony_ci    {"scrypt", _PyCFunction_CAST(_hashlib_scrypt), METH_FASTCALL|METH_KEYWORDS, _hashlib_scrypt__doc__},
9647db96d56Sopenharmony_ci
9657db96d56Sopenharmony_cistatic PyObject *
9667db96d56Sopenharmony_ci_hashlib_scrypt_impl(PyObject *module, Py_buffer *password, Py_buffer *salt,
9677db96d56Sopenharmony_ci                     PyObject *n_obj, PyObject *r_obj, PyObject *p_obj,
9687db96d56Sopenharmony_ci                     long maxmem, long dklen);
9697db96d56Sopenharmony_ci
9707db96d56Sopenharmony_cistatic PyObject *
9717db96d56Sopenharmony_ci_hashlib_scrypt(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
9727db96d56Sopenharmony_ci{
9737db96d56Sopenharmony_ci    PyObject *return_value = NULL;
9747db96d56Sopenharmony_ci    static const char * const _keywords[] = {"password", "salt", "n", "r", "p", "maxmem", "dklen", NULL};
9757db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "scrypt", 0};
9767db96d56Sopenharmony_ci    PyObject *argsbuf[7];
9777db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
9787db96d56Sopenharmony_ci    Py_buffer password = {NULL, NULL};
9797db96d56Sopenharmony_ci    Py_buffer salt = {NULL, NULL};
9807db96d56Sopenharmony_ci    PyObject *n_obj = Py_None;
9817db96d56Sopenharmony_ci    PyObject *r_obj = Py_None;
9827db96d56Sopenharmony_ci    PyObject *p_obj = Py_None;
9837db96d56Sopenharmony_ci    long maxmem = 0;
9847db96d56Sopenharmony_ci    long dklen = 64;
9857db96d56Sopenharmony_ci
9867db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
9877db96d56Sopenharmony_ci    if (!args) {
9887db96d56Sopenharmony_ci        goto exit;
9897db96d56Sopenharmony_ci    }
9907db96d56Sopenharmony_ci    if (PyObject_GetBuffer(args[0], &password, PyBUF_SIMPLE) != 0) {
9917db96d56Sopenharmony_ci        goto exit;
9927db96d56Sopenharmony_ci    }
9937db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&password, 'C')) {
9947db96d56Sopenharmony_ci        _PyArg_BadArgument("scrypt", "argument 'password'", "contiguous buffer", args[0]);
9957db96d56Sopenharmony_ci        goto exit;
9967db96d56Sopenharmony_ci    }
9977db96d56Sopenharmony_ci    if (!noptargs) {
9987db96d56Sopenharmony_ci        goto skip_optional_kwonly;
9997db96d56Sopenharmony_ci    }
10007db96d56Sopenharmony_ci    if (args[1]) {
10017db96d56Sopenharmony_ci        if (PyObject_GetBuffer(args[1], &salt, PyBUF_SIMPLE) != 0) {
10027db96d56Sopenharmony_ci            goto exit;
10037db96d56Sopenharmony_ci        }
10047db96d56Sopenharmony_ci        if (!PyBuffer_IsContiguous(&salt, 'C')) {
10057db96d56Sopenharmony_ci            _PyArg_BadArgument("scrypt", "argument 'salt'", "contiguous buffer", args[1]);
10067db96d56Sopenharmony_ci            goto exit;
10077db96d56Sopenharmony_ci        }
10087db96d56Sopenharmony_ci        if (!--noptargs) {
10097db96d56Sopenharmony_ci            goto skip_optional_kwonly;
10107db96d56Sopenharmony_ci        }
10117db96d56Sopenharmony_ci    }
10127db96d56Sopenharmony_ci    if (args[2]) {
10137db96d56Sopenharmony_ci        if (!PyLong_Check(args[2])) {
10147db96d56Sopenharmony_ci            _PyArg_BadArgument("scrypt", "argument 'n'", "int", args[2]);
10157db96d56Sopenharmony_ci            goto exit;
10167db96d56Sopenharmony_ci        }
10177db96d56Sopenharmony_ci        n_obj = args[2];
10187db96d56Sopenharmony_ci        if (!--noptargs) {
10197db96d56Sopenharmony_ci            goto skip_optional_kwonly;
10207db96d56Sopenharmony_ci        }
10217db96d56Sopenharmony_ci    }
10227db96d56Sopenharmony_ci    if (args[3]) {
10237db96d56Sopenharmony_ci        if (!PyLong_Check(args[3])) {
10247db96d56Sopenharmony_ci            _PyArg_BadArgument("scrypt", "argument 'r'", "int", args[3]);
10257db96d56Sopenharmony_ci            goto exit;
10267db96d56Sopenharmony_ci        }
10277db96d56Sopenharmony_ci        r_obj = args[3];
10287db96d56Sopenharmony_ci        if (!--noptargs) {
10297db96d56Sopenharmony_ci            goto skip_optional_kwonly;
10307db96d56Sopenharmony_ci        }
10317db96d56Sopenharmony_ci    }
10327db96d56Sopenharmony_ci    if (args[4]) {
10337db96d56Sopenharmony_ci        if (!PyLong_Check(args[4])) {
10347db96d56Sopenharmony_ci            _PyArg_BadArgument("scrypt", "argument 'p'", "int", args[4]);
10357db96d56Sopenharmony_ci            goto exit;
10367db96d56Sopenharmony_ci        }
10377db96d56Sopenharmony_ci        p_obj = args[4];
10387db96d56Sopenharmony_ci        if (!--noptargs) {
10397db96d56Sopenharmony_ci            goto skip_optional_kwonly;
10407db96d56Sopenharmony_ci        }
10417db96d56Sopenharmony_ci    }
10427db96d56Sopenharmony_ci    if (args[5]) {
10437db96d56Sopenharmony_ci        maxmem = PyLong_AsLong(args[5]);
10447db96d56Sopenharmony_ci        if (maxmem == -1 && PyErr_Occurred()) {
10457db96d56Sopenharmony_ci            goto exit;
10467db96d56Sopenharmony_ci        }
10477db96d56Sopenharmony_ci        if (!--noptargs) {
10487db96d56Sopenharmony_ci            goto skip_optional_kwonly;
10497db96d56Sopenharmony_ci        }
10507db96d56Sopenharmony_ci    }
10517db96d56Sopenharmony_ci    dklen = PyLong_AsLong(args[6]);
10527db96d56Sopenharmony_ci    if (dklen == -1 && PyErr_Occurred()) {
10537db96d56Sopenharmony_ci        goto exit;
10547db96d56Sopenharmony_ci    }
10557db96d56Sopenharmony_ciskip_optional_kwonly:
10567db96d56Sopenharmony_ci    return_value = _hashlib_scrypt_impl(module, &password, &salt, n_obj, r_obj, p_obj, maxmem, dklen);
10577db96d56Sopenharmony_ci
10587db96d56Sopenharmony_ciexit:
10597db96d56Sopenharmony_ci    /* Cleanup for password */
10607db96d56Sopenharmony_ci    if (password.obj) {
10617db96d56Sopenharmony_ci       PyBuffer_Release(&password);
10627db96d56Sopenharmony_ci    }
10637db96d56Sopenharmony_ci    /* Cleanup for salt */
10647db96d56Sopenharmony_ci    if (salt.obj) {
10657db96d56Sopenharmony_ci       PyBuffer_Release(&salt);
10667db96d56Sopenharmony_ci    }
10677db96d56Sopenharmony_ci
10687db96d56Sopenharmony_ci    return return_value;
10697db96d56Sopenharmony_ci}
10707db96d56Sopenharmony_ci
10717db96d56Sopenharmony_ci#endif /* defined(PY_OPENSSL_HAS_SCRYPT) */
10727db96d56Sopenharmony_ci
10737db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_hmac_singleshot__doc__,
10747db96d56Sopenharmony_ci"hmac_digest($module, /, key, msg, digest)\n"
10757db96d56Sopenharmony_ci"--\n"
10767db96d56Sopenharmony_ci"\n"
10777db96d56Sopenharmony_ci"Single-shot HMAC.");
10787db96d56Sopenharmony_ci
10797db96d56Sopenharmony_ci#define _HASHLIB_HMAC_SINGLESHOT_METHODDEF    \
10807db96d56Sopenharmony_ci    {"hmac_digest", _PyCFunction_CAST(_hashlib_hmac_singleshot), METH_FASTCALL|METH_KEYWORDS, _hashlib_hmac_singleshot__doc__},
10817db96d56Sopenharmony_ci
10827db96d56Sopenharmony_cistatic PyObject *
10837db96d56Sopenharmony_ci_hashlib_hmac_singleshot_impl(PyObject *module, Py_buffer *key,
10847db96d56Sopenharmony_ci                              Py_buffer *msg, PyObject *digest);
10857db96d56Sopenharmony_ci
10867db96d56Sopenharmony_cistatic PyObject *
10877db96d56Sopenharmony_ci_hashlib_hmac_singleshot(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
10887db96d56Sopenharmony_ci{
10897db96d56Sopenharmony_ci    PyObject *return_value = NULL;
10907db96d56Sopenharmony_ci    static const char * const _keywords[] = {"key", "msg", "digest", NULL};
10917db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "hmac_digest", 0};
10927db96d56Sopenharmony_ci    PyObject *argsbuf[3];
10937db96d56Sopenharmony_ci    Py_buffer key = {NULL, NULL};
10947db96d56Sopenharmony_ci    Py_buffer msg = {NULL, NULL};
10957db96d56Sopenharmony_ci    PyObject *digest;
10967db96d56Sopenharmony_ci
10977db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf);
10987db96d56Sopenharmony_ci    if (!args) {
10997db96d56Sopenharmony_ci        goto exit;
11007db96d56Sopenharmony_ci    }
11017db96d56Sopenharmony_ci    if (PyObject_GetBuffer(args[0], &key, PyBUF_SIMPLE) != 0) {
11027db96d56Sopenharmony_ci        goto exit;
11037db96d56Sopenharmony_ci    }
11047db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&key, 'C')) {
11057db96d56Sopenharmony_ci        _PyArg_BadArgument("hmac_digest", "argument 'key'", "contiguous buffer", args[0]);
11067db96d56Sopenharmony_ci        goto exit;
11077db96d56Sopenharmony_ci    }
11087db96d56Sopenharmony_ci    if (PyObject_GetBuffer(args[1], &msg, PyBUF_SIMPLE) != 0) {
11097db96d56Sopenharmony_ci        goto exit;
11107db96d56Sopenharmony_ci    }
11117db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&msg, 'C')) {
11127db96d56Sopenharmony_ci        _PyArg_BadArgument("hmac_digest", "argument 'msg'", "contiguous buffer", args[1]);
11137db96d56Sopenharmony_ci        goto exit;
11147db96d56Sopenharmony_ci    }
11157db96d56Sopenharmony_ci    digest = args[2];
11167db96d56Sopenharmony_ci    return_value = _hashlib_hmac_singleshot_impl(module, &key, &msg, digest);
11177db96d56Sopenharmony_ci
11187db96d56Sopenharmony_ciexit:
11197db96d56Sopenharmony_ci    /* Cleanup for key */
11207db96d56Sopenharmony_ci    if (key.obj) {
11217db96d56Sopenharmony_ci       PyBuffer_Release(&key);
11227db96d56Sopenharmony_ci    }
11237db96d56Sopenharmony_ci    /* Cleanup for msg */
11247db96d56Sopenharmony_ci    if (msg.obj) {
11257db96d56Sopenharmony_ci       PyBuffer_Release(&msg);
11267db96d56Sopenharmony_ci    }
11277db96d56Sopenharmony_ci
11287db96d56Sopenharmony_ci    return return_value;
11297db96d56Sopenharmony_ci}
11307db96d56Sopenharmony_ci
11317db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_hmac_new__doc__,
11327db96d56Sopenharmony_ci"hmac_new($module, /, key, msg=b\'\', digestmod=None)\n"
11337db96d56Sopenharmony_ci"--\n"
11347db96d56Sopenharmony_ci"\n"
11357db96d56Sopenharmony_ci"Return a new hmac object.");
11367db96d56Sopenharmony_ci
11377db96d56Sopenharmony_ci#define _HASHLIB_HMAC_NEW_METHODDEF    \
11387db96d56Sopenharmony_ci    {"hmac_new", _PyCFunction_CAST(_hashlib_hmac_new), METH_FASTCALL|METH_KEYWORDS, _hashlib_hmac_new__doc__},
11397db96d56Sopenharmony_ci
11407db96d56Sopenharmony_cistatic PyObject *
11417db96d56Sopenharmony_ci_hashlib_hmac_new_impl(PyObject *module, Py_buffer *key, PyObject *msg_obj,
11427db96d56Sopenharmony_ci                       PyObject *digestmod);
11437db96d56Sopenharmony_ci
11447db96d56Sopenharmony_cistatic PyObject *
11457db96d56Sopenharmony_ci_hashlib_hmac_new(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
11467db96d56Sopenharmony_ci{
11477db96d56Sopenharmony_ci    PyObject *return_value = NULL;
11487db96d56Sopenharmony_ci    static const char * const _keywords[] = {"key", "msg", "digestmod", NULL};
11497db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "hmac_new", 0};
11507db96d56Sopenharmony_ci    PyObject *argsbuf[3];
11517db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
11527db96d56Sopenharmony_ci    Py_buffer key = {NULL, NULL};
11537db96d56Sopenharmony_ci    PyObject *msg_obj = NULL;
11547db96d56Sopenharmony_ci    PyObject *digestmod = NULL;
11557db96d56Sopenharmony_ci
11567db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 3, 0, argsbuf);
11577db96d56Sopenharmony_ci    if (!args) {
11587db96d56Sopenharmony_ci        goto exit;
11597db96d56Sopenharmony_ci    }
11607db96d56Sopenharmony_ci    if (PyObject_GetBuffer(args[0], &key, PyBUF_SIMPLE) != 0) {
11617db96d56Sopenharmony_ci        goto exit;
11627db96d56Sopenharmony_ci    }
11637db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&key, 'C')) {
11647db96d56Sopenharmony_ci        _PyArg_BadArgument("hmac_new", "argument 'key'", "contiguous buffer", args[0]);
11657db96d56Sopenharmony_ci        goto exit;
11667db96d56Sopenharmony_ci    }
11677db96d56Sopenharmony_ci    if (!noptargs) {
11687db96d56Sopenharmony_ci        goto skip_optional_pos;
11697db96d56Sopenharmony_ci    }
11707db96d56Sopenharmony_ci    if (args[1]) {
11717db96d56Sopenharmony_ci        msg_obj = args[1];
11727db96d56Sopenharmony_ci        if (!--noptargs) {
11737db96d56Sopenharmony_ci            goto skip_optional_pos;
11747db96d56Sopenharmony_ci        }
11757db96d56Sopenharmony_ci    }
11767db96d56Sopenharmony_ci    digestmod = args[2];
11777db96d56Sopenharmony_ciskip_optional_pos:
11787db96d56Sopenharmony_ci    return_value = _hashlib_hmac_new_impl(module, &key, msg_obj, digestmod);
11797db96d56Sopenharmony_ci
11807db96d56Sopenharmony_ciexit:
11817db96d56Sopenharmony_ci    /* Cleanup for key */
11827db96d56Sopenharmony_ci    if (key.obj) {
11837db96d56Sopenharmony_ci       PyBuffer_Release(&key);
11847db96d56Sopenharmony_ci    }
11857db96d56Sopenharmony_ci
11867db96d56Sopenharmony_ci    return return_value;
11877db96d56Sopenharmony_ci}
11887db96d56Sopenharmony_ci
11897db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_HMAC_copy__doc__,
11907db96d56Sopenharmony_ci"copy($self, /)\n"
11917db96d56Sopenharmony_ci"--\n"
11927db96d56Sopenharmony_ci"\n"
11937db96d56Sopenharmony_ci"Return a copy (\"clone\") of the HMAC object.");
11947db96d56Sopenharmony_ci
11957db96d56Sopenharmony_ci#define _HASHLIB_HMAC_COPY_METHODDEF    \
11967db96d56Sopenharmony_ci    {"copy", (PyCFunction)_hashlib_HMAC_copy, METH_NOARGS, _hashlib_HMAC_copy__doc__},
11977db96d56Sopenharmony_ci
11987db96d56Sopenharmony_cistatic PyObject *
11997db96d56Sopenharmony_ci_hashlib_HMAC_copy_impl(HMACobject *self);
12007db96d56Sopenharmony_ci
12017db96d56Sopenharmony_cistatic PyObject *
12027db96d56Sopenharmony_ci_hashlib_HMAC_copy(HMACobject *self, PyObject *Py_UNUSED(ignored))
12037db96d56Sopenharmony_ci{
12047db96d56Sopenharmony_ci    return _hashlib_HMAC_copy_impl(self);
12057db96d56Sopenharmony_ci}
12067db96d56Sopenharmony_ci
12077db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_HMAC_update__doc__,
12087db96d56Sopenharmony_ci"update($self, /, msg)\n"
12097db96d56Sopenharmony_ci"--\n"
12107db96d56Sopenharmony_ci"\n"
12117db96d56Sopenharmony_ci"Update the HMAC object with msg.");
12127db96d56Sopenharmony_ci
12137db96d56Sopenharmony_ci#define _HASHLIB_HMAC_UPDATE_METHODDEF    \
12147db96d56Sopenharmony_ci    {"update", _PyCFunction_CAST(_hashlib_HMAC_update), METH_FASTCALL|METH_KEYWORDS, _hashlib_HMAC_update__doc__},
12157db96d56Sopenharmony_ci
12167db96d56Sopenharmony_cistatic PyObject *
12177db96d56Sopenharmony_ci_hashlib_HMAC_update_impl(HMACobject *self, PyObject *msg);
12187db96d56Sopenharmony_ci
12197db96d56Sopenharmony_cistatic PyObject *
12207db96d56Sopenharmony_ci_hashlib_HMAC_update(HMACobject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
12217db96d56Sopenharmony_ci{
12227db96d56Sopenharmony_ci    PyObject *return_value = NULL;
12237db96d56Sopenharmony_ci    static const char * const _keywords[] = {"msg", NULL};
12247db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "update", 0};
12257db96d56Sopenharmony_ci    PyObject *argsbuf[1];
12267db96d56Sopenharmony_ci    PyObject *msg;
12277db96d56Sopenharmony_ci
12287db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
12297db96d56Sopenharmony_ci    if (!args) {
12307db96d56Sopenharmony_ci        goto exit;
12317db96d56Sopenharmony_ci    }
12327db96d56Sopenharmony_ci    msg = args[0];
12337db96d56Sopenharmony_ci    return_value = _hashlib_HMAC_update_impl(self, msg);
12347db96d56Sopenharmony_ci
12357db96d56Sopenharmony_ciexit:
12367db96d56Sopenharmony_ci    return return_value;
12377db96d56Sopenharmony_ci}
12387db96d56Sopenharmony_ci
12397db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_HMAC_digest__doc__,
12407db96d56Sopenharmony_ci"digest($self, /)\n"
12417db96d56Sopenharmony_ci"--\n"
12427db96d56Sopenharmony_ci"\n"
12437db96d56Sopenharmony_ci"Return the digest of the bytes passed to the update() method so far.");
12447db96d56Sopenharmony_ci
12457db96d56Sopenharmony_ci#define _HASHLIB_HMAC_DIGEST_METHODDEF    \
12467db96d56Sopenharmony_ci    {"digest", (PyCFunction)_hashlib_HMAC_digest, METH_NOARGS, _hashlib_HMAC_digest__doc__},
12477db96d56Sopenharmony_ci
12487db96d56Sopenharmony_cistatic PyObject *
12497db96d56Sopenharmony_ci_hashlib_HMAC_digest_impl(HMACobject *self);
12507db96d56Sopenharmony_ci
12517db96d56Sopenharmony_cistatic PyObject *
12527db96d56Sopenharmony_ci_hashlib_HMAC_digest(HMACobject *self, PyObject *Py_UNUSED(ignored))
12537db96d56Sopenharmony_ci{
12547db96d56Sopenharmony_ci    return _hashlib_HMAC_digest_impl(self);
12557db96d56Sopenharmony_ci}
12567db96d56Sopenharmony_ci
12577db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_HMAC_hexdigest__doc__,
12587db96d56Sopenharmony_ci"hexdigest($self, /)\n"
12597db96d56Sopenharmony_ci"--\n"
12607db96d56Sopenharmony_ci"\n"
12617db96d56Sopenharmony_ci"Return hexadecimal digest of the bytes passed to the update() method so far.\n"
12627db96d56Sopenharmony_ci"\n"
12637db96d56Sopenharmony_ci"This may be used to exchange the value safely in email or other non-binary\n"
12647db96d56Sopenharmony_ci"environments.");
12657db96d56Sopenharmony_ci
12667db96d56Sopenharmony_ci#define _HASHLIB_HMAC_HEXDIGEST_METHODDEF    \
12677db96d56Sopenharmony_ci    {"hexdigest", (PyCFunction)_hashlib_HMAC_hexdigest, METH_NOARGS, _hashlib_HMAC_hexdigest__doc__},
12687db96d56Sopenharmony_ci
12697db96d56Sopenharmony_cistatic PyObject *
12707db96d56Sopenharmony_ci_hashlib_HMAC_hexdigest_impl(HMACobject *self);
12717db96d56Sopenharmony_ci
12727db96d56Sopenharmony_cistatic PyObject *
12737db96d56Sopenharmony_ci_hashlib_HMAC_hexdigest(HMACobject *self, PyObject *Py_UNUSED(ignored))
12747db96d56Sopenharmony_ci{
12757db96d56Sopenharmony_ci    return _hashlib_HMAC_hexdigest_impl(self);
12767db96d56Sopenharmony_ci}
12777db96d56Sopenharmony_ci
12787db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_get_fips_mode__doc__,
12797db96d56Sopenharmony_ci"get_fips_mode($module, /)\n"
12807db96d56Sopenharmony_ci"--\n"
12817db96d56Sopenharmony_ci"\n"
12827db96d56Sopenharmony_ci"Determine the OpenSSL FIPS mode of operation.\n"
12837db96d56Sopenharmony_ci"\n"
12847db96d56Sopenharmony_ci"For OpenSSL 3.0.0 and newer it returns the state of the default provider\n"
12857db96d56Sopenharmony_ci"in the default OSSL context. It\'s not quite the same as FIPS_mode() but good\n"
12867db96d56Sopenharmony_ci"enough for unittests.\n"
12877db96d56Sopenharmony_ci"\n"
12887db96d56Sopenharmony_ci"Effectively any non-zero return value indicates FIPS mode;\n"
12897db96d56Sopenharmony_ci"values other than 1 may have additional significance.");
12907db96d56Sopenharmony_ci
12917db96d56Sopenharmony_ci#define _HASHLIB_GET_FIPS_MODE_METHODDEF    \
12927db96d56Sopenharmony_ci    {"get_fips_mode", (PyCFunction)_hashlib_get_fips_mode, METH_NOARGS, _hashlib_get_fips_mode__doc__},
12937db96d56Sopenharmony_ci
12947db96d56Sopenharmony_cistatic int
12957db96d56Sopenharmony_ci_hashlib_get_fips_mode_impl(PyObject *module);
12967db96d56Sopenharmony_ci
12977db96d56Sopenharmony_cistatic PyObject *
12987db96d56Sopenharmony_ci_hashlib_get_fips_mode(PyObject *module, PyObject *Py_UNUSED(ignored))
12997db96d56Sopenharmony_ci{
13007db96d56Sopenharmony_ci    PyObject *return_value = NULL;
13017db96d56Sopenharmony_ci    int _return_value;
13027db96d56Sopenharmony_ci
13037db96d56Sopenharmony_ci    _return_value = _hashlib_get_fips_mode_impl(module);
13047db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
13057db96d56Sopenharmony_ci        goto exit;
13067db96d56Sopenharmony_ci    }
13077db96d56Sopenharmony_ci    return_value = PyLong_FromLong((long)_return_value);
13087db96d56Sopenharmony_ci
13097db96d56Sopenharmony_ciexit:
13107db96d56Sopenharmony_ci    return return_value;
13117db96d56Sopenharmony_ci}
13127db96d56Sopenharmony_ci
13137db96d56Sopenharmony_ciPyDoc_STRVAR(_hashlib_compare_digest__doc__,
13147db96d56Sopenharmony_ci"compare_digest($module, a, b, /)\n"
13157db96d56Sopenharmony_ci"--\n"
13167db96d56Sopenharmony_ci"\n"
13177db96d56Sopenharmony_ci"Return \'a == b\'.\n"
13187db96d56Sopenharmony_ci"\n"
13197db96d56Sopenharmony_ci"This function uses an approach designed to prevent\n"
13207db96d56Sopenharmony_ci"timing analysis, making it appropriate for cryptography.\n"
13217db96d56Sopenharmony_ci"\n"
13227db96d56Sopenharmony_ci"a and b must both be of the same type: either str (ASCII only),\n"
13237db96d56Sopenharmony_ci"or any bytes-like object.\n"
13247db96d56Sopenharmony_ci"\n"
13257db96d56Sopenharmony_ci"Note: If a and b are of different lengths, or if an error occurs,\n"
13267db96d56Sopenharmony_ci"a timing attack could theoretically reveal information about the\n"
13277db96d56Sopenharmony_ci"types and lengths of a and b--but not their values.");
13287db96d56Sopenharmony_ci
13297db96d56Sopenharmony_ci#define _HASHLIB_COMPARE_DIGEST_METHODDEF    \
13307db96d56Sopenharmony_ci    {"compare_digest", _PyCFunction_CAST(_hashlib_compare_digest), METH_FASTCALL, _hashlib_compare_digest__doc__},
13317db96d56Sopenharmony_ci
13327db96d56Sopenharmony_cistatic PyObject *
13337db96d56Sopenharmony_ci_hashlib_compare_digest_impl(PyObject *module, PyObject *a, PyObject *b);
13347db96d56Sopenharmony_ci
13357db96d56Sopenharmony_cistatic PyObject *
13367db96d56Sopenharmony_ci_hashlib_compare_digest(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
13377db96d56Sopenharmony_ci{
13387db96d56Sopenharmony_ci    PyObject *return_value = NULL;
13397db96d56Sopenharmony_ci    PyObject *a;
13407db96d56Sopenharmony_ci    PyObject *b;
13417db96d56Sopenharmony_ci
13427db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("compare_digest", nargs, 2, 2)) {
13437db96d56Sopenharmony_ci        goto exit;
13447db96d56Sopenharmony_ci    }
13457db96d56Sopenharmony_ci    a = args[0];
13467db96d56Sopenharmony_ci    b = args[1];
13477db96d56Sopenharmony_ci    return_value = _hashlib_compare_digest_impl(module, a, b);
13487db96d56Sopenharmony_ci
13497db96d56Sopenharmony_ciexit:
13507db96d56Sopenharmony_ci    return return_value;
13517db96d56Sopenharmony_ci}
13527db96d56Sopenharmony_ci
13537db96d56Sopenharmony_ci#ifndef EVPXOF_DIGEST_METHODDEF
13547db96d56Sopenharmony_ci    #define EVPXOF_DIGEST_METHODDEF
13557db96d56Sopenharmony_ci#endif /* !defined(EVPXOF_DIGEST_METHODDEF) */
13567db96d56Sopenharmony_ci
13577db96d56Sopenharmony_ci#ifndef EVPXOF_HEXDIGEST_METHODDEF
13587db96d56Sopenharmony_ci    #define EVPXOF_HEXDIGEST_METHODDEF
13597db96d56Sopenharmony_ci#endif /* !defined(EVPXOF_HEXDIGEST_METHODDEF) */
13607db96d56Sopenharmony_ci
13617db96d56Sopenharmony_ci#ifndef _HASHLIB_OPENSSL_SHA3_224_METHODDEF
13627db96d56Sopenharmony_ci    #define _HASHLIB_OPENSSL_SHA3_224_METHODDEF
13637db96d56Sopenharmony_ci#endif /* !defined(_HASHLIB_OPENSSL_SHA3_224_METHODDEF) */
13647db96d56Sopenharmony_ci
13657db96d56Sopenharmony_ci#ifndef _HASHLIB_OPENSSL_SHA3_256_METHODDEF
13667db96d56Sopenharmony_ci    #define _HASHLIB_OPENSSL_SHA3_256_METHODDEF
13677db96d56Sopenharmony_ci#endif /* !defined(_HASHLIB_OPENSSL_SHA3_256_METHODDEF) */
13687db96d56Sopenharmony_ci
13697db96d56Sopenharmony_ci#ifndef _HASHLIB_OPENSSL_SHA3_384_METHODDEF
13707db96d56Sopenharmony_ci    #define _HASHLIB_OPENSSL_SHA3_384_METHODDEF
13717db96d56Sopenharmony_ci#endif /* !defined(_HASHLIB_OPENSSL_SHA3_384_METHODDEF) */
13727db96d56Sopenharmony_ci
13737db96d56Sopenharmony_ci#ifndef _HASHLIB_OPENSSL_SHA3_512_METHODDEF
13747db96d56Sopenharmony_ci    #define _HASHLIB_OPENSSL_SHA3_512_METHODDEF
13757db96d56Sopenharmony_ci#endif /* !defined(_HASHLIB_OPENSSL_SHA3_512_METHODDEF) */
13767db96d56Sopenharmony_ci
13777db96d56Sopenharmony_ci#ifndef _HASHLIB_OPENSSL_SHAKE_128_METHODDEF
13787db96d56Sopenharmony_ci    #define _HASHLIB_OPENSSL_SHAKE_128_METHODDEF
13797db96d56Sopenharmony_ci#endif /* !defined(_HASHLIB_OPENSSL_SHAKE_128_METHODDEF) */
13807db96d56Sopenharmony_ci
13817db96d56Sopenharmony_ci#ifndef _HASHLIB_OPENSSL_SHAKE_256_METHODDEF
13827db96d56Sopenharmony_ci    #define _HASHLIB_OPENSSL_SHAKE_256_METHODDEF
13837db96d56Sopenharmony_ci#endif /* !defined(_HASHLIB_OPENSSL_SHAKE_256_METHODDEF) */
13847db96d56Sopenharmony_ci
13857db96d56Sopenharmony_ci#ifndef _HASHLIB_SCRYPT_METHODDEF
13867db96d56Sopenharmony_ci    #define _HASHLIB_SCRYPT_METHODDEF
13877db96d56Sopenharmony_ci#endif /* !defined(_HASHLIB_SCRYPT_METHODDEF) */
13887db96d56Sopenharmony_ci/*[clinic end generated code: output=69f2374071bff707 input=a9049054013a1b77]*/
1389