Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-asyncssh for openSUSE:Factory 
checked in at 2023-03-07 16:50:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-asyncssh (Old)
 and      /work/SRC/openSUSE:Factory/.python-asyncssh.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-asyncssh"

Tue Mar  7 16:50:07 2023 rev:22 rq:1069757 version:2.13.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-asyncssh/python-asyncssh.changes  
2023-01-25 17:54:09.111578837 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-asyncssh.new.31432/python-asyncssh.changes   
    2023-03-07 16:50:43.277706757 +0100
@@ -1,0 +2,11 @@
+Mon Mar  6 21:40:22 UTC 2023 - Dirk Müller <dmuel...@suse.com>
+
+- update to 2.13.1:
+  * Updated type definitions for mypy 1.0.0, removing a
+    dependency on implicit Optional types, and working around an
+    issue that could trigger a mypy internal error.
+  * Updated unit tests to avoid calculation of SHA-1 signatures,
+    which are no longer allowed in cryptography 39.0.0.
+- drop remove-sha1.patch (upstream)
+
+-------------------------------------------------------------------

Old:
----
  asyncssh-2.13.0.tar.gz
  remove-sha1.patch

New:
----
  asyncssh-2.13.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-asyncssh.spec ++++++
--- /var/tmp/diff_new_pack.zAGQ32/_old  2023-03-07 16:50:44.265711957 +0100
+++ /var/tmp/diff_new_pack.zAGQ32/_new  2023-03-07 16:50:44.273711999 +0100
@@ -19,7 +19,7 @@
 %define skip_python2 1
 %define skip_python36 1
 Name:           python-asyncssh
-Version:        2.13.0
+Version:        2.13.1
 Release:        0
 Summary:        Asynchronous SSHv2 client and server library
 License:        EPL-2.0 OR GPL-2.0-or-later
@@ -27,8 +27,6 @@
 URL:            https://github.com/ronf/asyncssh
 Source:         
https://files.pythonhosted.org/packages/source/a/asyncssh/asyncssh-%{version}.tar.gz
 Patch0:         gss_test.patch
-# PATCH-FIX-UPSTREAM remove-sha1.patch gh#ronf/asyncssh@fae5a9e8baad
-Patch1:         remove-sha1.patch
 # SECTION test requirements
 BuildRequires:  %{python_module bcrypt >= 3.1.3}
 BuildRequires:  %{python_module cryptography >= 2.8}

++++++ asyncssh-2.13.0.tar.gz -> asyncssh-2.13.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/PKG-INFO new/asyncssh-2.13.1/PKG-INFO
--- old/asyncssh-2.13.0/PKG-INFO        2022-12-27 23:37:03.350550200 +0100
+++ new/asyncssh-2.13.1/PKG-INFO        2023-02-19 00:03:44.881586800 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: asyncssh
-Version: 2.13.0
+Version: 2.13.1
 Summary: AsyncSSH: Asynchronous SSHv2 client and server library
 Home-page: http://asyncssh.timeheart.net
 Author: Ron Frederick
@@ -256,5 +256,3 @@
 __ http://groups.google.com/d/forum/asyncssh-announce
 __ http://groups.google.com/d/forum/asyncssh-dev
 __ http://groups.google.com/d/forum/asyncssh-users
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/agent.py 
new/asyncssh-2.13.1/asyncssh/agent.py
--- old/asyncssh-2.13.0/asyncssh/agent.py       2022-08-11 02:01:29.000000000 
+0200
+++ new/asyncssh-2.13.1/asyncssh/agent.py       2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2022 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2016-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -314,7 +314,8 @@
             raise ValueError('Unknown SSH agent response: %d' % resptype)
 
     async def add_keys(self, keylist: KeyPairListArg = (),
-                       passphrase: str = None, lifetime: int = None,
+                       passphrase: Optional[str] = None,
+                       lifetime: Optional[int] = None,
                        confirm: bool = False) -> None:
         """Add keys to the agent
 
@@ -394,8 +395,9 @@
             else:
                 raise ValueError('Unknown SSH agent response: %d' % resptype)
 
-    async def add_smartcard_keys(self, provider: str, pin: str = None,
-                                 lifetime: int = None,
+    async def add_smartcard_keys(self, provider: str,
+                                 pin: Optional[str] = None,
+                                 lifetime: Optional[int] = None,
                                  confirm: bool = False) -> None:
         """Store keys associated with a smart card in the agent
 
