@@ -281,6 +281,8 @@ typedef struct {
281
281
PyMutex mutex ; /* OpenSSL context lock */
282
282
} EVPobject ;
283
283
284
+ #define EVPobject_CAST (op ) ((EVPobject *)(op))
285
+
284
286
typedef struct {
285
287
PyObject_HEAD
286
288
HMAC_CTX * ctx ; /* OpenSSL hmac context */
@@ -289,6 +291,8 @@ typedef struct {
289
291
PyMutex mutex ; /* HMAC context lock */
290
292
} HMACobject ;
291
293
294
+ #define HMACobject_CAST (op ) ((HMACobject *)(op))
295
+
292
296
#include "clinic/_hashopenssl.c.h"
293
297
/*[clinic input]
294
298
module _hashlib
@@ -478,7 +482,7 @@ py_digest_by_digestmod(PyObject *module, PyObject *digestmod, enum Py_hash_type
478
482
static EVPobject *
479
483
newEVPobject (PyTypeObject * type )
480
484
{
481
- EVPobject * retval = ( EVPobject * ) PyObject_New (EVPobject , type );
485
+ EVPobject * retval = PyObject_New (EVPobject , type );
482
486
if (retval == NULL ) {
483
487
return NULL ;
484
488
}
@@ -517,8 +521,9 @@ EVP_hash(EVPobject *self, const void *vp, Py_ssize_t len)
517
521
/* Internal methods for a hash object */
518
522
519
523
static void
520
- EVP_dealloc (EVPobject * self )
524
+ EVP_dealloc (PyObject * op )
521
525
{
526
+ EVPobject * self = EVPobject_CAST (op );
522
527
PyTypeObject * tp = Py_TYPE (self );
523
528
EVP_MD_CTX_free (self -> ctx );
524
529
PyObject_Free (self );
@@ -676,55 +681,47 @@ static PyMethodDef EVP_methods[] = {
676
681
};
677
682
678
683
static PyObject *
679
- EVP_get_block_size (EVPobject * self , void * closure )
684
+ EVP_get_block_size (PyObject * op , void * Py_UNUSED ( closure ) )
680
685
{
681
- long block_size ;
682
- block_size = EVP_MD_CTX_block_size (self -> ctx );
686
+ EVPobject * self = EVPobject_CAST ( op ) ;
687
+ long block_size = EVP_MD_CTX_block_size (self -> ctx );
683
688
return PyLong_FromLong (block_size );
684
689
}
685
690
686
691
static PyObject *
687
- EVP_get_digest_size (EVPobject * self , void * closure )
692
+ EVP_get_digest_size (PyObject * op , void * Py_UNUSED ( closure ) )
688
693
{
689
- long size ;
690
- size = EVP_MD_CTX_size (self -> ctx );
694
+ EVPobject * self = EVPobject_CAST ( op ) ;
695
+ long size = EVP_MD_CTX_size (self -> ctx );
691
696
return PyLong_FromLong (size );
692
697
}
693
698
694
699
static PyObject *
695
- EVP_get_name (EVPobject * self , void * closure )
700
+ EVP_get_name (PyObject * op , void * Py_UNUSED ( closure ) )
696
701
{
702
+ EVPobject * self = EVPobject_CAST (op );
703
+ // NOTE(picnixz): NULL EVP context will be handled by gh-127667.
697
704
return py_digest_name (EVP_MD_CTX_md (self -> ctx ));
698
705
}
699
706
700
707
static PyGetSetDef EVP_getseters [] = {
701
- {"digest_size" ,
702
- (getter )EVP_get_digest_size , NULL ,
703
- NULL ,
704
- NULL },
705
- {"block_size" ,
706
- (getter )EVP_get_block_size , NULL ,
707
- NULL ,
708
- NULL },
709
- {"name" ,
710
- (getter )EVP_get_name , NULL ,
711
- NULL ,
712
- PyDoc_STR ("algorithm name." )},
708
+ {"digest_size" , EVP_get_digest_size , NULL , NULL , NULL },
709
+ {"block_size" , EVP_get_block_size , NULL , NULL , NULL },
710
+ {"name" , EVP_get_name , NULL , NULL , PyDoc_STR ("algorithm name." )},
713
711
{NULL } /* Sentinel */
714
712
};
715
713
716
714
717
715
static PyObject *
718
- EVP_repr (EVPobject * self )
716
+ EVP_repr (PyObject * self )
719
717
{
720
- PyObject * name_obj , * repr ;
721
- name_obj = py_digest_name (EVP_MD_CTX_md (self -> ctx ));
722
- if (!name_obj ) {
718
+ PyObject * name = EVP_get_name (self , NULL );
719
+ if (name == NULL ) {
723
720
return NULL ;
724
721
}
725
- repr = PyUnicode_FromFormat ("<%U %s object @ %p>" ,
726
- name_obj , Py_TYPE ( self ) -> tp_name , self );
727
- Py_DECREF (name_obj );
722
+ PyObject * repr = PyUnicode_FromFormat ("<%U %T object @ %p>" ,
723
+ name , self , self );
724
+ Py_DECREF (name );
728
725
return repr ;
729
726
}
730
727
@@ -866,16 +863,13 @@ static PyMethodDef EVPXOF_methods[] = {
866
863
867
864
868
865
static PyObject *
869
- EVPXOF_get_digest_size (EVPobject * self , void * closure )
866
+ EVPXOF_get_digest_size (PyObject * Py_UNUSED ( self ) , void * Py_UNUSED ( closure ) )
870
867
{
871
868
return PyLong_FromLong (0 );
872
869
}
873
870
874
871
static PyGetSetDef EVPXOF_getseters [] = {
875
- {"digest_size" ,
876
- (getter )EVPXOF_get_digest_size , NULL ,
877
- NULL ,
878
- NULL },
872
+ {"digest_size" , EVPXOF_get_digest_size , NULL , NULL , NULL },
879
873
{NULL } /* Sentinel */
880
874
};
881
875
@@ -1628,6 +1622,7 @@ locked_HMAC_CTX_copy(HMAC_CTX *new_ctx_p, HMACobject *self)
1628
1622
static unsigned int
1629
1623
_hmac_digest_size (HMACobject * self )
1630
1624
{
1625
+ // TODO(picnixz): NULL EVP context should also handled by gh-127667.
1631
1626
unsigned int digest_size = EVP_MD_size (HMAC_CTX_get_md (self -> ctx ));
1632
1627
assert (digest_size <= EVP_MAX_MD_SIZE );
1633
1628
return digest_size ;
@@ -1696,8 +1691,9 @@ _hashlib_HMAC_copy_impl(HMACobject *self)
1696
1691
}
1697
1692
1698
1693
static void
1699
- _hmac_dealloc (HMACobject * self )
1694
+ _hmac_dealloc (PyObject * op )
1700
1695
{
1696
+ HMACobject * self = HMACobject_CAST (op );
1701
1697
PyTypeObject * tp = Py_TYPE (self );
1702
1698
if (self -> ctx != NULL ) {
1703
1699
HMAC_CTX_free (self -> ctx );
@@ -1708,8 +1704,9 @@ _hmac_dealloc(HMACobject *self)
1708
1704
}
1709
1705
1710
1706
static PyObject *
1711
- _hmac_repr (HMACobject * self )
1707
+ _hmac_repr (PyObject * op )
1712
1708
{
1709
+ HMACobject * self = HMACobject_CAST (op );
1713
1710
PyObject * digest_name = py_digest_name (HMAC_CTX_get_md (self -> ctx ));
1714
1711
if (digest_name == NULL ) {
1715
1712
return NULL ;
@@ -1807,8 +1804,9 @@ _hashlib_HMAC_hexdigest_impl(HMACobject *self)
1807
1804
}
1808
1805
1809
1806
static PyObject *
1810
- _hashlib_hmac_get_digest_size (HMACobject * self , void * closure )
1807
+ _hashlib_hmac_get_digest_size (PyObject * op , void * Py_UNUSED ( closure ) )
1811
1808
{
1809
+ HMACobject * self = HMACobject_CAST (op );
1812
1810
unsigned int digest_size = _hmac_digest_size (self );
1813
1811
if (digest_size == 0 ) {
1814
1812
return _setException (PyExc_ValueError , NULL );
@@ -1817,8 +1815,9 @@ _hashlib_hmac_get_digest_size(HMACobject *self, void *closure)
1817
1815
}
1818
1816
1819
1817
static PyObject *
1820
- _hashlib_hmac_get_block_size (HMACobject * self , void * closure )
1818
+ _hashlib_hmac_get_block_size (PyObject * op , void * Py_UNUSED ( closure ) )
1821
1819
{
1820
+ HMACobject * self = HMACobject_CAST (op );
1822
1821
const EVP_MD * md = HMAC_CTX_get_md (self -> ctx );
1823
1822
if (md == NULL ) {
1824
1823
return _setException (PyExc_ValueError , NULL );
@@ -1827,8 +1826,9 @@ _hashlib_hmac_get_block_size(HMACobject *self, void *closure)
1827
1826
}
1828
1827
1829
1828
static PyObject *
1830
- _hashlib_hmac_get_name (HMACobject * self , void * closure )
1829
+ _hashlib_hmac_get_name (PyObject * op , void * Py_UNUSED ( closure ) )
1831
1830
{
1831
+ HMACobject * self = HMACobject_CAST (op );
1832
1832
PyObject * digest_name = py_digest_name (HMAC_CTX_get_md (self -> ctx ));
1833
1833
if (digest_name == NULL ) {
1834
1834
return NULL ;
@@ -1847,9 +1847,9 @@ static PyMethodDef HMAC_methods[] = {
1847
1847
};
1848
1848
1849
1849
static PyGetSetDef HMAC_getset [] = {
1850
- {"digest_size" , ( getter ) _hashlib_hmac_get_digest_size , NULL , NULL , NULL },
1851
- {"block_size" , ( getter ) _hashlib_hmac_get_block_size , NULL , NULL , NULL },
1852
- {"name" , ( getter ) _hashlib_hmac_get_name , NULL , NULL , NULL },
1850
+ {"digest_size" , _hashlib_hmac_get_digest_size , NULL , NULL , NULL },
1851
+ {"block_size" , _hashlib_hmac_get_block_size , NULL , NULL , NULL },
1852
+ {"name" , _hashlib_hmac_get_name , NULL , NULL , NULL },
1853
1853
{NULL } /* Sentinel */
1854
1854
};
1855
1855
@@ -1871,8 +1871,8 @@ digest_size -- number of bytes in digest() output\n");
1871
1871
1872
1872
static PyType_Slot HMACtype_slots [] = {
1873
1873
{Py_tp_doc , (char * )hmactype_doc },
1874
- {Py_tp_repr , ( reprfunc ) _hmac_repr },
1875
- {Py_tp_dealloc ,( destructor ) _hmac_dealloc },
1874
+ {Py_tp_repr , _hmac_repr },
1875
+ {Py_tp_dealloc , _hmac_dealloc },
1876
1876
{Py_tp_methods , HMAC_methods },
1877
1877
{Py_tp_getset , HMAC_getset },
1878
1878
{0 , NULL }
@@ -2165,7 +2165,7 @@ hashlib_clear(PyObject *m)
2165
2165
static void
2166
2166
hashlib_free (void * m )
2167
2167
{
2168
- hashlib_clear ((PyObject * )m );
2168
+ ( void ) hashlib_clear ((PyObject * )m );
2169
2169
}
2170
2170
2171
2171
/* Py_mod_exec functions */
0 commit comments