Viewing file: _cryptmodule.c (1.66 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* cryptmodule.c - by Steve Majewski */
#include "Python.h"
#include <sys/types.h> #ifdef HAVE_CRYPT_H #include <crypt.h> #endif
/* Module crypt */
/*[clinic input] module crypt [clinic start generated code]*/ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=c6252cf4f2f2ae81]*/
#include "clinic/_cryptmodule.c.h"
/*[clinic input] crypt.crypt
word: str salt: str /
Hash a *word* with the given *salt* and return the hashed password.
*word* will usually be a user's password. *salt* (either a random 2 or 16 character string, possibly prefixed with $digit$ to indicate the method) will be used to perturb the encryption algorithm and produce distinct results for a given *word*.
[clinic start generated code]*/
static PyObject * crypt_crypt_impl(PyObject *module, const char *word, const char *salt) /*[clinic end generated code: output=0512284a03d2803c input=0e8edec9c364352b]*/ { char *crypt_result; #ifdef HAVE_CRYPT_R struct crypt_data data; memset(&data, 0, sizeof(data)); crypt_result = crypt_r(word, salt, &data); #else crypt_result = crypt(word, salt); #endif if (crypt_result == NULL) { return PyErr_SetFromErrno(PyExc_OSError); } return Py_BuildValue("s", crypt_result); }
static PyMethodDef crypt_methods[] = { CRYPT_CRYPT_METHODDEF {NULL, NULL} /* sentinel */ };
static PyModuleDef_Slot _crypt_slots[] = { {0, NULL} };
static struct PyModuleDef cryptmodule = { PyModuleDef_HEAD_INIT, "_crypt", NULL, 0, crypt_methods, _crypt_slots, NULL, NULL, NULL };
PyMODINIT_FUNC PyInit__crypt(void) { return PyModuleDef_Init(&cryptmodule); }
|