@@ -458,7 +460,7 @@
                 raise ValueError('Unknown SSH agent response: %d' % resptype)
 
     async def remove_smartcard_keys(self, provider: str,
-                                    pin: str = None) -> None:
+                                    pin: Optional[str] = None) -> None:
         """Remove keys associated with a smart card stored in the agent
 
            :param provider:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/channel.py 
new/asyncssh-2.13.1/asyncssh/channel.py
--- old/asyncssh-2.13.0/asyncssh/channel.py     2022-12-27 22:30:36.000000000 
+0100
+++ new/asyncssh-2.13.1/asyncssh/channel.py     2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2013-2022 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2013-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -75,7 +75,7 @@
 _signal_names = {v: k for (k, v) in _signal_numbers.items()}
 
 _ExitSignal = Tuple[str, bool, str, str]
-_RequestHandler = Callable[[SSHPacket], Optional[bool]]
+_RequestHandler = Optional[Callable[[SSHPacket], Optional[bool]]]
 
 
 class SSHChannel(Generic[AnyStr], SSHPacketHandler):
@@ -198,7 +198,7 @@
 
         return self._write_datatypes
 
-    def _cleanup(self, exc: Exception = None) -> None:
+    def _cleanup(self, exc: Optional[Exception] = None) -> None:
         """Clean up this channel"""
 
         if self._open_waiter:
@@ -322,7 +322,7 @@
             elif self._send_state == 'close_pending':
                 self._close_send()
 
-    def _flush_recv_buf(self, exc: Exception = None) -> None:
+    def _flush_recv_buf(self, exc: Optional[Exception] = None) -> None:
         """Flush as much data in the recv buffer as the application allows"""
 
         while self._recv_buf and not self._recv_paused:
@@ -847,8 +847,8 @@
 
         return self._send_buf_len
 
-    def set_write_buffer_limits(self, high: int = None,
-                                low: int = None) -> None:
+    def set_write_buffer_limits(self, high: Optional[int] = None,
+                                low: Optional[int] = None) -> None:
         """Set the high- and low-water limits for write flow control
 
            This method sets the limits used when deciding when to call
@@ -1623,8 +1623,8 @@
         self._env[name] = value
         return True
 
-    def _start_session(self, command: str = None,
-                       subsystem: str = None) -> bool:
+    def _start_session(self, command: Optional[str] = None,
+                       subsystem: Optional[str] = None) -> bool:
         """Tell the session what type of channel is being requested"""
 
         forced_command = \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/connection.py 
new/asyncssh-2.13.1/asyncssh/connection.py
--- old/asyncssh-2.13.0/asyncssh/connection.py  2022-12-27 22:30:36.000000000 
+0100
+++ new/asyncssh-2.13.1/asyncssh/connection.py  2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2013-2022 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2013-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -179,7 +179,6 @@
 _ProtocolFactory = Union[_ClientFactory, _ServerFactory]
 
 _Conn = TypeVar('_Conn', 'SSHClientConnection', 'SSHServerConnection')
-_ConnectionFactory = Callable[[], _Conn]
 
 class _TunnelProtocol(Protocol):
     """Base protocol for connections to tunnel SSH over"""
@@ -269,7 +268,7 @@
 
 async def _open_proxy(
         loop: asyncio.AbstractEventLoop, command: Sequence[str],
-        conn_factory: _ConnectionFactory[_Conn]) -> _Conn:
+        conn_factory: Callable[[], _Conn]) -> _Conn:
     """Open a tunnel running a proxy command"""
 
     class _ProxyCommandTunnel(asyncio.SubprocessProtocol):
@@ -283,12 +282,6 @@
             self._conn = conn_factory()
             self._close_event = asyncio.Event()
 
-        def set_protocol(self, protocol: asyncio.BaseProtocol) -> None:
-            """Changing the protocol is ignored here"""
-
-        def get_protocol(self) -> asyncio.BaseProtocol:
-            """Changing the protocol is ignored here"""
-
         def get_extra_info(self, name: str, default: Any = None) -> Any:
             """Return extra information associated with this tunnel"""
 
@@ -382,7 +375,7 @@
 async def _connect(options: 'SSHConnectionOptions',
                    loop: asyncio.AbstractEventLoop, flags: int,
                    sock: Optional[socket.socket],
-                   conn_factory: _ConnectionFactory[_Conn], msg: str) -> _Conn:
+                   conn_factory: Callable[[], _Conn], msg: str) -> _Conn:
     """Make outbound TCP or SSH tunneled connection"""
 
     host = options.host
@@ -461,7 +454,7 @@
                   loop: asyncio.AbstractEventLoop, flags: int,
                   backlog: int, sock: Optional[socket.socket],
                   reuse_address: bool, reuse_port: bool,
-                  conn_factory: _ConnectionFactory[_Conn],
+                  conn_factory: Callable[[], _Conn],
                   msg: str) -> 'SSHAcceptor':
     """Make inbound TCP or SSH tunneled listener"""
 
@@ -1053,7 +1046,8 @@
             self.internal_error(error_logger=task_logger)
 
     def create_task(self, coro: Awaitable[None],
-                    task_logger: SSHLogger = None) -> 'asyncio.Task[None]':
+                    task_logger: Optional[SSHLogger] = None) -> \
+            'asyncio.Task[None]':
         """Create an asynchronous task which catches and reports errors"""
 
         task = asyncio.ensure_future(coro)
@@ -1543,7 +1537,7 @@
         return True
 
     def send_packet(self, pkttype: int, *args: bytes,
-                    handler: SSHPacketLogger = None) -> None:
+                    handler: Optional[SSHPacketLogger] = None) -> None:
         """Send an SSH packet"""
 
         if (self._auth_complete and self._kex_complete and
@@ -1825,7 +1819,7 @@
                 self._get_userauth_request_packet(method, args))
 
     def send_userauth_packet(self, pkttype: int, *args: bytes,
-                             handler: SSHPacketLogger = None,
+                             handler: Optional[SSHPacketLogger] = None,
                              trivial: bool = True) -> None:
         """Send a user authentication packet"""
 
