Branch data Line data Source code
1 : : /*[clinic input] 2 : : preserve 3 : : [clinic start generated code]*/ 4 : : 5 : : PyDoc_STRVAR(crypt_crypt__doc__, 6 : : "crypt($module, word, salt, /)\n" 7 : : "--\n" 8 : : "\n" 9 : : "Hash a *word* with the given *salt* and return the hashed password.\n" 10 : : "\n" 11 : : "*word* will usually be a user\'s password. *salt* (either a random 2 or 16\n" 12 : : "character string, possibly prefixed with $digit$ to indicate the method)\n" 13 : : "will be used to perturb the encryption algorithm and produce distinct\n" 14 : : "results for a given *word*."); 15 : : 16 : : #define CRYPT_CRYPT_METHODDEF \ 17 : : {"crypt", _PyCFunction_CAST(crypt_crypt), METH_FASTCALL, crypt_crypt__doc__}, 18 : : 19 : : static PyObject * 20 : : crypt_crypt_impl(PyObject *module, const char *word, const char *salt); 21 : : 22 : : static PyObject * 23 : 50 : crypt_crypt(PyObject *module, PyObject *const *args, Py_ssize_t nargs) 24 : : { 25 : 50 : PyObject *return_value = NULL; 26 : : const char *word; 27 : : const char *salt; 28 : : 29 [ + - - + : 50 : if (!_PyArg_CheckPositional("crypt", nargs, 2, 2)) { - - ] 30 : 0 : goto exit; 31 : : } 32 [ - + ]: 50 : if (!PyUnicode_Check(args[0])) { 33 : 0 : _PyArg_BadArgument("crypt", "argument 1", "str", args[0]); 34 : 0 : goto exit; 35 : : } 36 : : Py_ssize_t word_length; 37 : 50 : word = PyUnicode_AsUTF8AndSize(args[0], &word_length); 38 [ - + ]: 50 : if (word == NULL) { 39 : 0 : goto exit; 40 : : } 41 [ - + ]: 50 : if (strlen(word) != (size_t)word_length) { 42 : 0 : PyErr_SetString(PyExc_ValueError, "embedded null character"); 43 : 0 : goto exit; 44 : : } 45 [ - + ]: 50 : if (!PyUnicode_Check(args[1])) { 46 : 0 : _PyArg_BadArgument("crypt", "argument 2", "str", args[1]); 47 : 0 : goto exit; 48 : : } 49 : : Py_ssize_t salt_length; 50 : 50 : salt = PyUnicode_AsUTF8AndSize(args[1], &salt_length); 51 [ - + ]: 50 : if (salt == NULL) { 52 : 0 : goto exit; 53 : : } 54 [ - + ]: 50 : if (strlen(salt) != (size_t)salt_length) { 55 : 0 : PyErr_SetString(PyExc_ValueError, "embedded null character"); 56 : 0 : goto exit; 57 : : } 58 : 50 : return_value = crypt_crypt_impl(module, word, salt); 59 : : 60 : 50 : exit: 61 : 50 : return return_value; 62 : : } 63 : : /*[clinic end generated code: output=6f61ab29e361f9d0 input=a9049054013a1b77]*/