1 /*[clinic input] 2 preserve 3 [clinic start generated code]*/ 4 5 #if (OPENSSL_VERSION_NUMBER > 0x10100000L && !defined(OPENSSL_NO_SCRYPT) && !defined(LIBRESSL_VERSION_NUMBER)) 6 7 PyDoc_STRVAR(_hashlib_scrypt__doc__, 8 "scrypt($module, /, password, *, salt=None, n=None, r=None, p=None,\n" 9 " maxmem=0, dklen=64)\n" 10 "--\n" 11 "\n" 12 "scrypt password-based key derivation function."); 13 14 #define _HASHLIB_SCRYPT_METHODDEF \ 15 {"scrypt", (PyCFunction)_hashlib_scrypt, METH_FASTCALL|METH_KEYWORDS, _hashlib_scrypt__doc__}, 16 17 static PyObject * 18 _hashlib_scrypt_impl(PyObject *module, Py_buffer *password, Py_buffer *salt, 19 PyObject *n_obj, PyObject *r_obj, PyObject *p_obj, 20 long maxmem, long dklen); 21 22 static PyObject * 23 _hashlib_scrypt(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 24 { 25 PyObject *return_value = NULL; 26 static const char * const _keywords[] = {"password", "salt", "n", "r", "p", "maxmem", "dklen", NULL}; 27 static _PyArg_Parser _parser = {"y*|$y*O!O!O!ll:scrypt", _keywords, 0}; 28 Py_buffer password = {NULL, NULL}; 29 Py_buffer salt = {NULL, NULL}; 30 PyObject *n_obj = Py_None; 31 PyObject *r_obj = Py_None; 32 PyObject *p_obj = Py_None; 33 long maxmem = 0; 34 long dklen = 64; 35 36 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser, 37 &password, &salt, &PyLong_Type, &n_obj, &PyLong_Type, &r_obj, &PyLong_Type, &p_obj, &maxmem, &dklen)) { 38 goto exit; 39 } 40 return_value = _hashlib_scrypt_impl(module, &password, &salt, n_obj, r_obj, p_obj, maxmem, dklen); 41 42 exit: 43 /* Cleanup for password */ 44 if (password.obj) { 45 PyBuffer_Release(&password); 46 } 47 /* Cleanup for salt */ 48 if (salt.obj) { 49 PyBuffer_Release(&salt); 50 } 51 52 return return_value; 53 } 54 55 #endif /* (OPENSSL_VERSION_NUMBER > 0x10100000L && !defined(OPENSSL_NO_SCRYPT) && !defined(LIBRESSL_VERSION_NUMBER)) */ 56 57 PyDoc_STRVAR(_hashlib_hmac_digest__doc__, 58 "hmac_digest($module, /, key, msg, digest)\n" 59 "--\n" 60 "\n" 61 "Single-shot HMAC."); 62 63 #define _HASHLIB_HMAC_DIGEST_METHODDEF \ 64 {"hmac_digest", (PyCFunction)_hashlib_hmac_digest, METH_FASTCALL|METH_KEYWORDS, _hashlib_hmac_digest__doc__}, 65 66 static PyObject * 67 _hashlib_hmac_digest_impl(PyObject *module, Py_buffer *key, Py_buffer *msg, 68 const char *digest); 69 70 static PyObject * 71 _hashlib_hmac_digest(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 72 { 73 PyObject *return_value = NULL; 74 static const char * const _keywords[] = {"key", "msg", "digest", NULL}; 75 static _PyArg_Parser _parser = {"y*y*s:hmac_digest", _keywords, 0}; 76 Py_buffer key = {NULL, NULL}; 77 Py_buffer msg = {NULL, NULL}; 78 const char *digest; 79 80 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser, 81 &key, &msg, &digest)) { 82 goto exit; 83 } 84 return_value = _hashlib_hmac_digest_impl(module, &key, &msg, digest); 85 86 exit: 87 /* Cleanup for key */ 88 if (key.obj) { 89 PyBuffer_Release(&key); 90 } 91 /* Cleanup for msg */ 92 if (msg.obj) { 93 PyBuffer_Release(&msg); 94 } 95 96 return return_value; 97 } 98 99 #ifndef _HASHLIB_SCRYPT_METHODDEF 100 #define _HASHLIB_SCRYPT_METHODDEF 101 #endif /* !defined(_HASHLIB_SCRYPT_METHODDEF) */ 102 /*[clinic end generated code: output=b129f1a6ec7b8503 input=a9049054013a1b77]*/ 103