diff --git a/32bit_ASN1_Time.patch b/32bit_ASN1_Time.patch new file mode 100644 index 0000000..8a84fe3 --- /dev/null +++ b/32bit_ASN1_Time.patch @@ -0,0 +1,115 @@ +--- + src/M2Crypto/util.py | 4 ++++ + tests/test_asn1.py | 11 +++++------ + tests/test_x509.py | 9 ++++----- + 3 files changed, 13 insertions(+), 11 deletions(-) + +--- a/src/M2Crypto/util.py ++++ b/src/M2Crypto/util.py +@@ -13,6 +13,7 @@ from __future__ import absolute_import + + import binascii + import logging ++import struct + import sys + + from M2Crypto import m2, six +@@ -29,6 +30,9 @@ class UtilError(Exception): + + m2.util_init(UtilError) + ++def is_32bit(): ++ # type: () -> bool ++ return (struct.calcsize("P") * 8) == 32 + + def pkcs5_pad(data, blklen=8): + # type: (str, int) -> str +--- a/tests/test_asn1.py ++++ b/tests/test_asn1.py +@@ -5,10 +5,9 @@ + Copyright (c) 2005 Open Source Applications Foundation. All rights reserved.""" + + import datetime +-import platform + import time + +-from M2Crypto import ASN1, m2 ++from M2Crypto import ASN1, m2, util + from tests import unittest + + +@@ -39,7 +38,7 @@ class ASN1TestCase(unittest.TestCase): + def test_Object(self): + pass # XXX Dunno how to test + +- @unittest.skipIf(platform.system() == 'Windows', 'Skip on Windows.') ++ @unittest.skipIf(util.is_32bit(), 'Skip on 32bit architectures.') + def test_TIME(self): + asn1 = ASN1.ASN1_TIME() + self.assertEqual(str(asn1), 'Bad time value') +@@ -66,7 +65,7 @@ class ASN1TestCase(unittest.TestCase): + t2 = time.strftime(format, time.gmtime(t)) + self.assertEqual(t1, t2) + +- @unittest.skipIf(platform.system() == 'Windows', 'Skip on Windows.') ++ @unittest.skipIf(util.is_32bit(), 'Skip on 32bit architectures.') + def test_UTCTIME(self): + asn1 = ASN1.ASN1_UTCTIME() + self.assertEqual(str(asn1), 'Bad time value') +@@ -93,7 +92,7 @@ class ASN1TestCase(unittest.TestCase): + t2 = time.strftime(format, time.gmtime(t)) + self.assertEqual(t1, t2) + +- @unittest.skipIf(platform.system() == 'Windows', 'Skip on Windows.') ++ @unittest.skipIf(util.is_32bit(), 'Skip on 32bit architectures.') + def test_TIME_datetime(self): + asn1 = ASN1.ASN1_TIME() + # Test get_datetime and set_datetime +@@ -119,7 +118,7 @@ class ASN1TestCase(unittest.TestCase): + self.assertEqual(t1, t2) + self.assertEqual(str(udt), str(asn1.get_datetime())) + +- @unittest.skipIf(platform.system() == 'Windows', 'Skip on Windows.') ++ @unittest.skipIf(util.is_32bit(), 'Skip on 32bit architectures.') + def test_UTCTIME_datetime(self): + asn1 = ASN1.ASN1_UTCTIME() + # Test get_datetime and set_datetime +--- a/tests/test_x509.py ++++ b/tests/test_x509.py +@@ -12,11 +12,10 @@ Author: Heikki Toivonen + import base64 + import logging + import os +-import platform + import time + import warnings + +-from M2Crypto import ASN1, BIO, EVP, RSA, Rand, X509, m2, six # noqa ++from M2Crypto import ASN1, BIO, EVP, RSA, Rand, X509, m2, six, util # noqa + from tests import unittest + + log = logging.getLogger(__name__) +@@ -244,7 +243,7 @@ class X509TestCase(unittest.TestCase): + req.set_version(0) + self.assertEqual(req.get_version(), 0) + +- @unittest.skipIf(platform.system() == 'Windows', 'Skip on Windows.') ++ @unittest.skipIf(util.is_32bit(), 'Skip on 32bit architectures.') + def test_mkcert(self): + for utc in (True, False): + req, pk = self.mkreq(1024) +@@ -588,12 +587,12 @@ class X509TestCase(unittest.TestCase): + self.assertEqual(cert.get_serial_number(), + 127614157056681299805556476275995414779) + +- @unittest.skipIf(platform.system() == 'Windows', 'Skip on Windows.') ++ @unittest.skipIf(util.is_32bit(), 'Skip on 32bit architectures.') + def test_date_after_2050_working(self): + cert = X509.load_cert('tests/bad_date_cert.crt') + self.assertEqual(str(cert.get_not_after()), 'Feb 9 14:57:46 2116 GMT') + +- @unittest.skipIf(platform.system() == 'Windows', 'Skip on Windows.') ++ @unittest.skipIf(util.is_32bit(), 'Skip on 32bit architectures.') + def test_date_reference_counting(self): + """x509_get_not_before() and x509_get_not_after() return internal + pointers into X509. As the returned ASN1_TIME objects do not store any diff --git a/python-M2Crypto.changes b/python-M2Crypto.changes index b91b2d6..0191f4c 100644 --- a/python-M2Crypto.changes +++ b/python-M2Crypto.changes @@ -27,6 +27,7 @@ Tue Oct 24 15:13:16 UTC 2023 - Matej Cepl CentOS 7 have been included. - Introduce m2.err_clear_error() - Make X509_verify_cert() accessible as m2.x509_verify_cert +- Add 32bit_ASN1_Time.patch to quench errors on 32bit archs. ------------------------------------------------------------------- Mon Aug 7 13:14:41 UTC 2023 - Matej Cepl diff --git a/python-M2Crypto.spec b/python-M2Crypto.spec index 41bae24..f7812d0 100644 --- a/python-M2Crypto.spec +++ b/python-M2Crypto.spec @@ -27,6 +27,9 @@ URL: https://gitlab.com/m2crypto/m2crypto Source0: https://files.pythonhosted.org/packages/source/M/M2Crypto/M2Crypto-%{version}.tar.gz Source1: M2Crypto-%{version}.tar.gz.asc Source99: python-M2Crypto.keyring +# PATCH-FIX-UPSTREAM 32bit_ASN1_Time.patch gl#m2crypto/m2crypto/-#341 mcepl@suse.com +# Not only Windows but all 32bit archs have fouled ASN1_Time. +Patch0: 32bit_ASN1_Time.patch BuildRequires: %{python_module devel} BuildRequires: %{python_module pip} BuildRequires: %{python_module typing}