File CVE-2020-25657-Bleichenbacher-attack.patch of Package python-M2Crypto.25024

---
 M2Crypto/Err.py       |    6 +++---
 SWIG/_m2crypto_wrap.c |   10 ++++++----
 SWIG/_rsa.i           |   10 ++++++----
 tests/test_rsa.py     |   12 ++++++------
 4 files changed, 21 insertions(+), 17 deletions(-)

--- a/M2Crypto/Err.py
+++ b/M2Crypto/Err.py
@@ -39,9 +39,9 @@ def get_error_func(err):
 
 
 def get_error_reason(err):
-    # type: (int) -> str
-    return util.py3str(m2.err_reason_error_string(err))
-
+    # type: (Optional[int]) -> str
+    err_str = m2.err_reason_error_string(err)
+    return util.py3str(err_str) if err_str else ''
 
 def get_error_message():
     # type: () -> str
--- a/SWIG/_m2crypto_wrap.c
+++ b/SWIG/_m2crypto_wrap.c
@@ -6877,9 +6877,10 @@ PyObject *rsa_public_decrypt(RSA *rsa, P
     tlen = RSA_public_decrypt(flen, (unsigned char *)fbuf,
         (unsigned char *)tbuf, rsa, padding);
     if (tlen == -1) {
-        m2_PyErr_Msg(_rsa_err);
+        ERR_clear_error();
+        PyErr_Clear();
         PyMem_Free(tbuf);
-        return NULL;
+        Py_RETURN_NONE;
     }
 
     ret = PyBytes_FromStringAndSize((const char *)tbuf, tlen);
@@ -6931,9 +6932,10 @@ PyObject *rsa_private_decrypt(RSA *rsa,
     tlen = RSA_private_decrypt(flen, (unsigned char *)fbuf,
         (unsigned char *)tbuf, rsa, padding);
     if (tlen == -1) {
-        m2_PyErr_Msg(_rsa_err);
+        ERR_clear_error();
+        PyErr_Clear();
         PyMem_Free(tbuf);
-        return NULL;
+        Py_RETURN_NONE;
     }
     ret = PyBytes_FromStringAndSize((const char *)tbuf, tlen);
 
--- a/SWIG/_rsa.i
+++ b/SWIG/_rsa.i
@@ -267,9 +267,10 @@ PyObject *rsa_public_decrypt(RSA *rsa, P
     tlen = RSA_public_decrypt(flen, (unsigned char *)fbuf,
         (unsigned char *)tbuf, rsa, padding);
     if (tlen == -1) {
-        m2_PyErr_Msg(_rsa_err);
+        ERR_clear_error();
+        PyErr_Clear();
         PyMem_Free(tbuf);
-        return NULL;
+        Py_RETURN_NONE;
     }
 
     ret = PyBytes_FromStringAndSize((const char *)tbuf, tlen);
@@ -321,9 +322,10 @@ PyObject *rsa_private_decrypt(RSA *rsa,
     tlen = RSA_private_decrypt(flen, (unsigned char *)fbuf,
         (unsigned char *)tbuf, rsa, padding);
     if (tlen == -1) {
-        m2_PyErr_Msg(_rsa_err);
+        ERR_clear_error();
+        PyErr_Clear();
         PyMem_Free(tbuf);
-        return NULL;
+        Py_RETURN_NONE;
     }
     ret = PyBytes_FromStringAndSize((const char *)tbuf, tlen);
 
--- a/tests/test_rsa.py
+++ b/tests/test_rsa.py
@@ -128,10 +128,12 @@ class RSATestCase(unittest.TestCase):
 
         # sslv23_padding
         ctxt = priv.public_encrypt(self.data, RSA.sslv23_padding)
-        with self.assertRaises(RSA.RSAError):
-            priv.private_decrypt(ctxt, RSA.sslv23_padding)
-        with self.assertRaises(RSA.RSAError):
-            priv.private_decrypt(ctxt, RSA.sslv23_padding)
+        # Raising exception has been switched off as a mitigation against
+        # CVE-2020-25657 the Bleichenbacher timing attack
+        # with self.assertRaises(RSA.RSAError):
+        priv.private_decrypt(ctxt, RSA.sslv23_padding)
+        # with self.assertRaises(RSA.RSAError):
+        priv.private_decrypt(ctxt, RSA.sslv23_padding)
 
         # no_padding
         with self.assertRaises(RSA.RSAError):
@@ -154,8 +156,6 @@ class RSATestCase(unittest.TestCase):
         with self.assertRaises(RSA.RSAError):
             setattr(rsa, 'e', '\000\000\000\003\001\000\001')
         with self.assertRaises(RSA.RSAError):
-            rsa.private_encrypt(1)
-        with self.assertRaises(RSA.RSAError):
             rsa.private_decrypt(1)
         assert rsa.check_key()
 
openSUSE Build Service is sponsored by