@@ -4245,9 +4239,10 @@
 
     @async_context_manager
     async def create_server(
-            self, session_factory: TCPListenerFactory, listen_host: str,
-            listen_port: int, *, encoding: Optional[str] = None,
-            errors: str = 'strict', window: int = _DEFAULT_WINDOW,
+            self, session_factory: TCPListenerFactory[AnyStr],
+            listen_host: str, listen_port: int, *,
+            encoding: Optional[str] = None, errors: str = 'strict',
+            window: int = _DEFAULT_WINDOW,
             max_pktsize: int = _DEFAULT_MAX_PKTSIZE) -> SSHListener:
         """Create a remote SSH TCP listener
 
@@ -7079,7 +7074,7 @@
                 server_host_key_algs: _AlgsArg = (),
                 username: DefTuple[str] = (), password: Optional[str] = None,
                 client_host_keysign: DefTuple[KeySignPath] = (),
-                client_host_keys: _ClientKeysArg = None,
+                client_host_keys: Optional[_ClientKeysArg] = None,
                 client_host_certs: Sequence[FilePath] = (),
                 client_host: Optional[str] = None,
                 client_username: DefTuple[str] = (),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/crypto/dsa.py 
new/asyncssh-2.13.1/asyncssh/crypto/dsa.py
--- old/asyncssh-2.13.0/asyncssh/crypto/dsa.py  2022-01-23 17:15:42.000000000 
+0100
+++ new/asyncssh-2.13.1/asyncssh/crypto/dsa.py  2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2014-2021 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2014-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -36,7 +36,8 @@
     """Base class for shim around PyCA for DSA keys"""
 
     def __init__(self, pyca_key: PyCAKey, params: dsa.DSAParameterNumbers,
-                 pub: dsa.DSAPublicNumbers, priv: dsa.DSAPrivateNumbers = 
None):
+                 pub: dsa.DSAPublicNumbers,
+                 priv: Optional[dsa.DSAPrivateNumbers] = None):
         super().__init__(pyca_key)
 
         self._params = params
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/crypto/ed.py 
new/asyncssh-2.13.1/asyncssh/crypto/ed.py
--- old/asyncssh-2.13.0/asyncssh/crypto/ed.py   2022-08-11 02:01:29.000000000 
+0200
+++ new/asyncssh-2.13.1/asyncssh/crypto/ed.py   2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2019-2021 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2019-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -50,7 +50,8 @@
     class _EdDSAKey(CryptoKey):
         """Base class for shim around PyCA for EdDSA keys"""
 
-        def __init__(self, pyca_key: PyCAKey, pub: bytes, priv: bytes = None):
+        def __init__(self, pyca_key: PyCAKey, pub: bytes,
+                     priv: Optional[bytes] = None):
             super().__init__(pyca_key)
 
             self._pub = pub
@@ -146,7 +147,7 @@
     class _EdDSANaclKey:
         """Base class for shim around libnacl for EdDSA keys"""
 
-        def __init__(self, pub: bytes, priv: bytes = None):
+        def __init__(self, pub: bytes, priv: Optional[bytes] = None):
             self._pub = pub
             self._priv = priv
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/crypto/misc.py 
new/asyncssh-2.13.1/asyncssh/crypto/misc.py
--- old/asyncssh-2.13.0/asyncssh/crypto/misc.py 2022-01-23 17:15:42.000000000 
+0100
+++ new/asyncssh-2.13.1/asyncssh/crypto/misc.py 2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2017-2021 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2017-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -60,5 +60,11 @@
     def sign(self, data: bytes, hash_name: str = '') -> bytes:
         """Sign a block of data"""
 
+        # pylint: disable=no-self-use
+        raise RuntimeError # pragma: no cover
+
     def verify(self, data: bytes, sig: bytes, hash_name: str = '') -> bool:
         """Verify the signature on a block of data"""
+
+        # pylint: disable=no-self-use
+        raise RuntimeError # pragma: no cover
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/crypto/rsa.py 
new/asyncssh-2.13.1/asyncssh/crypto/rsa.py
--- old/asyncssh-2.13.0/asyncssh/crypto/rsa.py  2022-01-23 17:15:42.000000000 
+0100
+++ new/asyncssh-2.13.1/asyncssh/crypto/rsa.py  2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2014-2021 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2014-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -38,7 +38,7 @@
     """Base class for shim around PyCA for RSA keys"""
 
     def __init__(self, pyca_key: PyCAKey, pub: rsa.RSAPublicNumbers,
-                 priv: rsa.RSAPrivateNumbers = None):
+                 priv: Optional[rsa.RSAPrivateNumbers] = None):
         super().__init__(pyca_key)
 
         self._pub = pub
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/dsa.py 
new/asyncssh-2.13.1/asyncssh/dsa.py
--- old/asyncssh-2.13.0/asyncssh/dsa.py 2022-08-11 02:01:29.000000000 +0200
+++ new/asyncssh-2.13.1/asyncssh/dsa.py 2023-02-18 23:52:45.000000000 +0100
@@ -41,7 +41,7 @@
     _key: Union[DSAPrivateKey, DSAPublicKey]
 
     algorithm = b'ssh-dss'
-    default_hash_name = 'sha1'
+    default_x509_hash = 'sha256'
     pem_name = b'DSA'
     pkcs8_oid = ObjectIdentifier('1.2.840.10040.4.1')
     sig_algorithms = (algorithm,)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/ecdsa.py 
new/asyncssh-2.13.1/asyncssh/ecdsa.py
--- old/asyncssh-2.13.0/asyncssh/ecdsa.py       2022-01-23 17:15:42.000000000 
+0100
+++ new/asyncssh-2.13.1/asyncssh/ecdsa.py       2023-02-18 23:52:45.000000000 
+0100
@@ -54,7 +54,7 @@
 
     _key: Union[ECDSAPrivateKey, ECDSAPublicKey]
 
-    default_hash_name = 'sha256'
+    default_x509_hash = 'sha256'
     pem_name = b'EC'
     pkcs8_oid = ObjectIdentifier('1.2.840.10045.2.1')
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/forward.py 
new/asyncssh-2.13.1/asyncssh/forward.py
--- old/asyncssh-2.13.0/asyncssh/forward.py     2022-04-03 17:10:54.000000000 
+0200
+++ new/asyncssh-2.13.1/asyncssh/forward.py     2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2013-2021 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2013-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -106,7 +106,7 @@
         """Handle session start"""
 
     def data_received(self, data: bytes,
-                      datatype: int = None) -> None:
+                      datatype: Optional[int] = None) -> None:
         """Handle incoming data from the transport"""
 
         # pylint: disable=unused-argument
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/gss.py 
new/asyncssh-2.13.1/asyncssh/gss.py
--- old/asyncssh-2.13.0/asyncssh/gss.py 2022-08-11 02:01:29.000000000 +0200
+++ new/asyncssh-2.13.1/asyncssh/gss.py 2023-02-18 23:52:45.000000000 +0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2017-2021 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2017-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -22,6 +22,8 @@
 
 import sys
 
+from typing import Optional
+
 try:
     # pylint: disable=unused-import
 
@@ -37,7 +39,8 @@
     class GSSError(ValueError): # type: ignore
         """Stub class for reporting that GSS is not available"""
 
-        def __init__(self, maj_code: int, min_code: int, token: bytes = None):
+        def __init__(self, maj_code: int, min_code: int,
+                 token: Optional[bytes] = None):
             super().__init__('GSS not available')
 
             self.maj_code = maj_code
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/gss_win32.py 
new/asyncssh-2.13.1/asyncssh/gss_win32.py
--- old/asyncssh-2.13.0/asyncssh/gss_win32.py   2022-04-23 23:08:49.000000000 
+0200
+++ new/asyncssh-2.13.1/asyncssh/gss_win32.py   2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2017-2022 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2017-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -194,7 +194,7 @@
     """Class for reporting GSS errors"""
 
     def __init__(self, maj_code: int = 0, min_code: int = 0,
-                 token: bytes = None, details: str = ''):
+                 token: Optional[bytes] = None, details: str = ''):
         super().__init__(details)
 
         self.maj_code = maj_code
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/pkcs11.py 
new/asyncssh-2.13.1/asyncssh/pkcs11.py
--- old/asyncssh-2.13.0/asyncssh/pkcs11.py      2022-01-23 17:15:42.000000000 
+0100
+++ new/asyncssh-2.13.1/asyncssh/pkcs11.py      2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2020-2021 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2020-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -68,7 +68,7 @@
         _key_type = 'pkcs11'
 
         def __init__(self, session: 'SSHPKCS11Session', privkey: PrivateKey,
-                     pubkey: SSHKey, cert: SSHCertificate = None):
+                     pubkey: SSHKey, cert: Optional[SSHCertificate] = None):
             super().__init__(pubkey.algorithm, pubkey.algorithm,
                              pubkey.sig_algorithms, pubkey.sig_algorithms,
                              pubkey.public_data, privkey.label, cert,
@@ -197,12 +197,12 @@
             return keys
 
 
-    def load_pkcs11_keys(provider: str, pin: str = None, *,
+    def load_pkcs11_keys(provider: str, pin: Optional[str] = None, *,
                          load_certs: bool = True,
-                         token_label: str = None,
-                         token_serial: BytesOrStr = None,
-                         key_label: str = None,
-                         key_id: BytesOrStr = None) -> \
+                         token_label: Optional[str] = None,
+                         token_serial: Optional[BytesOrStr] = None,
+                         key_label: Optional[str] = None,
+                         key_id: Optional[BytesOrStr] = None) -> \
             Sequence[SSHPKCS11KeyPair]:
         """Load PIV keys and X.509 certificates from a PKCS#11 token
 
