2424#include "hashlib.h"
2525#include "pycore_strhex.h" // _Py_strhex()
2626
27+ /*[clinic input]
28+ module _md5
29+ class MD5Type "MD5object *" "&PyType_Type"
30+ [clinic start generated code]*/
31+ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=6e5261719957a912]*/
32+
2733/* The MD5 block size and message digest sizes, in bytes */
2834
2935#define MD5_BLOCKSIZE 64
3036#define MD5_DIGESTSIZE 16
3137
3238#include "_hacl/Hacl_Hash_MD5.h"
3339
40+
3441typedef struct {
3542 PyObject_HEAD
3643 HASHLIB_LOCK_HEAD
37- Hacl_Hash_MD5_state_t * state ;
44+ Hacl_Hash_MD5_state_t * hash_state ;
3845} MD5object ;
3946
4047#define _MD5object_CAST (op ) ((MD5object *)(op))
4148
49+ #include "clinic/md5module.c.h"
50+
51+
4252typedef struct {
43- PyTypeObject * md5_type ;
44- } md5module_state ;
53+ PyTypeObject * md5_type ;
54+ } MD5State ;
4555
46- static inline md5module_state *
47- get_md5module_state (PyObject * module )
56+ static inline MD5State *
57+ md5_get_state (PyObject * module )
4858{
4959 void * state = PyModule_GetState (module );
5060 assert (state != NULL );
51- return (md5module_state * )state ;
61+ return (MD5State * )state ;
5262}
5363
54- /*[clinic input]
55- module _md5
56- class MD5Type "MD5object *" "&PyType_Type"
57- [clinic start generated code]*/
58- /*[clinic end generated code: output=da39a3ee5e6b4b0d input=6e5261719957a912]*/
59-
60- #include "clinic/md5module.c.h"
61-
6264static MD5object *
63- newMD5object (md5module_state * st )
65+ newMD5object (MD5State * st )
6466{
65- MD5object * self = PyObject_GC_New (MD5object , st -> md5_type );
66- if (self == NULL ) {
67+ MD5object * md5 = PyObject_GC_New (MD5object , st -> md5_type );
68+ if (! md5 ) {
6769 return NULL ;
6870 }
69- HASHLIB_INIT_MUTEX (self );
70- PyObject_GC_Track (self );
71- return self ;
71+ HASHLIB_INIT_MUTEX (md5 );
72+
73+ PyObject_GC_Track (md5 );
74+ return md5 ;
7275}
7376
7477/* Internal methods for a hash object */
7578static int
76- MD5_traverse (PyObject * op , visitproc visit , void * arg )
79+ MD5_traverse (PyObject * ptr , visitproc visit , void * arg )
7780{
78- Py_VISIT (Py_TYPE (op ));
81+ Py_VISIT (Py_TYPE (ptr ));
7982 return 0 ;
8083}
8184
8285static void
8386MD5_dealloc (PyObject * op )
8487{
85- MD5object * self = _MD5object_CAST (op );
86- Hacl_Hash_MD5_free (self -> state );
88+ MD5object * ptr = _MD5object_CAST (op );
89+ Hacl_Hash_MD5_free (ptr -> hash_state );
8790 PyTypeObject * tp = Py_TYPE (op );
88- PyObject_GC_UnTrack (self );
89- PyObject_GC_Del (self );
91+ PyObject_GC_UnTrack (ptr );
92+ PyObject_GC_Del (ptr );
9093 Py_DECREF (tp );
9194}
9295
96+
9397/* External methods for a hash object */
9498
9599/*[clinic input]
@@ -104,28 +108,28 @@ static PyObject *
104108MD5Type_copy_impl (MD5object * self , PyTypeObject * cls )
105109/*[clinic end generated code: output=bf055e08244bf5ee input=d89087dcfb2a8620]*/
106110{
107- md5module_state * st = PyType_GetModuleState (cls );
111+ MD5State * st = PyType_GetModuleState (cls );
108112
109- MD5object * copy = newMD5object ( st ) ;
110- if (copy == NULL ) {
113+ MD5object * newobj ;
114+ if (( newobj = newMD5object ( st )) == NULL ) {
111115 return NULL ;
112116 }
113117
114118 ENTER_HASHLIB (self );
115- copy -> state = Hacl_Hash_MD5_copy (self -> state );
119+ newobj -> hash_state = Hacl_Hash_MD5_copy (self -> hash_state );
116120 LEAVE_HASHLIB (self );
117- if (copy -> state == NULL ) {
118- Py_DECREF (copy );
121+ if (newobj -> hash_state == NULL ) {
122+ Py_DECREF (self );
119123 return PyErr_NoMemory ();
120124 }
121- return (PyObject * )copy ;
125+ return (PyObject * )newobj ;
122126}
123127
124128static void
125129md5_digest_compute_cond_lock (MD5object * self , uint8_t * digest )
126130{
127131 ENTER_HASHLIB (self );
128- Hacl_Hash_MD5_digest (self -> state , digest );
132+ Hacl_Hash_MD5_digest (self -> hash_state , digest );
129133 LEAVE_HASHLIB (self );
130134}
131135
@@ -183,7 +187,7 @@ md5_update_state_with_lock(MD5object *self, uint8_t *buf, Py_ssize_t len)
183187{
184188 Py_BEGIN_ALLOW_THREADS
185189 PyMutex_Lock (& self -> mutex ); // unconditionally acquire a lock
186- _hacl_md5_update (self -> state , buf , len );
190+ _hacl_md5_update (self -> hash_state , buf , len );
187191 PyMutex_Unlock (& self -> mutex );
188192 Py_END_ALLOW_THREADS
189193}
@@ -192,7 +196,7 @@ static void
192196md5_update_state_cond_lock (MD5object * self , uint8_t * buf , Py_ssize_t len )
193197{
194198 ENTER_HASHLIB (self ); // conditionally acquire a lock
195- _hacl_md5_update (self -> state , buf , len );
199+ _hacl_md5_update (self -> hash_state , buf , len );
196200 LEAVE_HASHLIB (self );
197201}
198202
@@ -240,7 +244,7 @@ static PyMethodDef MD5_methods[] = {
240244 MD5TYPE_DIGEST_METHODDEF
241245 MD5TYPE_HEXDIGEST_METHODDEF
242246 MD5TYPE_UPDATE_METHODDEF
243- {NULL , NULL } /* sentinel */
247+ {NULL , NULL } /* sentinel */
244248};
245249
246250static PyObject *
@@ -265,20 +269,20 @@ static PyGetSetDef MD5_getseters[] = {
265269 {"block_size" , MD5_get_block_size , NULL , NULL , NULL },
266270 {"name" , MD5_get_name , NULL , NULL , NULL },
267271 {"digest_size" , md5_get_digest_size , NULL , NULL , NULL },
268- {NULL } /* sentinel */
272+ {NULL } /* Sentinel */
269273};
270274
271275static PyType_Slot md5_type_slots [] = {
272276 {Py_tp_dealloc , MD5_dealloc },
273277 {Py_tp_methods , MD5_methods },
274278 {Py_tp_getset , MD5_getseters },
275279 {Py_tp_traverse , MD5_traverse },
276- {0 , 0 }
280+ {0 ,0 }
277281};
278282
279283static PyType_Spec md5_type_spec = {
280284 .name = "_md5.md5" ,
281- .basicsize = sizeof (MD5object ),
285+ .basicsize = sizeof (MD5object ),
282286 .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION |
283287 Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_HAVE_GC ),
284288 .slots = md5_type_slots
@@ -307,15 +311,15 @@ _md5_md5_impl(PyObject *module, PyObject *data, int usedforsecurity,
307311 return NULL ;
308312 }
309313
310- md5module_state * st = get_md5module_state ( module ) ;
311- MD5object * self = newMD5object ( st );
312- if (self == NULL ) {
314+ MD5object * new ;
315+ MD5State * st = md5_get_state ( module );
316+ if (( new = newMD5object ( st )) == NULL ) {
313317 return NULL ;
314318 }
315319
316- self -> state = Hacl_Hash_MD5_malloc ();
317- if (self -> state == NULL ) {
318- Py_DECREF (self );
320+ new -> hash_state = Hacl_Hash_MD5_malloc ();
321+ if (new -> hash_state == NULL ) {
322+ Py_DECREF (new );
319323 return PyErr_NoMemory ();
320324 }
321325
@@ -326,19 +330,19 @@ _md5_md5_impl(PyObject *module, PyObject *data, int usedforsecurity,
326330 /* Do not use self->mutex here as this is the constructor
327331 * where it is not yet possible to have concurrent access. */
328332 Py_BEGIN_ALLOW_THREADS
329- _hacl_md5_update (self -> state , buf .buf , buf .len );
333+ _hacl_md5_update (new -> hash_state , buf .buf , buf .len );
330334 Py_END_ALLOW_THREADS
331335 }
332336 else {
333- _hacl_md5_update (self -> state , buf .buf , buf .len );
337+ _hacl_md5_update (new -> hash_state , buf .buf , buf .len );
334338 }
335339 PyBuffer_Release (& buf );
336340 }
337341
338- return (PyObject * )self ;
342+ return (PyObject * )new ;
339343
340344error :
341- Py_XDECREF (self );
345+ Py_XDECREF (new );
342346 return NULL ;
343347}
344348
@@ -347,21 +351,21 @@ _md5_md5_impl(PyObject *module, PyObject *data, int usedforsecurity,
347351
348352static struct PyMethodDef MD5_functions [] = {
349353 _MD5_MD5_METHODDEF
350- {NULL , NULL } /* sentinel */
354+ {NULL , NULL } /* Sentinel */
351355};
352356
353357static int
354358_md5_traverse (PyObject * module , visitproc visit , void * arg )
355359{
356- md5module_state * state = get_md5module_state (module );
360+ MD5State * state = md5_get_state (module );
357361 Py_VISIT (state -> md5_type );
358362 return 0 ;
359363}
360364
361365static int
362366_md5_clear (PyObject * module )
363367{
364- md5module_state * state = get_md5module_state (module );
368+ MD5State * state = md5_get_state (module );
365369 Py_CLEAR (state -> md5_type );
366370 return 0 ;
367371}
@@ -376,7 +380,7 @@ _md5_free(void *module)
376380static int
377381md5_exec (PyObject * m )
378382{
379- md5module_state * st = get_md5module_state (m );
383+ MD5State * st = md5_get_state (m );
380384
381385 st -> md5_type = (PyTypeObject * )PyType_FromModuleAndSpec (
382386 m , & md5_type_spec , NULL );
@@ -402,7 +406,7 @@ static PyModuleDef_Slot _md5_slots[] = {
402406static struct PyModuleDef _md5module = {
403407 PyModuleDef_HEAD_INIT ,
404408 .m_name = "_md5" ,
405- .m_size = sizeof (md5module_state ),
409+ .m_size = sizeof (MD5State ),
406410 .m_methods = MD5_functions ,
407411 .m_slots = _md5_slots ,
408412 .m_traverse = _md5_traverse ,
0 commit comments