Skip to content

Commit 5cd828a

Browse files
committed
finalizing touches
1 parent 15a4f2f commit 5cd828a

1 file changed

Lines changed: 55 additions & 59 deletions

File tree

Modules/md5module.c

Lines changed: 55 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -24,75 +24,71 @@
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-
3327
/* The MD5 block size and message digest sizes, in bytes */
3428

3529
#define MD5_BLOCKSIZE 64
3630
#define MD5_DIGESTSIZE 16
3731

3832
#include "_hacl/Hacl_Hash_MD5.h"
3933

40-
4134
typedef struct {
4235
HASHLIB_OBJECT_HEAD
43-
Hacl_Hash_MD5_state_t *hash_state;
36+
Hacl_Hash_MD5_state_t *state;
4437
} MD5object;
4538

4639
#define _MD5object_CAST(op) ((MD5object *)(op))
4740

48-
#include "clinic/md5module.c.h"
49-
50-
5141
typedef struct {
52-
PyTypeObject* md5_type;
53-
} MD5State;
42+
PyTypeObject *md5_type;
43+
} md5module_state;
5444

55-
static inline MD5State*
56-
md5_get_state(PyObject *module)
45+
static inline md5module_state *
46+
get_md5module_state(PyObject *module)
5747
{
5848
void *state = PyModule_GetState(module);
5949
assert(state != NULL);
60-
return (MD5State *)state;
50+
return (md5module_state *)state;
6151
}
6252