@@ -278,12 +278,12 @@
 
         return keys
 else: # pragma: no cover
-    def load_pkcs11_keys(provider: str, pin: str = None, *,
+    def load_pkcs11_keys(provider: str, pin: Optional[str] = None, *,
                          load_certs: bool = True,
-                         token_label: str = None,
-                         token_serial: BytesOrStr = None,
-                         key_label: str = None,
-                         key_id: BytesOrStr = None) -> \
+                         token_label: Optional[str] = None,
+                         token_serial: Optional[BytesOrStr] = None,
+                         key_label: Optional[str] = None,
+                         key_id: Optional[BytesOrStr] = None) -> \
             Sequence['SSHPKCS11KeyPair']:
         """Report that PKCS#11 support is not available"""
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/process.py 
new/asyncssh-2.13.1/asyncssh/process.py
--- old/asyncssh-2.13.0/asyncssh/process.py     2022-12-27 22:30:36.000000000 
+0100
+++ new/asyncssh-2.13.1/asyncssh/process.py     2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2021 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2016-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -101,6 +101,8 @@
     def write_exception(self, exc: Exception) -> None:
         """Write exception (break, signal, terminal size change)"""
 
+        return # pragma: no cover
+
     def write_eof(self) -> None:
         """Close output when end of file is received"""
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/public_key.py 
new/asyncssh-2.13.1/asyncssh/public_key.py
--- old/asyncssh-2.13.0/asyncssh/public_key.py  2022-12-27 22:30:36.000000000 
+0100
+++ new/asyncssh-2.13.1/asyncssh/public_key.py  2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2013-2022 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2013-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -240,7 +240,7 @@
     sig_algorithms: Sequence[bytes] = ()
     x509_algorithms: Sequence[bytes] = ()
     all_sig_algorithms: Set[bytes] = set()
