diff options
author | Ezio Melotti <ezio.melotti@gmail.com> | 2011-03-16 11:38:59 +0200 |
---|---|---|
committer | Ezio Melotti <ezio.melotti@gmail.com> | 2011-03-16 11:38:59 +0200 |
commit | 824ead71ff37bbf9ba57674f2bf6cc4cf9f92a70 (patch) | |
tree | 1dd1a1f8864bb4ea4da86e403e0a0c3a4b74c14d /Modules/_cryptmodule.c | |
parent | a8fef3700df5400004ac88fa20c8bb4ff6f44ca3 (diff) | |
parent | fd20eca68b680d81b45ec4ce421d1d942dd29c1b (diff) | |
download | cpython-824ead71ff37bbf9ba57674f2bf6cc4cf9f92a70.tar.gz |
#11565: Merge with 3.2.
Diffstat (limited to 'Modules/_cryptmodule.c')
-rw-r--r-- | Modules/_cryptmodule.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/Modules/_cryptmodule.c b/Modules/_cryptmodule.c new file mode 100644 index 0000000000..51007889bf --- /dev/null +++ b/Modules/_cryptmodule.c @@ -0,0 +1,62 @@ +/* cryptmodule.c - by Steve Majewski + */ + +#include "Python.h" + +#include <sys/types.h> + +#ifdef __VMS +#include <openssl/des.h> +#endif + +/* Module crypt */ + + +static PyObject *crypt_crypt(PyObject *self, PyObject *args) +{ + char *word, *salt; +#ifndef __VMS + extern char * crypt(const char *, const char *); +#endif + + if (!PyArg_ParseTuple(args, "ss:crypt", &word, &salt)) { + return NULL; + } + /* On some platforms (AtheOS) crypt returns NULL for an invalid + salt. Return None in that case. XXX Maybe raise an exception? */ + return Py_BuildValue("s", crypt(word, salt)); + +} + +PyDoc_STRVAR(crypt_crypt__doc__, +"crypt(word, salt) -> string\n\ +word will usually be a user's password. salt is a 2-character string\n\ +which will be used to select one of 4096 variations of DES. The characters\n\ +in salt must be either \".\", \"/\", or an alphanumeric character. Returns\n\ +the hashed password as a string, which will be composed of characters from\n\ +the same alphabet as the salt."); + + +static PyMethodDef crypt_methods[] = { + {"crypt", crypt_crypt, METH_VARARGS, crypt_crypt__doc__}, + {NULL, NULL} /* sentinel */ +}; + + +static struct PyModuleDef cryptmodule = { + PyModuleDef_HEAD_INIT, + "_crypt", + NULL, + -1, + crypt_methods, + NULL, + NULL, + NULL, + NULL +}; + +PyMODINIT_FUNC +PyInit__crypt(void) +{ + return PyModule_Create(&cryptmodule); +} |