| 
									
										
										
										
											1994-05-06 14:25:39 +00:00
										 |  |  | /* cryptmodule.c - by Steve Majewski
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-09 23:14:26 +00:00
										 |  |  | #include "Python.h"
 | 
					
						
							| 
									
										
										
										
											1994-05-06 14:25:39 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <sys/types.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Module crypt */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-14 21:00:27 +01:00
										 |  |  | /*[clinic input]
 | 
					
						
							|  |  |  | module crypt | 
					
						
							|  |  |  | [clinic start generated code]*/ | 
					
						
							| 
									
										
										
										
											2014-01-28 05:00:08 -08:00
										 |  |  | /*[clinic end generated code: output=da39a3ee5e6b4b0d input=c6252cf4f2f2ae81]*/ | 
					
						
							| 
									
										
										
										
											1994-05-06 14:25:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-03 23:53:51 +03:00
										 |  |  | #include "clinic/_cryptmodule.c.h"
 | 
					
						
							| 
									
										
										
										
											2014-01-14 21:00:27 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*[clinic input]
 | 
					
						
							|  |  |  | crypt.crypt | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-30 11:09:35 +03:00
										 |  |  |     word: str | 
					
						
							|  |  |  |     salt: str | 
					
						
							| 
									
										
										
										
											2014-01-14 21:00:27 +01:00
										 |  |  |     / | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 * | 
					
						
							| 
									
										
										
										
											2016-07-07 17:35:15 +03:00
										 |  |  | crypt_crypt_impl(PyObject *module, const char *word, const char *salt) | 
					
						
							|  |  |  | /*[clinic end generated code: output=0512284a03d2803c input=0e8edec9c364352b]*/ | 
					
						
							| 
									
										
										
										
											2014-01-14 21:00:27 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     /* 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)); | 
					
						
							| 
									
										
										
										
											1994-05-06 14:25:39 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-01 20:12:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-09 23:14:26 +00:00
										 |  |  | static PyMethodDef crypt_methods[] = { | 
					
						
							| 
									
										
										
										
											2014-01-14 21:00:27 +01:00
										 |  |  |     CRYPT_CRYPT_METHODDEF | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {NULL,              NULL}           /* sentinel */ | 
					
						
							| 
									
										
										
										
											1994-05-06 14:25:39 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-11 05:26:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | static struct PyModuleDef cryptmodule = { | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     PyModuleDef_HEAD_INIT, | 
					
						
							| 
									
										
										
										
											2011-02-22 10:55:44 +00:00
										 |  |  |     "_crypt", | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     NULL, | 
					
						
							|  |  |  |     -1, | 
					
						
							|  |  |  |     crypt_methods, | 
					
						
							|  |  |  |     NULL, | 
					
						
							|  |  |  |     NULL, | 
					
						
							|  |  |  |     NULL, | 
					
						
							|  |  |  |     NULL | 
					
						
							| 
									
										
										
										
											2008-06-11 05:26:20 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-08-02 02:27:13 +00:00
										 |  |  | PyMODINIT_FUNC | 
					
						
							| 
									
										
										
										
											2011-02-22 10:55:44 +00:00
										 |  |  | PyInit__crypt(void) | 
					
						
							| 
									
										
										
										
											1994-05-06 14:25:39 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     return PyModule_Create(&cryptmodule); | 
					
						
							| 
									
										
										
										
											1994-05-06 14:25:39 +00:00
										 |  |  | } |