@@ -300,14 +300,29 @@ class _hashlib.HMAC "HMACobject *" "((_hashlibstate *)PyModule_GetState(module))
300
300
301
301
/* LCOV_EXCL_START */
302
302
static PyObject *
303
- format_openssl_error_code (PyObject * exc , unsigned long errcode )
303
+ _setException (PyObject * exc , const char * altmsg , ... )
304
304
{
305
- assert (errcode != 0 );
305
+ unsigned long errcode = ERR_peek_last_error ();
306
+ const char * lib , * func , * reason ;
307
+ va_list vargs ;
308
+
309
+ va_start (vargs , altmsg );
310
+ if (!errcode ) {
311
+ if (altmsg == NULL ) {
312
+ PyErr_SetString (exc , "no reason supplied" );
313
+ } else {
314
+ PyErr_FormatV (exc , altmsg , vargs );
315
+ }
316
+ va_end (vargs );
317
+ return NULL ;
318
+ }
319
+ va_end (vargs );
320
+ ERR_clear_error ();
306
321
307
322
/* ERR_ERROR_STRING(3) ensures that the messages below are ASCII */
308
- const char * lib = ERR_lib_error_string (errcode );
309
- const char * func = ERR_func_error_string (errcode );
310
- const char * reason = ERR_reason_error_string (errcode );
323
+ lib = ERR_lib_error_string (errcode );
324
+ func = ERR_func_error_string (errcode );
325
+ reason = ERR_reason_error_string (errcode );
311
326
312
327
if (lib && func ) {
313
328
PyErr_Format (exc , "[%s: %s] %s" , lib , func , reason );
@@ -320,40 +335,6 @@ format_openssl_error_code(PyObject *exc, unsigned long errcode)
320
335
}
321
336
return NULL ;
322
337
}
323
-
324
- static PyObject *
325
- format_openssl_exception (PyObject * exc , const char * alt_format , ...)
326
- {
327
- assert (alt_format != NULL );
328
- unsigned long errcode = ERR_peek_last_error ();
329
- if (!errcode ) {
330
- va_list vargs ;
331
- va_start (vargs , alt_format );
332
- PyErr_FormatV (exc , alt_format , vargs );
333
- va_end (vargs );
334
- return NULL ;
335
- }
336
- ERR_clear_error ();
337
- return format_openssl_error_code (exc , errcode );
338
- }
339
-
340
- static void
341
- set_openssl_exception (PyObject * exc , const char * alt_message )
342
- {
343
- unsigned long errcode = ERR_peek_last_error ();
344
- if (!errcode ) {
345
- PyErr_SetString (exc , alt_message );
346
- return ;
347
- }
348
- ERR_clear_error ();
349
- (void )format_openssl_error_code (exc , errcode );
350
- }
351
-
352
- static inline void
353
- set_simple_openssl_exception (void )
354
- {
355
- set_openssl_exception (PyExc_ValueError , "no reason supplied" );
356
- }
357
338
/* LCOV_EXCL_STOP */
358
339
359
340
static PyObject *
@@ -427,8 +408,8 @@ py_digest_by_name(PyObject *module, const char *name, enum Py_hash_type py_ht)
427
408
}
428
409
}
429
410
if (digest == NULL ) {
430
- format_openssl_exception (state -> unsupported_digestmod_error ,
431
- "unsupported hash type %s" , name );
411
+ _setException (state -> unsupported_digestmod_error ,
412
+ "unsupported hash type %s" , name );
432
413
return NULL ;
433
414
}
434
415
return digest ;
@@ -501,7 +482,7 @@ EVP_hash(EVPobject *self, const void *vp, Py_ssize_t len)
501
482
else
502
483
process = Py_SAFE_DOWNCAST (len , Py_ssize_t , unsigned int );
503
484
if (!EVP_DigestUpdate (self -> ctx , (const void * )cp , process )) {
504
- set_simple_openssl_exception ( );
485
+ _setException ( PyExc_ValueError , NULL );
505
486
return -1 ;
506
487
}
507
488
len -= process ;
@@ -550,7 +531,7 @@ EVP_copy_impl(EVPobject *self)
550
531
551
532
if (!locked_EVP_MD_CTX_copy (newobj -> ctx , self )) {
552
533
Py_DECREF (newobj );
553
- set_simple_openssl_exception ( );
534
+ _setException ( PyExc_ValueError , NULL );
554
535
return NULL ;
555
536
}
556
537
return (PyObject * )newobj ;
@@ -591,7 +572,7 @@ EVP_digest_impl(EVPobject *self)
591
572
592
573
error :
593
574
EVP_MD_CTX_free (temp_ctx );
594
- set_simple_openssl_exception ( );
575
+ _setException ( PyExc_ValueError , NULL );
595
576
return NULL ;
596
577
}
597
578
@@ -630,7 +611,7 @@ EVP_hexdigest_impl(EVPobject *self)
630
611
631
612
error :
632
613
EVP_MD_CTX_free (temp_ctx );
633
- set_simple_openssl_exception ( );
614
+ _setException ( PyExc_ValueError , NULL );
634
615
return NULL ;
635
616
}
636
617
@@ -701,7 +682,7 @@ EVP_get_name(EVPobject *self, void *closure)
701
682
{
702
683
const EVP_MD * md = EVP_MD_CTX_md (self -> ctx );
703
684
if (md == NULL ) {
704
- set_simple_openssl_exception ( );
685
+ _setException ( PyExc_ValueError , NULL );
705
686
return NULL ;
706
687
}
707
688
return py_digest_name (md );
@@ -816,7 +797,7 @@ EVPXOF_digest_impl(EVPobject *self, Py_ssize_t length)
816
797
error :
817
798
Py_DECREF (retval );
818
799
EVP_MD_CTX_free (temp_ctx );
819
- set_simple_openssl_exception ( );
800
+ _setException ( PyExc_ValueError , NULL );
820
801
return NULL ;
821
802
}
822
803
@@ -866,7 +847,7 @@ EVPXOF_hexdigest_impl(EVPobject *self, Py_ssize_t length)
866
847
error :
867
848
PyMem_Free (digest );
868
849
EVP_MD_CTX_free (temp_ctx );
869
- set_simple_openssl_exception ( );
850
+ _setException ( PyExc_ValueError , NULL );
870
851
return NULL ;
871
852
}
872
853
@@ -999,7 +980,7 @@ py_evp_fromname(PyObject *module, const char *digestname, PyObject *data_obj,
999
980
1000
981
error :
1001
982
Py_CLEAR (self );
1002
- set_simple_openssl_exception ( );
983
+ _setException ( PyExc_ValueError , NULL );
1003
984
goto exit ;
1004
985
}
1005
986
@@ -1361,7 +1342,7 @@ pbkdf2_hmac_impl(PyObject *module, const char *hash_name,
1361
1342
1362
1343
if (!retval ) {
1363
1344
Py_CLEAR (key_obj );
1364
- set_simple_openssl_exception ( );
1345
+ _setException ( PyExc_ValueError , NULL );
1365
1346
goto end ;
1366
1347
}
1367
1348
@@ -1467,8 +1448,8 @@ _hashlib_scrypt_impl(PyObject *module, Py_buffer *password, Py_buffer *salt,
1467
1448
/* let OpenSSL validate the rest */
1468
1449
retval = EVP_PBE_scrypt (NULL , 0 , NULL , 0 , n , r , p , maxmem , NULL , 0 );
1469
1450
if (!retval ) {
1470
- set_openssl_exception (PyExc_ValueError ,
1471
- "Invalid parameter combination for n, r, p, maxmem." );
1451
+ _setException (PyExc_ValueError ,
1452
+ "Invalid parameter combination for n, r, p, maxmem." );
1472
1453
return NULL ;
1473
1454
}
1474
1455
@@ -1489,7 +1470,7 @@ _hashlib_scrypt_impl(PyObject *module, Py_buffer *password, Py_buffer *salt,
1489
1470
1490
1471
if (!retval ) {
1491
1472
Py_CLEAR (key_obj );
1492
- set_simple_openssl_exception ( );
1473
+ _setException ( PyExc_ValueError , NULL );
1493
1474
return NULL ;
1494
1475
}
1495
1476
return key_obj ;
@@ -1546,7 +1527,7 @@ _hashlib_hmac_singleshot_impl(PyObject *module, Py_buffer *key,
1546
1527
PY_EVP_MD_free (evp );
1547
1528
1548
1529
if (result == NULL ) {
1549
- set_simple_openssl_exception ( );
1530
+ _setException ( PyExc_ValueError , NULL );
1550
1531
return NULL ;
1551
1532
}
1552
1533
return PyBytes_FromStringAndSize ((const char * )md , md_len );
@@ -1597,7 +1578,7 @@ _hashlib_hmac_new_impl(PyObject *module, Py_buffer *key, PyObject *msg_obj,
1597
1578
ctx = HMAC_CTX_new ();
1598
1579
if (ctx == NULL ) {
1599
1580
PY_EVP_MD_free (digest );
1600
- set_simple_openssl_exception ( );
1581
+ _setException ( PyExc_ValueError , NULL );
1601
1582
return NULL ;
1602
1583
}
1603
1584
@@ -1609,7 +1590,7 @@ _hashlib_hmac_new_impl(PyObject *module, Py_buffer *key, PyObject *msg_obj,
1609
1590
NULL /*impl*/ );
1610
1591
PY_EVP_MD_free (digest );
1611
1592
if (r == 0 ) {
1612
- set_simple_openssl_exception ( );
1593
+ _setException ( PyExc_ValueError , NULL );
1613
1594
goto error ;
1614
1595
}
1615
1596
@@ -1653,13 +1634,13 @@ _hmac_digest_size(HMACobject *self)
1653
1634
{
1654
1635
const EVP_MD * md = HMAC_CTX_get_md (self -> ctx );
1655
1636
if (md == NULL ) {
1656
- set_simple_openssl_exception ( );
1637
+ _setException ( PyExc_ValueError , NULL );
1657
1638
return 0 ;
1658
1639
}
1659
1640
unsigned int digest_size = EVP_MD_size (md );
1660
1641
assert (digest_size <= EVP_MAX_MD_SIZE );
1661
1642
if (digest_size == 0 ) {
1662
- set_simple_openssl_exception ( );
1643
+ _setException ( PyExc_ValueError , NULL );
1663
1644
}
1664
1645
return digest_size ;
1665
1646
}
@@ -1688,7 +1669,7 @@ _hmac_update(HMACobject *self, PyObject *obj)
1688
1669
PyBuffer_Release (& view );
1689
1670
1690
1671
if (r == 0 ) {
1691
- set_simple_openssl_exception ( );
1672
+ _setException ( PyExc_ValueError , NULL );
1692
1673
return 0 ;
1693
1674
}
1694
1675
return 1 ;
@@ -1708,12 +1689,12 @@ _hashlib_HMAC_copy_impl(HMACobject *self)
1708
1689
1709
1690
HMAC_CTX * ctx = HMAC_CTX_new ();
1710
1691
if (ctx == NULL ) {
1711
- set_simple_openssl_exception ( );
1692
+ _setException ( PyExc_ValueError , NULL );
1712
1693
return NULL ;
1713
1694
}
1714
1695
if (!locked_HMAC_CTX_copy (ctx , self )) {
1715
1696
HMAC_CTX_free (ctx );
1716
- set_simple_openssl_exception ( );
1697
+ _setException ( PyExc_ValueError , NULL );
1717
1698
return NULL ;
1718
1699
}
1719
1700
@@ -1742,7 +1723,7 @@ _hmac_repr(HMACobject *self)
1742
1723
{
1743
1724
const EVP_MD * md = HMAC_CTX_get_md (self -> ctx );
1744
1725
if (md == NULL ) {
1745
- set_simple_openssl_exception ( );
1726
+ _setException ( PyExc_ValueError , NULL );
1746
1727
return NULL ;
1747
1728
}
1748
1729
PyObject * digest_name = py_digest_name (md );
@@ -1782,13 +1763,13 @@ _hmac_digest(HMACobject *self, unsigned char *buf, unsigned int len)
1782
1763
return 0 ;
1783
1764
}
1784
1765
if (!locked_HMAC_CTX_copy (temp_ctx , self )) {
1785
- set_simple_openssl_exception ( );
1766
+ _setException ( PyExc_ValueError , NULL );
1786
1767
return 0 ;
1787
1768
}
1788
1769
int r = HMAC_Final (temp_ctx , buf , & len );
1789
1770
HMAC_CTX_free (temp_ctx );
1790
1771
if (r == 0 ) {
1791
- set_simple_openssl_exception ( );
1772
+ _setException ( PyExc_ValueError , NULL );
1792
1773
return 0 ;
1793
1774
}
1794
1775
return 1 ;
@@ -1858,7 +1839,7 @@ _hashlib_hmac_get_block_size(HMACobject *self, void *closure)
1858
1839
{
1859
1840
const EVP_MD * md = HMAC_CTX_get_md (self -> ctx );
1860
1841
if (md == NULL ) {
1861
- set_simple_openssl_exception ( );
1842
+ _setException ( PyExc_ValueError , NULL );
1862
1843
return NULL ;
1863
1844
}
1864
1845
return PyLong_FromLong (EVP_MD_block_size (md ));
@@ -1869,7 +1850,7 @@ _hashlib_hmac_get_name(HMACobject *self, void *closure)
1869
1850
{
1870
1851
const EVP_MD * md = HMAC_CTX_get_md (self -> ctx );
1871
1852
if (md == NULL ) {
1872
- set_simple_openssl_exception ( );
1853
+ _setException ( PyExc_ValueError , NULL );
1873
1854
return NULL ;
1874
1855
}
1875
1856
PyObject * digest_name = py_digest_name (md );
@@ -2023,7 +2004,7 @@ _hashlib_get_fips_mode_impl(PyObject *module)
2023
2004
// But 0 is also a valid result value.
2024
2005
unsigned long errcode = ERR_peek_last_error ();
2025
2006
if (errcode ) {
2026
- set_simple_openssl_exception ( );
2007
+ _setException ( PyExc_ValueError , NULL );
2027
2008
return -1 ;
2028
2009
}
2029
2010
}
0 commit comments