Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-pyOpenSSL for openSUSE:Factory checked in at 2023-03-29 23:26:51 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pyOpenSSL (Old) and /work/SRC/openSUSE:Factory/.python-pyOpenSSL.new.31432 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pyOpenSSL" Wed Mar 29 23:26:51 2023 rev:49 rq:1075038 version:23.1.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pyOpenSSL/python-pyOpenSSL.changes 2023-01-03 15:04:35.758240426 +0100 +++ /work/SRC/openSUSE:Factory/.python-pyOpenSSL.new.31432/python-pyOpenSSL.changes 2023-03-29 23:27:04.383420551 +0200 @@ -1,0 +2,18 @@ +Tue Mar 28 15:40:13 UTC 2023 - Dirk Müller <dmuel...@suse.com> + +- update to 23.1.1: + * Worked around an issue in OpenSSL 3.1.0 which caused + `X509Extension.get_short_name` to raise an exception when no + short name was known to OpenSSL. + +------------------------------------------------------------------- +Mon Mar 27 07:54:16 UTC 2023 - Dirk Müller <dmuel...@suse.com> + +- update to 23.1.0: + * ``cryptography`` maximum version has been increased to + 40.0.x. + * Add ``OpenSSL.SSL.Connection.DTLSv1_get_timeout`` and + ``OpenSSL.SSL.Connection.DTLSv1_handle_timeout`` + to support DTLS timeouts `#1180 + +------------------------------------------------------------------- Old: ---- pyOpenSSL-23.0.0.tar.gz New: ---- pyOpenSSL-23.1.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pyOpenSSL.spec ++++++ --- /var/tmp/diff_new_pack.RqRJD3/_old 2023-03-29 23:27:04.935423145 +0200 +++ /var/tmp/diff_new_pack.RqRJD3/_new 2023-03-29 23:27:04.939423164 +0200 @@ -27,7 +27,7 @@ %endif %global skip_python2 1 Name: python-pyOpenSSL%{psuffix} -Version: 23.0.0 +Version: 23.1.1 Release: 0 Summary: Python wrapper module around the OpenSSL library License: Apache-2.0 @@ -41,7 +41,7 @@ BuildRequires: fdupes BuildRequires: python-rpm-macros %if %{with test} -BuildRequires: %{python_module cryptography >= 38.0.0 with %python-cryptography < 40} +BuildRequires: %{python_module cryptography >= 38.0.0 with %python-cryptography < 41} BuildRequires: %{python_module flaky} BuildRequires: %{python_module pretend} BuildRequires: %{python_module pyOpenSSL >= %version} @@ -50,7 +50,7 @@ BuildRequires: openssl %endif Requires: python-cffi -Requires: (python-cryptography >= 38.0.0 with python-cryptography < 40) +Requires: (python-cryptography >= 38.0.0 with python-cryptography < 41) Provides: pyOpenSSL = %{version} BuildArch: noarch %python_subpackages ++++++ pyOpenSSL-23.0.0.tar.gz -> pyOpenSSL-23.1.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyOpenSSL-23.0.0/CHANGELOG.rst new/pyOpenSSL-23.1.1/CHANGELOG.rst --- old/pyOpenSSL-23.0.0/CHANGELOG.rst 2023-01-02 05:29:00.000000000 +0100 +++ new/pyOpenSSL-23.1.1/CHANGELOG.rst 2023-03-28 05:07:36.000000000 +0200 @@ -4,6 +4,37 @@ Versions are year-based with a strict backward-compatibility policy. The third digit is only for regressions. +23.1.1 (2023-03-28) +------------------- + +Backward-incompatible changes: +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Deprecations: +^^^^^^^^^^^^^ + +Changes: +^^^^^^^^ + +- Worked around an issue in OpenSSL 3.1.0 which caused `X509Extension.get_short_name` to raise an exception when no short name was known to OpenSSL. + `#1204 <https://github.com/pyca/pyopenssl/pull/1204>`_. + +23.1.0 (2023-03-24) +------------------- + +Backward-incompatible changes: +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Deprecations: +^^^^^^^^^^^^^ + +Changes: +^^^^^^^^ + +- ``cryptography`` maximum version has been increased to 40.0.x. +- Add ``OpenSSL.SSL.Connection.DTLSv1_get_timeout`` and ``OpenSSL.SSL.Connection.DTLSv1_handle_timeout`` + to support DTLS timeouts `#1180 <https://github.com/pyca/pyopenssl/pull/1180>`_. + 23.0.0 (2023-01-01) ------------------- @@ -28,7 +59,7 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Remove support for SSLv2 and SSLv3. -- The minimum ``cryptography`` version is now 38.0.x (and we now pin releases +- The minimum ``cryptography`` version is now 38.0.x (and we now pin releases against ``cryptography`` major versions to prevent future breakage) - The ``OpenSSL.crypto.X509StoreContextError`` exception has been refactored, changing its internal attributes. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyOpenSSL-23.0.0/PKG-INFO new/pyOpenSSL-23.1.1/PKG-INFO --- old/pyOpenSSL-23.0.0/PKG-INFO 2023-01-02 05:30:57.825963000 +0100 +++ new/pyOpenSSL-23.1.1/PKG-INFO 2023-03-28 05:09:15.759759400 +0200 @@ -1,12 +1,13 @@ Metadata-Version: 2.1 Name: pyOpenSSL -Version: 23.0.0 +Version: 23.1.1 Summary: Python wrapper module around the OpenSSL library Home-page: https://pyopenssl.org/ Author: The pyOpenSSL developers Author-email: cryptography-...@python.org License: Apache License, Version 2.0 Project-URL: Source, https://github.com/pyca/pyopenssl +Platform: UNKNOWN Classifier: Development Status :: 6 - Mature Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: Apache Software License @@ -81,6 +82,37 @@ Release Information =================== +23.1.1 (2023-03-28) +------------------- + +Backward-incompatible changes: +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Deprecations: +^^^^^^^^^^^^^ + +Changes: +^^^^^^^^ + +- Worked around an issue in OpenSSL 3.1.0 which caused `X509Extension.get_short_name` to raise an exception when no short name was known to OpenSSL. + `#1204 <https://github.com/pyca/pyopenssl/pull/1204>`_. + +23.1.0 (2023-03-24) +------------------- + +Backward-incompatible changes: +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Deprecations: +^^^^^^^^^^^^^ + +Changes: +^^^^^^^^ + +- ``cryptography`` maximum version has been increased to 40.0.x. +- Add ``OpenSSL.SSL.Connection.DTLSv1_get_timeout`` and ``OpenSSL.SSL.Connection.DTLSv1_handle_timeout`` + to support DTLS timeouts `#1180 <https://github.com/pyca/pyopenssl/pull/1180>`_. + 23.0.0 (2023-01-01) ------------------- @@ -105,7 +137,7 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Remove support for SSLv2 and SSLv3. -- The minimum ``cryptography`` version is now 38.0.x (and we now pin releases +- The minimum ``cryptography`` version is now 38.0.x (and we now pin releases against ``cryptography`` major versions to prevent future breakage) - The ``OpenSSL.crypto.X509StoreContextError`` exception has been refactored, changing its internal attributes. @@ -254,3 +286,5 @@ `Full changelog <https://pyopenssl.org/en/stable/changelog.html>`_. + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyOpenSSL-23.0.0/setup.py new/pyOpenSSL-23.1.1/setup.py --- old/pyOpenSSL-23.0.0/setup.py 2023-01-02 05:29:00.000000000 +0100 +++ new/pyOpenSSL-23.1.1/setup.py 2023-03-28 05:07:24.000000000 +0200 @@ -8,7 +8,6 @@ Installation script for the OpenSSL package. """ -import codecs import os import re @@ -21,10 +20,12 @@ def read_file(*parts): """ - Build an absolute path from *parts* and and return the contents of the + Build an absolute path from *parts* and return the contents of the resulting file. Assume UTF-8 encoding. """ - with codecs.open(os.path.join(HERE, *parts), "rb", "ascii") as f: + with open( + os.path.join(HERE, *parts), "r", encoding="utf-8", newline=None + ) as f: return f.read() @@ -97,7 +98,7 @@ package_dir={"": "src"}, install_requires=[ # Fix cryptographyMinimum in tox.ini when changing this! - "cryptography>=38.0.0,<40", + "cryptography>=38.0.0,<41", ], extras_require={ "test": ["flaky", "pretend", "pytest>=3.0.1"], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyOpenSSL-23.0.0/src/OpenSSL/SSL.py new/pyOpenSSL-23.1.1/src/OpenSSL/SSL.py --- old/pyOpenSSL-23.0.0/src/OpenSSL/SSL.py 2022-10-24 04:50:37.000000000 +0200 +++ new/pyOpenSSL-23.1.1/src/OpenSSL/SSL.py 2023-03-28 05:07:24.000000000 +0200 @@ -1916,7 +1916,6 @@ buf = _text_to_bytes_and_warn("buf", buf) with _ffi.from_buffer(buf) as data: - left_to_send = len(buf) total_sent = 0 @@ -2160,6 +2159,37 @@ if result < 0: self._raise_ssl_error(self._ssl, result) + def DTLSv1_get_timeout(self): + """ + Determine when the DTLS SSL object next needs to perform internal + processing due to the passage of time. + + When the returned number of seconds have passed, the + :meth:`DTLSv1_handle_timeout` method needs to be called. + + :return: The time left in seconds before the next timeout or `None` + if no timeout is currently active. + """ + ptv_sec = _ffi.new("time_t *") + ptv_usec = _ffi.new("long *") + if _lib.Cryptography_DTLSv1_get_timeout(self._ssl, ptv_sec, ptv_usec): + return ptv_sec[0] + (ptv_usec[0] / 1000000) + else: + return None + + def DTLSv1_handle_timeout(self): + """ + Handles any timeout events which have become pending on a DTLS SSL + object. + + :return: `True` if there was a pending timeout, `False` otherwise. + """ + result = _lib.DTLSv1_handle_timeout(self._ssl) + if result < 0: + self._raise_ssl_error(self._ssl, result) + else: + return bool(result) + def bio_shutdown(self): """ If the Connection was created with a memory BIO, this method can be diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyOpenSSL-23.0.0/src/OpenSSL/crypto.py new/pyOpenSSL-23.1.1/src/OpenSSL/crypto.py --- old/pyOpenSSL-23.0.0/src/OpenSSL/crypto.py 2023-01-02 03:57:32.000000000 +0100 +++ new/pyOpenSSL-23.1.1/src/OpenSSL/crypto.py 2023-03-28 05:07:36.000000000 +0200 @@ -904,7 +904,14 @@ """ obj = _lib.X509_EXTENSION_get_object(self._extension) nid = _lib.OBJ_obj2nid(obj) - return _ffi.string(_lib.OBJ_nid2sn(nid)) + # OpenSSL 3.1.0 has a bug where nid2sn returns NULL for NIDs that + # previously returned UNDEF. This is a workaround for that issue. + # https://github.com/openssl/openssl/commit/908ba3ed9adbb3df90f76 + buf = _lib.OBJ_nid2sn(nid) + if buf != _ffi.NULL: + return _ffi.string(buf) + else: + return b"UNDEF" def get_data(self) -> bytes: """ @@ -2556,7 +2563,6 @@ class PKCS7: - _pkcs7: Any def type_is_signed(self) -> bool: @@ -2920,7 +2926,6 @@ def raise_if_problem(self, exceptionType: Type[Exception] = Error) -> None: if self._problems: - # Flush the OpenSSL error queue try: _exception_from_error_queue(exceptionType) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyOpenSSL-23.0.0/src/OpenSSL/version.py new/pyOpenSSL-23.1.1/src/OpenSSL/version.py --- old/pyOpenSSL-23.0.0/src/OpenSSL/version.py 2023-01-02 05:29:00.000000000 +0100 +++ new/pyOpenSSL-23.1.1/src/OpenSSL/version.py 2023-03-28 05:07:36.000000000 +0200 @@ -17,7 +17,7 @@ "__version__", ] -__version__ = "23.0.0" +__version__ = "23.1.1" __title__ = "pyOpenSSL" __uri__ = "https://pyopenssl.org/" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyOpenSSL-23.0.0/src/pyOpenSSL.egg-info/PKG-INFO new/pyOpenSSL-23.1.1/src/pyOpenSSL.egg-info/PKG-INFO --- old/pyOpenSSL-23.0.0/src/pyOpenSSL.egg-info/PKG-INFO 2023-01-02 05:30:57.000000000 +0100 +++ new/pyOpenSSL-23.1.1/src/pyOpenSSL.egg-info/PKG-INFO 2023-03-28 05:09:15.000000000 +0200 @@ -1,12 +1,13 @@ Metadata-Version: 2.1 Name: pyOpenSSL -Version: 23.0.0 +Version: 23.1.1 Summary: Python wrapper module around the OpenSSL library Home-page: https://pyopenssl.org/ Author: The pyOpenSSL developers Author-email: cryptography-...@python.org License: Apache License, Version 2.0 Project-URL: Source, https://github.com/pyca/pyopenssl +Platform: UNKNOWN Classifier: Development Status :: 6 - Mature Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: Apache Software License @@ -81,6 +82,37 @@ Release Information =================== +23.1.1 (2023-03-28) +------------------- + +Backward-incompatible changes: +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Deprecations: +^^^^^^^^^^^^^ + +Changes: +^^^^^^^^ + +- Worked around an issue in OpenSSL 3.1.0 which caused `X509Extension.get_short_name` to raise an exception when no short name was known to OpenSSL. + `#1204 <https://github.com/pyca/pyopenssl/pull/1204>`_. + +23.1.0 (2023-03-24) +------------------- + +Backward-incompatible changes: +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Deprecations: +^^^^^^^^^^^^^ + +Changes: +^^^^^^^^ + +- ``cryptography`` maximum version has been increased to 40.0.x. +- Add ``OpenSSL.SSL.Connection.DTLSv1_get_timeout`` and ``OpenSSL.SSL.Connection.DTLSv1_handle_timeout`` + to support DTLS timeouts `#1180 <https://github.com/pyca/pyopenssl/pull/1180>`_. + 23.0.0 (2023-01-01) ------------------- @@ -105,7 +137,7 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Remove support for SSLv2 and SSLv3. -- The minimum ``cryptography`` version is now 38.0.x (and we now pin releases +- The minimum ``cryptography`` version is now 38.0.x (and we now pin releases against ``cryptography`` major versions to prevent future breakage) - The ``OpenSSL.crypto.X509StoreContextError`` exception has been refactored, changing its internal attributes. @@ -254,3 +286,5 @@ `Full changelog <https://pyopenssl.org/en/stable/changelog.html>`_. + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyOpenSSL-23.0.0/src/pyOpenSSL.egg-info/requires.txt new/pyOpenSSL-23.1.1/src/pyOpenSSL.egg-info/requires.txt --- old/pyOpenSSL-23.0.0/src/pyOpenSSL.egg-info/requires.txt 2023-01-02 05:30:57.000000000 +0100 +++ new/pyOpenSSL-23.1.1/src/pyOpenSSL.egg-info/requires.txt 2023-03-28 05:09:15.000000000 +0200 @@ -1,4 +1,4 @@ -cryptography<40,>=38.0.0 +cryptography<41,>=38.0.0 [docs] sphinx!=5.2.0,!=5.2.0.post0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyOpenSSL-23.0.0/tests/test_crypto.py new/pyOpenSSL-23.1.1/tests/test_crypto.py --- old/pyOpenSSL-23.0.0/tests/test_crypto.py 2022-12-16 17:05:37.000000000 +0100 +++ new/pyOpenSSL-23.1.1/tests/test_crypto.py 2023-03-28 05:07:36.000000000 +0200 @@ -1681,6 +1681,14 @@ exts = request.get_extensions() assert len(exts) == 2 + def test_undef_oid(self): + assert ( + X509Extension( + b"1.2.3.4.5.6.7", False, b"DER:05:00" + ).get_short_name() + == b"UNDEF" + ) + def test_add_extensions_wrong_args(self): """ `X509Req.add_extensions` raises `TypeError` if called with a @@ -2524,7 +2532,7 @@ b"-passin", b"pass:" + passwd, *extra, - ) + ).replace(b"\r\n", b"\n") assert recovered_key[-len(key) :] == key if cert: recovered_cert = _runopenssl( @@ -2536,7 +2544,7 @@ b"pass:" + passwd, b"-nokeys", *extra, - ) + ).replace(b"\r\n", b"\n") assert recovered_cert[-len(cert) :] == cert if ca: recovered_cert = _runopenssl( @@ -2548,7 +2556,7 @@ b"pass:" + passwd, b"-nokeys", *extra, - ) + ).replace(b"\r\n", b"\n") assert recovered_cert[-len(ca) :] == ca def verify_pkcs12_container(self, p12): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyOpenSSL-23.0.0/tests/test_ssl.py new/pyOpenSSL-23.1.1/tests/test_ssl.py --- old/pyOpenSSL-23.0.0/tests/test_ssl.py 2022-12-16 04:25:25.000000000 +0100 +++ new/pyOpenSSL-23.1.1/tests/test_ssl.py 2023-03-28 05:07:24.000000000 +0200 @@ -9,6 +9,7 @@ import gc import select import sys +import time import uuid from errno import ( EAFNOSUPPORT, @@ -359,11 +360,10 @@ # Copy stuff from each side's send buffer to the other side's # receive buffer. - for (read, write) in [ + for read, write in [ (client_conn, server_conn), (server_conn, client_conn), ]: - # Give the side a chance to generate some more bytes, or succeed. try: data = read.recv(2**16) @@ -1140,23 +1140,30 @@ self._load_verify_locations_test(None, capath) - def test_load_verify_directory_bytes_capath(self, tmpfile): + @pytest.mark.parametrize( + "pathtype", + [ + "ascii_path", + pytest.param( + "unicode_path", + marks=pytest.mark.skipif( + platform == "win32", + reason="Unicode paths not supported on Windows", + ), + ), + ], + ) + @pytest.mark.parametrize("argtype", ["bytes_arg", "unicode_arg"]) + def test_load_verify_directory_capath(self, pathtype, argtype, tmpfile): """ `Context.load_verify_locations` accepts a directory name as a `bytes` instance and uses the certificates within for verification purposes. """ - self._load_verify_directory_locations_capath( - tmpfile + NON_ASCII.encode(getfilesystemencoding()) - ) - - def test_load_verify_directory_unicode_capath(self, tmpfile): - """ - `Context.load_verify_locations` accepts a directory name as a `unicode` - instance and uses the certificates within for verification purposes. - """ - self._load_verify_directory_locations_capath( - tmpfile.decode(getfilesystemencoding()) + NON_ASCII - ) + if pathtype == "unicode_path": + tmpfile += NON_ASCII.encode(getfilesystemencoding()) + if argtype == "unicode_arg": + tmpfile = tmpfile.decode(getfilesystemencoding()) + self._load_verify_directory_locations_capath(tmpfile) def test_load_verify_locations_wrong_args(self): """ @@ -2838,23 +2845,24 @@ """ client_socket, server_socket = socket_pair() # Fill up the client's send buffer so Connection won't be able to write - # anything. Only write a single byte at a time so we can be sure we + # anything. Start by sending larger chunks (Windows Socket I/O is slow) + # and continue by writing a single byte at a time so we can be sure we # completely fill the buffer. Even though the socket API is allowed to # signal a short write via its return value it seems this doesn't # always happen on all platforms (FreeBSD and OS X particular) for the # very last bit of available buffer space. - msg = b"x" - for i in range(1024 * 1024 * 64): - try: - client_socket.send(msg) - except error as e: - if e.errno == EWOULDBLOCK: - break - raise - else: - pytest.fail( - "Failed to fill socket buffer, cannot test BIO want write" - ) + for msg in [b"x" * 65536, b"x"]: + for i in range(1024 * 1024 * 64): + try: + client_socket.send(msg) + except error as e: + if e.errno == EWOULDBLOCK: + break + raise # pragma: no cover + else: # pragma: no cover + pytest.fail( + "Failed to fill socket buffer, cannot test BIO want write" + ) ctx = Context(SSLv23_METHOD) conn = Connection(ctx, client_socket) @@ -3753,13 +3761,16 @@ """ If the connection is lost before an orderly SSL shutdown occurs, `OpenSSL.SSL.SysCallError` is raised with a message of - "Unexpected EOF". + "Unexpected EOF" (or WSAECONNRESET on Windows). """ server_conn, client_conn = loopback() client_conn.sock_shutdown(SHUT_RDWR) with pytest.raises(SysCallError) as err: server_conn.recv(1024) - assert err.value.args == (-1, "Unexpected EOF") + if platform == "win32": + assert err.value.args == (10054, "WSAECONNRESET") + else: + assert err.value.args == (-1, "Unexpected EOF") def _check_client_ca_list(self, func): """ @@ -4370,10 +4381,11 @@ # new versions of OpenSSL, this is unnecessary, but harmless, because the # DTLS state machine treats it like a network hiccup that duplicated a # packet, which DTLS is robust against. - def test_it_works_at_all(self): - # arbitrary number larger than any conceivable handshake volley - LARGE_BUFFER = 65536 + # Arbitrary number larger than any conceivable handshake volley. + LARGE_BUFFER = 65536 + + def test_it_works_at_all(self): s_ctx = Context(DTLS_METHOD) def generate_cookie(ssl): @@ -4404,7 +4416,7 @@ def pump_membio(label, source, sink): try: - chunk = source.bio_read(LARGE_BUFFER) + chunk = source.bio_read(self.LARGE_BUFFER) except WantReadError: return False # I'm not sure this check is needed, but I'm not sure it's *not* @@ -4484,3 +4496,39 @@ assert 0 < c.get_cleartext_mtu() < 500 except NotImplementedError: # OpenSSL 1.1.0 and earlier pass + + def test_timeout(self, monkeypatch): + c_ctx = Context(DTLS_METHOD) + c = Connection(c_ctx) + + # No timeout before the handshake starts. + assert c.DTLSv1_get_timeout() is None + assert c.DTLSv1_handle_timeout() is False + + # Start handshake and check there is data to send. + c.set_connect_state() + try: + c.do_handshake() + except SSL.WantReadError: + pass + assert c.bio_read(self.LARGE_BUFFER) + + # There should now be an active timeout. + seconds = c.DTLSv1_get_timeout() + assert seconds is not None + + # Handle the timeout and check there is data to send. + time.sleep(seconds) + assert c.DTLSv1_handle_timeout() is True + assert c.bio_read(self.LARGE_BUFFER) + + # After the maximum number of allowed timeouts is reached, + # DTLSv1_handle_timeout will return -1. + # + # Testing this directly is prohibitively time consuming as the timeout + # duration is doubled on each retry, so the best we can do is to mock + # this condition. + monkeypatch.setattr(_lib, "DTLSv1_handle_timeout", lambda x: -1) + + with pytest.raises(Error): + c.DTLSv1_handle_timeout() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyOpenSSL-23.0.0/tox.ini new/pyOpenSSL-23.1.1/tox.ini --- old/pyOpenSSL-23.0.0/tox.ini 2022-12-16 04:25:25.000000000 +0100 +++ new/pyOpenSSL-23.1.1/tox.ini 2023-03-28 05:07:36.000000000 +0200 @@ -12,6 +12,8 @@ PATH LD_LIBRARY_PATH TERM + RUSTUP_TOOLCHAIN + RUSTUP_HOME extras = test deps =