-    default_hash_name: str = ''
+    default_x509_hash: str = ''
     pem_name: bytes = b''
     pkcs8_oid: Optional[ObjectIdentifier] = None
     use_executor: bool = False
@@ -385,7 +385,7 @@
                              'valid after time')
 
         if hash_name == ():
-            hash_name = key.default_hash_name
+            hash_name = key.default_x509_hash
 
         if comment == ():
             comment = key.get_comment_bytes()
@@ -633,22 +633,18 @@
         result.set_filename(self._filename)
         return result
 
-    def generate_user_certificate(self, user_key: 'SSHKey', key_id: str,
-                                  version: int = 1, serial: int = 0,
-                                  principals: _CertPrincipals = (),
-                                  valid_after: _Time = 0,
-                                  valid_before: _Time = 0xffffffffffffffff,
-                                  force_command: str = None,
-                                  source_address: Sequence[str] = None,
-                                  permit_x11_forwarding: bool = True,
-                                  permit_agent_forwarding: bool = True,
-                                  permit_port_forwarding: bool = True,
-                                  permit_pty: bool = True,
-                                  permit_user_rc: bool = True,
-                                  touch_required: bool = True,
-                                  sig_alg: DefTuple[str] = (),
-                                  comment: DefTuple[_Comment] = ()) -> \
-            'SSHOpenSSHCertificate':
+    def generate_user_certificate(
+            self, user_key: 'SSHKey', key_id: str, version: int = 1,
+            serial: int = 0, principals: _CertPrincipals = (),
+            valid_after: _Time = 0, valid_before: _Time = 0xffffffffffffffff,
+            force_command: Optional[str] = None,
+            source_address: Optional[Sequence[str]] = None,
+            permit_x11_forwarding: bool = True,
+            permit_agent_forwarding: bool = True,
+            permit_port_forwarding: bool = True, permit_pty: bool = True,
+            permit_user_rc: bool = True, touch_required: bool = True,
+            sig_alg: DefTuple[str] = (),
+            comment: DefTuple[_Comment] = ()) -> 'SSHOpenSSHCertificate':
         """Generate a new SSH user certificate
 
            This method returns an SSH user certifcate with the requested
@@ -821,16 +817,14 @@
                                           principals, valid_after,
                                           valid_before, {}, sig_alg, comment)
 
-    def generate_x509_user_certificate(self, user_key: 'SSHKey', subject: str,
-                                       issuer: str = None, serial: int = None,
-                                       principals: _CertPrincipals = (),
-                                       valid_after: _Time = 0,
-                                       valid_before: _Time = 
0xffffffffffffffff,
-                                       purposes: X509CertPurposes = \
-                                            'secureShellClient',
-                                       hash_alg: DefTuple[str] = (),
-                                       comment: DefTuple[_Comment] = ()) -> \
-            'SSHX509Certificate':
+    def generate_x509_user_certificate(
+            self, user_key: 'SSHKey', subject: str,
+            issuer: Optional[str] = None, serial: Optional[int] = None,
+            principals: _CertPrincipals = (), valid_after: _Time = 0,
+            valid_before: _Time = 0xffffffffffffffff,
+            purposes: X509CertPurposes = 'secureShellClient',
+            hash_alg: DefTuple[str] = (),
+            comment: DefTuple[_Comment] = ()) -> 'SSHX509Certificate':
         """Generate a new X.509 user certificate
 
            This method returns an X.509 user certifcate with the requested