53+
/*[clinic input]
54+
module _md5
55+
class MD5Type "MD5object *" "&PyType_Type"
56+
[clinic start generated code]*/
57+
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=6e5261719957a912]*/
58+
59+
#include "clinic/md5module.c.h"
60+
6361
static MD5object *
64-
newMD5object(MD5State * st)
62+
newMD5object(md5module_state *st)
6563
{
66-
MD5object *md5 = PyObject_GC_New(MD5object, st->md5_type);
67-
if (!md5) {
64+
MD5object *self = PyObject_GC_New(MD5object, st->md5_type);
65+
if (self == NULL) {
6866
return NULL;
6967
}
70-
HASHLIB_INIT_MUTEX(md5);
71-
72-
PyObject_GC_Track(md5);
73-
return md5;
68+
HASHLIB_INIT_MUTEX(self);
69+
PyObject_GC_Track(self);
70+
return self;
7471
}
7572

7673
/* Internal methods for a hash object */
7774
static int
78-
MD5_traverse(PyObject *ptr, visitproc visit, void *arg)
75+
MD5_traverse(PyObject *op, visitproc visit, void *arg)
7976
{
80-
Py_VISIT(Py_TYPE(ptr));
77+
Py_VISIT(Py_TYPE(op));
8178
return 0;
8279
}
8380

8481
static void
8582
MD5_dealloc(PyObject *op)
8683
{
87-
MD5object *ptr = _MD5object_CAST(op);
88-
Hacl_Hash_MD5_free(ptr->hash_state);
84+
MD5object *self = _MD5object_CAST(op);
85+
Hacl_Hash_MD5_free(self->state);
8986
PyTypeObject *tp = Py_TYPE(op);
90-
PyObject_GC_UnTrack(ptr);
91-
PyObject_GC_Del(ptr);
87+
PyObject_GC_UnTrack(self);
88+
PyObject_GC_Del(self);
9289
Py_DECREF(tp);
9390
}
9491

95-
9692
/* External methods for a hash object */
9793

9894
/*[clinic input]
@@ -107,28 +103,28 @@ static PyObject *
107103
MD5Type_copy_impl(MD5object *self, PyTypeObject *cls)
108104
/*[clinic end generated code: output=bf055e08244bf5ee input=d89087dcfb2a8620]*/
109105
{
110-
MD5State *st = PyType_GetModuleState(cls);
106+
md5module_state *st = PyType_GetModuleState(cls);
111107

112-
MD5object *newobj;
113-
if ((newobj = newMD5object(st)) == NULL) {
108+
MD5object *copy = newMD5object(st);
109+
if (copy == NULL) {
114110
return NULL;
115111
}
116112

117113
ENTER_HASHLIB(self);
118-
newobj->hash_state = Hacl_Hash_MD5_copy(self->hash_state);
114+
copy->state = Hacl_Hash_MD5_copy(self->state);
119115
LEAVE_HASHLIB(self);
120-
if (newobj->hash_state == NULL) {
121-
Py_DECREF(self);
116+
if (copy->state == NULL) {
117+
Py_DECREF(copy);
122118
return PyErr_NoMemory();
123119
}
124-
return (PyObject *)newobj;
120+
return (PyObject *)copy;
125121
}
126122

127123
static void
128124
md5_digest_compute_cond_lock(MD5object *self, uint8_t *digest)
129125
{
130126
ENTER_HASHLIB(self);
131-
Hacl_Hash_MD5_digest(self->hash_state, digest);
127+
Hacl_Hash_MD5_digest(self->state, digest);
132128
LEAVE_HASHLIB(self);
133129
}
134130

@@ -186,7 +182,7 @@ md5_update_state_with_lock(MD5object *self, uint8_t *buf, Py_ssize_t len)
186182
{
187183
Py_BEGIN_ALLOW_THREADS
188184
PyMutex_Lock(&self->mutex); // unconditionally acquire a lock
189-
_hacl_md5_update(self->hash_state, buf, len);
185+
_hacl_md5_update(self->state, buf, len);
190186
PyMutex_Unlock(&self->mutex);
191187
Py_END_ALLOW_THREADS
192188
}
@@ -195,7 +191,7 @@ static void
195191
md5_update_state_cond_lock(MD5object *self, uint8_t *buf, Py_ssize_t len)
196192
{
197193
ENTER_HASHLIB(self); // conditionally acquire a lock
198-
_hacl_md5_update(self->hash_state, buf, len);
194+
_hacl_md5_update(self->state, buf, len);
199195
LEAVE_HASHLIB(self);
200196
}
201197

@@ -237,7 +233,7 @@ static PyMethodDef MD5_methods[] = {
237233
MD5TYPE_DIGEST_METHODDEF
238234
MD5TYPE_HEXDIGEST_METHODDEF
239235
MD5TYPE_UPDATE_METHODDEF
240-
{NULL, NULL} /* sentinel */
236+
{NULL, NULL} /* sentinel */
241237
};
242238

243239
static PyObject *
@@ -262,20 +258,20 @@ static PyGetSetDef MD5_getseters[] = {
262258
{"block_size", MD5_get_block_size, NULL, NULL, NULL},
263259
{"name", MD5_get_name, NULL, NULL, NULL},
264260
{"digest_size", md5_get_digest_size, NULL, NULL, NULL},
265-
{NULL} /* Sentinel */
261+
{NULL} /* sentinel */
266262
};
267263

268264
static PyType_Slot md5_type_slots[] = {
269265
{Py_tp_dealloc, MD5_dealloc},
270266
{Py_tp_methods, MD5_methods},
271267
{Py_tp_getset, MD5_getseters},
272268
{Py_tp_traverse, MD5_traverse},
273-
{0,0}
269+
{0, 0}
274270
};
275271

276272
static PyType_Spec md5_type_spec = {
277273
.name = "_md5.md5",
278-
.basicsize = sizeof(MD5object),
274+
.basicsize = sizeof(MD5object),
279275
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION |
280276
Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_HAVE_GC),
281277
.slots = md5_type_slots
@@ -304,15 +300,15 @@ _md5_md5_impl(PyObject *module, PyObject *data, int usedforsecurity,
304300
return NULL;
305301
}
306302

307-
MD5object *new;
308-
MD5State *st = md5_get_state(module);
309-
if ((new = newMD5object(st)) == NULL) {
303+
md5module_state *st = get_md5module_state(module);
304+
MD5object *self = newMD5object(st);
305+
if (self == NULL) {
310306
return NULL;
311307
}
312308

313-
new->hash_state = Hacl_Hash_MD5_malloc();
314-
if (new->hash_state == NULL) {
315-
Py_DECREF(new);
309+
self->state = Hacl_Hash_MD5_malloc();
310+
if (self->state == NULL) {
311+
Py_DECREF(self);
316312
return PyErr_NoMemory();
317313
}
318314

@@ -323,19 +319,19 @@ _md5_md5_impl(PyObject *module, PyObject *data, int usedforsecurity,
323319
/* We do not initialize self->lock here as this is the constructor
324320
* where it is not yet possible to have concurrent access. */
325321
Py_BEGIN_ALLOW_THREADS
326-
_hacl_md5_update(new->hash_state, buf.buf, buf.len);
322+
_hacl_md5_update(self->state, buf.buf, buf.len);
327323
Py_END_ALLOW_THREADS
328324
}
329325
else {
330-
_hacl_md5_update(new->hash_state, buf.buf, buf.len);
326+
_hacl_md5_update(self->state, buf.buf, buf.len);
331327
}
332328
PyBuffer_Release(&buf);
333329
}
334330

335-
return (PyObject *)new;
331+
return (PyObject *)self;
336332

337333
error:
338-
Py_XDECREF(new);
334+
Py_XDECREF(self);
339335
return NULL;
340336
}
341337

@@ -344,21 +340,21 @@ _md5_md5_impl(PyObject *module, PyObject *data, int usedforsecurity,
344340

345341
static struct PyMethodDef MD5_functions[] = {
346342
_MD5_MD5_METHODDEF
347-
{NULL, NULL} /* Sentinel */
343+
{NULL, NULL} /* sentinel */
348344
};
349345

350346
static int
351347
_md5_traverse(PyObject *module, visitproc visit, void *arg)
352348
{
353-
MD5State *state = md5_get_state(module);
349+
md5module_state *state = get_md5module_state(module);
354350
Py_VISIT(state->md5_type);
355351
return 0;
356352
}
357353

358354
static int
359355
_md5_clear(PyObject *module)
360356
{
361-
MD5State *state = md5_get_state(module);
357+
md5module_state *state = get_md5module_state(module);
362358
Py_CLEAR(state->md5_type);
363359
return 0;
364360
}
@@ -373,7 +369,7 @@ _md5_free(void *module)
373369
static int
374370
md5_exec(PyObject *m)
375371
{
376-
MD5State *st = md5_get_state(m);
372+
md5module_state *st = get_md5module_state(m);
377373

378374
st->md5_type = (PyTypeObject *)PyType_FromModuleAndSpec(
379375
m, &md5_type_spec, NULL);
@@ -399,7 +395,7 @@ static PyModuleDef_Slot _md5_slots[] = {
399395
static struct PyModuleDef _md5module = {
400396
PyModuleDef_HEAD_INIT,
401397
.m_name = "_md5",
402-
.m_size = sizeof(MD5State),
398+
.m_size = sizeof(md5module_state),
403399
.m_methods = MD5_functions,
404400
.m_slots = _md5_slots,
405401
.m_traverse = _md5_traverse,

0 commit comments

Comments
 (0)