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 <[email protected]>
+
+- 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 <[email protected]> and others.
+# Copyright (c) 2016-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2013-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2013-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2014-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2019-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2017-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2014-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2013-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2017-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2017-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2020-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2016-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2013-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2013-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2015-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2019-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2019-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2018-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2019-2023 by Ron Frederick <[email protected]> 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 <[email protected]> and others.
+# Copyright (c) 2016-2023 by Ron Frederick <[email protected]> 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)