@@ -894,16 +888,14 @@
                                                purposes, principals, (),
                                                hash_alg, comment)
 
-    def generate_x509_host_certificate(self, host_key: 'SSHKey', subject: str,
-                                       issuer: str = None, serial: int = None,
-                                       principals: _CertPrincipals = (),
-                                       valid_after: _Time = 0,
-                                       valid_before: _Time = 
0xffffffffffffffff,
-                                       purposes: X509CertPurposes = \
-                                            'secureShellServer',
-                                       hash_alg: DefTuple[str] = (),
-                                       comment: DefTuple[_Comment] = ()) -> \
-            'SSHX509Certificate':
+    def generate_x509_host_certificate(
+            self, host_key: 'SSHKey', subject: str,
+            issuer: Optional[str] = None, serial: Optional[int] = None,
+            principals: _CertPrincipals = (), valid_after: _Time = 0,
+            valid_before: _Time = 0xffffffffffffffff,
+            purposes: X509CertPurposes = 'secureShellServer',
+            hash_alg: DefTuple[str] = (),
+            comment: DefTuple[_Comment] = ()) -> 'SSHX509Certificate':
         """Generate a new X.509 host certificate
 
            This method returns a X.509 host certifcate with the requested
@@ -1376,6 +1368,8 @@
                   comment: _Comment) -> 'SSHCertificate':
         """Construct an SSH certificate from packetized data"""
 
+        raise NotImplementedError
+
     def __eq__(self, other: object) -> bool:
         return (isinstance(other, type(self)) and
                 self.public_data == other.public_data)
@@ -1617,7 +1611,7 @@
     @classmethod
     def construct(cls, packet: SSHPacket, algorithm: bytes,
                   key_handler: Optional[Type[SSHKey]],
-                  comment: _Comment) -> 'SSHCertificate':
+                  comment: _Comment) -> 'SSHOpenSSHCertificate':
         """Construct an SSH certificate from packetized data"""
 
         assert key_handler is not None
@@ -1892,6 +1886,14 @@
                 pass
 
     @classmethod
+    def construct(cls, packet: SSHPacket, algorithm: bytes,
+                  key_handler: Optional[Type[SSHKey]],
+                  comment: _Comment) -> 'SSHX509Certificate':
+        """Construct an SSH X.509 certificate from packetized data"""
+
+        raise RuntimeError # pragma: no cover
+
+    @classmethod
     def generate(cls, signing_key: 'SSHKey', key: 'SSHKey', subject: str,
                  issuer: Optional[str], serial: Optional[int],
                  valid_after: int, valid_before: int, ca: bool,
@@ -2047,7 +2049,8 @@
                  sig_algorithms: Sequence[bytes],
                  host_key_algorithms: Sequence[bytes],
                  public_data: bytes, comment: _Comment,
-                 cert: SSHCertificate = None, filename: bytes = None,
+                 cert: Optional[SSHCertificate] = None,
+                 filename: Optional[bytes] = None,
                  use_executor: bool = False):
         self.key_algorithm = algorithm
         self.key_public_data = public_data
@@ -2198,6 +2201,9 @@
     def sign(self, data: bytes) -> bytes:
         """Sign a block of data with this private key"""
 
+        # pylint: disable=no-self-use
+        raise RuntimeError # pragma: no cover
+
 
 class SSHLocalKeyPair(SSHKeyPair):
     """Class which holds a local asymmetric key pair
@@ -2210,8 +2216,8 @@
 
     _key_type = 'local'
 
-    def __init__(self, key: SSHKey, pubkey: SSHKey = None,
-                 cert: SSHCertificate = None):
+    def __init__(self, key: SSHKey, pubkey: Optional[SSHKey] = None,
+                 cert: Optional[SSHCertificate] = None):
         if pubkey and pubkey.public_data != key.public_data:
             raise ValueError('Public key mismatch')
 
@@ -2883,7 +2889,8 @@
 
 def register_public_key_alg(algorithm: bytes, handler: Type[SSHKey],
                             default: bool,
-                            sig_algorithms: Sequence[bytes] = None) -> None:
+                            sig_algorithms: Optional[Sequence[bytes]] = \
+                                None) -> None:
     """Register a new public key algorithm"""
 
     if not sig_algorithms:
@@ -3717,7 +3724,8 @@
     return result
 
 
