Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-M2Crypto for openSUSE:Factory checked in at 2022-11-09 12:56:02 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-M2Crypto (Old) and /work/SRC/openSUSE:Factory/.python-M2Crypto.new.1597 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-M2Crypto" Wed Nov 9 12:56:02 2022 rev:45 rq:1034366 version:0.38.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-M2Crypto/python-M2Crypto.changes 2022-08-05 19:50:31.377381590 +0200 +++ /work/SRC/openSUSE:Factory/.python-M2Crypto.new.1597/python-M2Crypto.changes 2022-11-09 12:56:07.463904453 +0100 @@ -1,0 +2,6 @@ +Mon Nov 7 20:14:16 UTC 2022 - Dirk M??ller <dmuel...@suse.com> + +- add openssl-stop-parsing-header.patch (bsc#1205042) +- add m2crypto-0.38-ossl3-tests.patch + +------------------------------------------------------------------- New: ---- m2crypto-0.38-ossl3-tests.patch openssl-stop-parsing-header.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-M2Crypto.spec ++++++ --- /var/tmp/diff_new_pack.QZzN7P/_old 2022-11-09 12:56:08.671911263 +0100 +++ /var/tmp/diff_new_pack.QZzN7P/_new 2022-11-09 12:56:08.679911309 +0100 @@ -31,6 +31,10 @@ # PATCH-FIX-UPSTREAM CVE-2020-25657-Bleichenbacher-attack.patch bsc#1178829 mc...@suse.com # Mitigate the Bleichenbacher timing attacks in the RSA decryption API Patch0: CVE-2020-25657-Bleichenbacher-attack.patch +# PATCH-FIX-UPSTREAM https://gitlab.com/m2crypto/m2crypto/-/merge_requests/271 +Patch1: openssl-stop-parsing-header.patch +# Patch-FIX-OPENSUSE add test skips for openssl 3.x +Patch2: https://src.fedoraproject.org/rpms/m2crypto/raw/d7be0dd83ee5a414544d99dcc62cde4ad5998f0c/f/m2crypto-0.38-ossl3-tests.patch BuildRequires: %{python_module devel} BuildRequires: %{python_module parameterized} BuildRequires: %{python_module pytest} ++++++ m2crypto-0.38-ossl3-tests.patch ++++++ >From 969beba690c31a91e4c8c2fea5dc1f992df21e09 Mon Sep 17 00:00:00 2001 From: Petr Mensik <pemen...@redhat.com> Date: Tue, 2 Aug 2022 22:04:38 +0200 Subject: [PATCH] Changed required to pass tests on OpenSSL 3.0 Just changes to make the package pass tests. Some are just cosmetic changes. Some would require proper investigation. --- tests/test_bio.py | 7 ++++--- tests/test_evp.py | 12 ++++++------ tests/test_obj.py | 1 + tests/test_rsa.py | 11 +++++++++-- tests/test_ssl.py | 1 + tests/test_x509.py | 29 ++++++++++++++++++++++------- 6 files changed, 43 insertions(+), 18 deletions(-) diff --git a/tests/test_bio.py b/tests/test_bio.py index a70dd73..222c292 100644 --- a/tests/test_bio.py +++ b/tests/test_bio.py @@ -12,9 +12,9 @@ import logging from parameterized import parameterized -from M2Crypto import BIO, Rand +from M2Crypto import BIO, Rand, m2 from tests import unittest -from .fips import fips_mode +from tests.fips import fips_mode log = logging.getLogger('test_bio') @@ -30,10 +30,11 @@ nonfips_ciphers = ['bf_ecb', 'bf_cbc', 'bf_cfb', 'bf_ofb', # 'rc5_ecb', 'rc5_cbc', 'rc5_cfb', 'rc5_ofb', 'des_ecb', 'des_cbc', 'des_cfb', 'des_ofb', 'rc4', 'rc2_40_cbc'] -if not fips_mode: # Forbidden ciphers +if not fips_mode and m2.OPENSSL_VERSION_NUMBER < 0x30000000: # Forbidden ciphers ciphers += nonfips_ciphers + class CipherStreamTestCase(unittest.TestCase): def try_algo(self, algo): data = b'123456789012345678901234' diff --git a/tests/test_evp.py b/tests/test_evp.py index d63b8b5..ceb0030 100644 --- a/tests/test_evp.py +++ b/tests/test_evp.py @@ -35,7 +35,7 @@ nonfips_ciphers = ['bf_ecb', 'bf_cbc', 'bf_cfb', 'bf_ofb', # 'rc5_ecb', 'rc5_cbc', 'rc5_cfb', 'rc5_ofb', 'des_ecb', 'des_cbc', 'des_cfb', 'des_ofb', 'rc4', 'rc2_40_cbc'] -if not fips_mode: # Disabled algorithms +if not fips_mode and m2.OPENSSL_VERSION_NUMBER < 0x30000000: # Disabled algorithms ciphers += nonfips_ciphers @@ -137,11 +137,11 @@ class EVPTestCase(unittest.TestCase): 209168838103121722341657216703105225176, util.octx_to_num(EVP.hmac(b'key', b'data', algo='md5'))) - self.assertEqual(util.octx_to_num(EVP.hmac(b'key', b'data', - algo='ripemd160')), - 1176807136224664126629105846386432860355826868536, - util.octx_to_num(EVP.hmac(b'key', b'data', - algo='ripemd160'))) + #self.assertEqual(util.octx_to_num(EVP.hmac(b'key', b'data', + # algo='ripemd160')), + # 1176807136224664126629105846386432860355826868536, + # util.octx_to_num(EVP.hmac(b'key', b'data', + # algo='ripemd160'))) if m2.OPENSSL_VERSION_NUMBER >= 0x90800F: self.assertEqual(util.octx_to_num(EVP.hmac(b'key', b'data', diff --git a/tests/test_obj.py b/tests/test_obj.py index 825c203..e2a9e3e 100644 --- a/tests/test_obj.py +++ b/tests/test_obj.py @@ -106,6 +106,7 @@ class ObjectsTestCase(unittest.TestCase): self.assertEqual(n.as_text(), n1.as_text(), n1.as_text()) # Detailed OpenSSL error message is visible in Python error message: + @unittest.skipIf(m2.OPENSSL_VERSION_NUMBER >= 0x30000000, "Failing on OpenSSL3") def test_detailed_error_message(self): from M2Crypto import SMIME, X509 s = SMIME.SMIME() diff --git a/tests/test_rsa.py b/tests/test_rsa.py index 7bb3af7..8258c47 100644 --- a/tests/test_rsa.py +++ b/tests/test_rsa.py @@ -115,7 +115,8 @@ class RSATestCase(unittest.TestCase): with self.assertRaises(TypeError): priv.private_encrypt(self.gen_callback, RSA.pkcs1_padding) - @unittest.skipIf(m2.OPENSSL_VERSION_NUMBER < 0x1010103f, + @unittest.skipIf(m2.OPENSSL_VERSION_NUMBER < 0x1010103f or + m2.OPENSSL_VERSION_NUMBER >= 0x30000000, 'Relies on fix which happened only in OpenSSL 1.1.1c') def test_public_encrypt(self): priv = RSA.load_key(self.privkey) @@ -264,7 +265,11 @@ class RSATestCase(unittest.TestCase): algos['sha512'] = 0 for algo, salt_max in algos.items(): - h = hashlib.new(algo) + try: + h = hashlib.new(algo) + except ValueError: + algos[algo] = (None, None) + continue h.update(message) digest = h.digest() algos[algo] = (salt_max, digest) @@ -272,6 +277,8 @@ class RSATestCase(unittest.TestCase): rsa = RSA.load_key(self.privkey) rsa2 = RSA.load_pub_key(self.pubkey) for algo, (salt_max, digest) in algos.items(): + if salt_max is None or digest is None: + continue for salt_length in range(0, salt_max): signature = rsa.sign_rsassa_pss(digest, algo, salt_length) verify = rsa2.verify_rsassa_pss(digest, signature, diff --git a/tests/test_ssl.py b/tests/test_ssl.py index e18adf5..cb06efe 100644 --- a/tests/test_ssl.py +++ b/tests/test_ssl.py @@ -417,6 +417,7 @@ class MiscSSLClientTestCase(BaseSSLClientTestCase): finally: self.stop_server(pid) + @unittest.skipIf(m2.OPENSSL_VERSION_NUMBER >= 0x30000000, "No TLS1 is allowed") def test_tls1_ok(self): self.args.append('-tls1') pid = self.start_server(self.args) diff --git a/tests/test_x509.py b/tests/test_x509.py index c36757e..c91e0ca 100644 --- a/tests/test_x509.py +++ b/tests/test_x509.py @@ -219,14 +219,23 @@ class X509TestCase(unittest.TestCase): req4 = X509.load_request('tests/tmp_request.der', format=X509.FORMAT_DER) os.remove('tests/tmp_request.der') + if m2.OPENSSL_VERSION_NUMBER >= 0x30000000: + req2t = req2.as_text().replace(' Public-Key: (1024 bit)', ' RSA Public-Key: (1024 bit)') + req3t = req3.as_text().replace(' Public-Key: (1024 bit)', ' RSA Public-Key: (1024 bit)') + req4t = req3.as_text().replace(' Public-Key: (1024 bit)', ' RSA Public-Key: (1024 bit)') + else: + req2t = req2.as_text() + req3t = req3.as_text() + req4t = req3.as_text() + self.assertEqual(req.as_pem(), req2.as_pem()) - self.assertEqual(req.as_text(), req2.as_text()) + self.assertEqual(req.as_text(), req2t) self.assertEqual(req.as_der(), req2.as_der()) self.assertEqual(req.as_pem(), req3.as_pem()) - self.assertEqual(req.as_text(), req3.as_text()) + self.assertEqual(req.as_text(), req3t) self.assertEqual(req.as_der(), req3.as_der()) self.assertEqual(req.as_pem(), req4.as_pem()) - self.assertEqual(req.as_text(), req4.as_text()) + self.assertEqual(req.as_text(), req4t) self.assertEqual(req.as_der(), req4.as_der()) self.assertEqual(req.get_version(), 0) req.set_version(1) @@ -370,9 +379,9 @@ class X509TestCase(unittest.TestCase): self.assertTrue(proxycert.verify(pk2)) self.assertEqual(proxycert.get_ext_at(0).get_name(), 'proxyCertInfo') - self.assertEqual(proxycert.get_ext_at(0).get_value(), + self.assertEqual(proxycert.get_ext_at(0).get_value().strip(), 'Path Length Constraint: infinite\n' + - 'Policy Language: Inherit all\n') + 'Policy Language: Inherit all') self.assertEqual(proxycert.get_ext_count(), 1, proxycert.get_ext_count()) self.assertEqual(proxycert.get_subject().as_text(), @@ -586,6 +595,12 @@ class X509TestCase(unittest.TestCase): class X509StackTestCase(unittest.TestCase): + def setUp(self): + if m2.OPENSSL_VERSION_NUMBER >= 0x30000000: + self.expected_subject = '/DC=org/DC=doegrids/OU=Services/CN=host\\/bosshog.lbl.gov' + else: + self.expected_subject = '/DC=org/DC=doegrids/OU=Services/CN=host/bosshog.lbl.gov' + def test_make_stack_from_der(self): with open("tests/der_encoded_seq.b64", 'rb') as f: b64 = f.read() @@ -607,7 +622,7 @@ class X509StackTestCase(unittest.TestCase): subject = cert.get_subject() self.assertEqual( str(subject), - "/DC=org/DC=doegrids/OU=Services/CN=host/bosshog.lbl.gov") + self.expected_subject) def test_make_stack_check_num(self): with open("tests/der_encoded_seq.b64", 'rb') as f: @@ -629,7 +644,7 @@ class X509StackTestCase(unittest.TestCase): subject = cert.get_subject() self.assertEqual( str(subject), - "/DC=org/DC=doegrids/OU=Services/CN=host/bosshog.lbl.gov") + self.expected_subject) def test_make_stack(self): stack = X509.X509_Stack() -- 2.35.3 ++++++ openssl-stop-parsing-header.patch ++++++ >From 1a746c6d01eff4863c116e279756a1035fd5feb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Cepl?= <mc...@cepl.eu> Date: Mon, 22 Nov 2021 23:05:41 +0100 Subject: [PATCH] Use OpenSSL_version_num() instead of unrealiable parsing of .h file. Fixes #302 --- setup.py | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/setup.py b/setup.py index a1d58f25..04ac8c77 100644 --- a/setup.py +++ b/setup.py @@ -75,21 +75,30 @@ def openssl_version(ossldir, req_ver, required=False): :return: Boolean indicating whether the satisfying version of OpenSSL has been installed. """ - ver = None - file = os.path.join(ossldir, 'include', 'openssl', 'opensslv.h') - - with open(file) as origin_file: - for line in origin_file: - m = re.match( - r'^# *define *OPENSSL_VERSION_NUMBER *(0x[0-9a-fA-F]*)', - line) - if m: - log.debug('found version number: %s\n', m.group(1)) - ver = int(m.group(1), base=16) - break - - if ver is None: - raise OSError('Unknown format of file %s\n' % file) + try: + import ctypes + libssl = ctypes.cdll.LoadLibrary("libssl.so") + ver = libssl.OpenSSL_version_num() + log.debug("ctypes: ver = %s", hex(ver)) + # for OpenSSL < 1.1.0 + except AttributeError: + ver = None + file = os.path.join(ossldir, 'include', 'openssl', 'opensslv.h') + + with open(file) as origin_file: + for line in origin_file: + m = re.match( + r'^# *define *OPENSSL_VERSION_NUMBER *(0x[0-9a-fA-F]*)', + line) + if m: + log.debug('found version number: %s\n', m.group(1)) + ver = int(m.group(1), base=16) + break + + log.debug("parsing header file: ver = %s", hex(ver)) + + if ver is None: + raise OSError('Unknown format of file %s\n' % file) if required: return ver >= req_ver -- GitLab