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)