-def load_resident_keys(pin: str, *, application: str = 'ssh:', user: str = 
None,
+def load_resident_keys(pin: str, *, application: str = 'ssh:',
+                       user: Optional[str] = None,
                        touch_required: bool = True) -> Sequence[SSHKey]:
     """Load keys resident on attached FIDO2 security keys
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/rsa.py 
new/asyncssh-2.13.1/asyncssh/rsa.py
--- old/asyncssh-2.13.0/asyncssh/rsa.py 2022-03-26 23:53:06.000000000 +0100
+++ new/asyncssh-2.13.1/asyncssh/rsa.py 2023-02-18 23:52:45.000000000 +0100
@@ -52,7 +52,7 @@
     _key: Union[RSAPrivateKey, RSAPublicKey]
 
     algorithm = b'ssh-rsa'
-    default_hash_name = 'sha256'
+    default_x509_hash = 'sha256'
     pem_name = b'RSA'
     pkcs8_oid = ObjectIdentifier('1.2.840.113549.1.1.1')
     sig_algorithms = (b'rsa-sha2-256', b'rsa-sha2-512',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/saslprep.py 
new/asyncssh-2.13.1/asyncssh/saslprep.py
--- old/asyncssh-2.13.0/asyncssh/saslprep.py    2022-01-23 17:15:42.000000000 
+0100
+++ new/asyncssh-2.13.1/asyncssh/saslprep.py    2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2013-2021 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2013-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -31,7 +31,7 @@
 # pylint: disable=deprecated-module
 import stringprep
 # pylint: enable=deprecated-module
-from typing import Callable, Sequence
+from typing import Callable, Optional, Sequence
 import unicodedata
 
 
@@ -60,8 +60,10 @@
         raise SASLPrepError('RandALCat character not at both start and end')
 
 
-def _stringprep(s: str, check_unassigned: bool, mapping: Callable[[str], str],
-                normalization: str, prohibited: Sequence[Callable[[str], 
bool]],
+def _stringprep(s: str, check_unassigned: bool,
+                mapping: Optional[Callable[[str], str]],
+                normalization: str,
+                prohibited: Sequence[Callable[[str], bool]],
                 bidi: bool) -> str:
     """Implement a stringprep profile as defined in RFC 3454"""
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/sftp.py 
new/asyncssh-2.13.1/asyncssh/sftp.py
--- old/asyncssh-2.13.0/asyncssh/sftp.py        2022-12-27 22:30:36.000000000 
+0100
+++ new/asyncssh-2.13.1/asyncssh/sftp.py        2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2015-2022 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2015-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -141,9 +141,9 @@
 _SFTPOSAttrs = Union[os.stat_result, 'SFTPAttrs']
 _SFTPOSVFSAttrs = Union[os.statvfs_result, 'SFTPVFSAttrs']
 
-_SFTPOnErrorHandler = Callable[[Callable, bytes, OptExcInfo], None]
-_SFTPPacketHandler = Callable[['SFTPServerHandler', SSHPacket],
-                              Awaitable[object]]
+_SFTPOnErrorHandler = Optional[Callable[[Callable, bytes, OptExcInfo], None]]
+_SFTPPacketHandler = Optional[Callable[['SFTPServerHandler', SSHPacket],
+                              Awaitable[object]]]
 
 SFTPErrorHandler = Union[None, Literal[False], Callable[[Exception], None]]
 SFTPProgressHandler = Optional[Callable[[bytes, bytes, int, int], None]]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/sk_ecdsa.py 
new/asyncssh-2.13.1/asyncssh/sk_ecdsa.py
--- old/asyncssh-2.13.0/asyncssh/sk_ecdsa.py    2022-01-23 17:15:42.000000000 
+0100
+++ new/asyncssh-2.13.1/asyncssh/sk_ecdsa.py    2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2019-2021 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2019-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -45,7 +45,7 @@
 
     def __init__(self, curve_id: bytes, public_value: bytes,
                  application: bytes, flags: int = 0,
-                 key_handle: bytes = None, reserved: bytes = b''):
+                 key_handle: Optional[bytes] = None, reserved: bytes = b''):
         super().__init__(ECDSAPublicKey.construct(curve_id, public_value))
 
         self.algorithm = b'sk-ecdsa-sha2-' + curve_id + b'@openssh.com'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/sk_eddsa.py 
new/asyncssh-2.13.1/asyncssh/sk_eddsa.py
--- old/asyncssh-2.13.0/asyncssh/sk_eddsa.py    2022-01-23 17:15:42.000000000 
+0100
+++ new/asyncssh-2.13.1/asyncssh/sk_eddsa.py    2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2019-2021 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2019-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -46,7 +46,7 @@
     use_executor = True
 
     def __init__(self, public_value: bytes, application: bytes,
-                 flags: int = 0, key_handle: bytes = None,
+                 flags: int = 0, key_handle: Optional[bytes] = None,
                  reserved: bytes = b''):
         super().__init__(EdDSAPublicKey.construct(b'ed25519', public_value))
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/socks.py 
new/asyncssh-2.13.1/asyncssh/socks.py
--- old/asyncssh-2.13.0/asyncssh/socks.py       2022-01-23 17:15:42.000000000 
+0100
+++ new/asyncssh-2.13.1/asyncssh/socks.py       2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2018-2021 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2018-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -24,6 +24,7 @@
 from typing import TYPE_CHECKING, Callable, Optional
 
 from .forward import SSHForwarderCoro, SSHLocalForwarder
+from .session import DataType
 
 
 if TYPE_CHECKING:
@@ -212,13 +213,13 @@
         self._send_socks5_ok()
         self._connect()
 
-    def data_received(self, data: bytes, datatype: int = None) -> None:
+    def data_received(self, data: bytes, datatype: DataType = None) -> None:
         """Handle incoming data from the SOCKS client"""
 
         if self._recv_handler:
             self._inpbuf += data
 
-            while self._recv_handler:
+            while self._recv_handler: # type: ignore[truthy-function]
                 if self._bytes_needed < 0:
                     idx = self._inpbuf.find(b'\0')
                     if idx >= 0:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/subprocess.py 
new/asyncssh-2.13.1/asyncssh/subprocess.py
--- old/asyncssh-2.13.0/asyncssh/subprocess.py  2022-01-23 17:15:42.000000000 
+0100
+++ new/asyncssh-2.13.1/asyncssh/subprocess.py  2023-02-18 23:52:45.000000000 
+0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2019-2021 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2019-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -94,8 +94,8 @@
 
         return self._chan.get_write_buffer_size()
 
-    def set_write_buffer_limits(self, high: int = None,
-                                low: int = None) -> None:
+    def set_write_buffer_limits(self, high: Optional[int] = None,
+                                low: Optional[int] = None) -> None:
         """Set the high- and low-water limits for write flow control"""
 
         self._chan.set_write_buffer_limits(high, low)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/version.py 
new/asyncssh-2.13.1/asyncssh/version.py
--- old/asyncssh-2.13.0/asyncssh/version.py     2022-12-27 23:15:40.000000000 
+0100
+++ new/asyncssh-2.13.1/asyncssh/version.py     2023-02-18 23:52:53.000000000 
+0100
@@ -26,4 +26,4 @@
 
 __url__ = 'http://asyncssh.timeheart.net'
 
-__version__ = '2.13.0'
+__version__ = '2.13.1'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh/x11.py 
new/asyncssh-2.13.1/asyncssh/x11.py
--- old/asyncssh-2.13.0/asyncssh/x11.py 2022-02-23 16:01:27.000000000 +0100
+++ new/asyncssh-2.13.1/asyncssh/x11.py 2023-02-18 23:52:45.000000000 +0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2021 by Ron Frederick <r...@timeheart.net> and others.
+# Copyright (c) 2016-2023 by Ron Frederick <r...@timeheart.net> and others.
 #
 # This program and the accompanying materials are made available under
 # the terms of the Eclipse Public License v2.0 which accompanies this
@@ -242,7 +242,7 @@
         if self._recv_handler:
             self._inpbuf += data
 
-            while self._recv_handler:
+            while self._recv_handler: # type: ignore[truthy-function]
                 if len(self._inpbuf) >= self._bytes_needed:
                     data = self._inpbuf[:self._bytes_needed]
                     self._inpbuf = self._inpbuf[self._bytes_needed:]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/asyncssh.egg-info/PKG-INFO 
new/asyncssh-2.13.1/asyncssh.egg-info/PKG-INFO
--- old/asyncssh-2.13.0/asyncssh.egg-info/PKG-INFO      2022-12-27 
23:37:03.000000000 +0100
+++ new/asyncssh-2.13.1/asyncssh.egg-info/PKG-INFO      2023-02-19 
00:03:44.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: asyncssh
-Version: 2.13.0
+Version: 2.13.1
 Summary: AsyncSSH: Asynchronous SSHv2 client and server library
 Home-page: http://asyncssh.timeheart.net
 Author: Ron Frederick
@@ -256,5 +256,3 @@
 __ http://groups.google.com/d/forum/asyncssh-announce
 __ http://groups.google.com/d/forum/asyncssh-dev
 __ http://groups.google.com/d/forum/asyncssh-users
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/docs/changes.rst 
new/asyncssh-2.13.1/docs/changes.rst
--- old/asyncssh-2.13.0/docs/changes.rst        2022-12-27 23:22:00.000000000 
+0100
+++ new/asyncssh-2.13.1/docs/changes.rst        2023-02-18 23:58:25.000000000 
+0100
@@ -3,6 +3,16 @@
 Change Log
 ==========
 
+Release 2.13.1 (18 Feb 2023)
+----------------------------
+
+* Updated type definitions for mypy 1.0.0, removing a dependency on
+  implicit Optional types, and working around an issue that could
+  trigger a mypy internal error.
+
+* Updated unit tests to avoid calculation of SHA-1 signatures, which
+  are no longer allowed in cryptography 39.0.0.
+
 Release 2.13.0 (27 Dec 2022)
 ----------------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/asyncssh-2.13.0/tests/test_public_key.py 
new/asyncssh-2.13.1/tests/test_public_key.py
--- old/asyncssh-2.13.0/tests/test_public_key.py        2022-08-11 
02:01:29.000000000 +0200
+++ new/asyncssh-2.13.1/tests/test_public_key.py        2023-02-18 
23:52:45.000000000 +0100
@@ -2358,7 +2358,7 @@
         privkey = get_test_key('ssh-rsa')
         pubkey = privkey.convert_to_public()
 
-        for hash_alg in ('sha1', 'sha256', 'sha512'):
+        for hash_alg in ('sha256', 'sha512'):
             cert = privkey.generate_x509_user_certificate(
                 pubkey, 'OU=user', hash_alg=hash_alg)
 

Reply via email to