Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(deps): update dependency ssh.net to v2024 #191

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented Jul 3, 2024

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
ssh.net 2020.0.2 -> 2024.2.0 age adoption passing confidence

Release Notes

sshnet/SSH.NET (ssh.net)

v2024.2.0

Compare Source

New features

  • Add support for PKCS#8 private key files
  • Add additional async overloads on SftpClient
  • Add support for OpenSSH certificates
  • Add support for chacha20-poly1305@​openssh.com cipher algorithm
  • Increase support for aes*[email protected] and [email protected] on lower targets

This release takes a dependency on BouncyCastle in an effort to eliminate primitive crypto code from the library. It also takes a dependency on System.Formats.Asn1 on lower targets.

Breaking changes

  • A number of legacy algorithms were dropped in #​1442
  • The implementation of DSA was changed from using handwritten code to using System.Cryptography in #​1458. See the PR description for behaviour changes this could cause.
  • Renci.SshNet.Common.BigInteger was deleted and its uses replaced with System.Numerics.BigInteger in #​1469
  • Renci.SshNet.Common.DerData and Renci.SshNet.Common.ObjectIdentifier were deleted in #​1490 and uses replaced with System.Formats.Asn1
  • See the full API diff at the end

What's Changed

New Contributors

Full Changelog: sshnet/SSH.NET@2024.1.0...2024.2.0

API diff
namespace Renci.SshNet
{
     public interface IBaseClient : System.IDisposable
     {
+        event System.EventHandler<Renci.SshNet.Common.SshIdentificationEventArgs>? ServerIdentificationReceived;
     }

     public interface ISftpClient : Renci.SshNet.IBaseClient, System.IDisposable
     {
+        System.Threading.Tasks.Task ChangeDirectoryAsync(string path, System.Threading.CancellationToken cancellationToken = default);
+        System.Threading.Tasks.Task CreateDirectoryAsync(string path, System.Threading.CancellationToken cancellationToken = default);
+        System.Threading.Tasks.Task DeleteAsync(string path, System.Threading.CancellationToken cancellationToken = default);
+        System.Threading.Tasks.Task DeleteDirectoryAsync(string path, System.Threading.CancellationToken cancellationToken = default);
     }

+    public interface ISshClient : Renci.SshNet.IBaseClient, System.IDisposable
+    {
+        System.Collections.Generic.IEnumerable<Renci.SshNet.ForwardedPort> ForwardedPorts { get; }
+        void AddForwardedPort(Renci.SshNet.ForwardedPort port);
+        Renci.SshNet.SshCommand CreateCommand(string commandText);
+        Renci.SshNet.SshCommand CreateCommand(string commandText, System.Text.Encoding encoding);
+        Renci.SshNet.Shell CreateShell(System.IO.Stream input, System.IO.Stream output, System.IO.Stream extendedOutput);
+        Renci.SshNet.Shell CreateShell(System.Text.Encoding encoding, string input, System.IO.Stream output, System.IO.Stream extendedOutput);
+        Renci.SshNet.Shell CreateShell(System.IO.Stream input, System.IO.Stream output, System.IO.Stream extendedOutput, string terminalName, uint columns, uint rows, uint width, uint height, System.Collections.Generic.IDictionary<Renci.SshNet.Common.TerminalModes, uint> terminalModes);
+        Renci.SshNet.Shell CreateShell(System.IO.Stream input, System.IO.Stream output, System.IO.Stream extendedOutput, string terminalName, uint columns, uint rows, uint width, uint height, System.Collections.Generic.IDictionary<Renci.SshNet.Common.TerminalModes, uint>? terminalModes, int bufferSize);
+        Renci.SshNet.Shell CreateShell(System.Text.Encoding encoding, string input, System.IO.Stream output, System.IO.Stream extendedOutput, string terminalName, uint columns, uint rows, uint width, uint height, System.Collections.Generic.IDictionary<Renci.SshNet.Common.TerminalModes, uint> terminalModes);
+        Renci.SshNet.Shell CreateShell(System.Text.Encoding encoding, string input, System.IO.Stream output, System.IO.Stream extendedOutput, string terminalName, uint columns, uint rows, uint width, uint height, System.Collections.Generic.IDictionary<Renci.SshNet.Common.TerminalModes, uint>? terminalModes, int bufferSize);
+        Renci.SshNet.Shell CreateShellNoTerminal(System.IO.Stream input, System.IO.Stream output, System.IO.Stream extendedOutput, int bufferSize = -1);
+        Renci.SshNet.ShellStream CreateShellStream(string terminalName, uint columns, uint rows, uint width, uint height, int bufferSize);
+        Renci.SshNet.ShellStream CreateShellStream(string terminalName, uint columns, uint rows, uint width, uint height, int bufferSize, System.Collections.Generic.IDictionary<Renci.SshNet.Common.TerminalModes, uint>? terminalModeValues);
+        Renci.SshNet.ShellStream CreateShellStreamNoTerminal(int bufferSize = -1);
+        void RemoveForwardedPort(Renci.SshNet.ForwardedPort port);
+        Renci.SshNet.SshCommand RunCommand(string commandText);
+    }

     public class PrivateKeyConnectionInfo : Renci.SshNet.ConnectionInfo, System.IDisposable
     {
-        public PrivateKeyConnectionInfo(string host, string username, params Renci.SshNet.PrivateKeyFile[] keyFiles) { }
+        public PrivateKeyConnectionInfo(string host, string username, params Renci.SshNet.IPrivateKeySource[] keyFiles) { }
     }

     public class PrivateKeyFile : Renci.SshNet.IPrivateKeySource, System.IDisposable
     {
-        public PrivateKeyFile(System.IO.Stream privateKey, string passPhrase) { }
+        public PrivateKeyFile(System.IO.Stream privateKey, string? passPhrase) { }
-        public PrivateKeyFile(string fileName, string passPhrase) { }
+        public PrivateKeyFile(string fileName, string? passPhrase) { }
+        public PrivateKeyFile(System.IO.Stream privateKey, string? passPhrase, System.IO.Stream? certificate) { }
+        public PrivateKeyFile(string fileName, string? passPhrase, string? certificateFileName) { }
+        public Renci.SshNet.Security.Certificate? Certificate { get; }
     }

     public class SftpClient : Renci.SshNet.BaseClient, Renci.SshNet.IBaseClient, Renci.SshNet.ISftpClient, System.IDisposable
     {
+        public System.Threading.Tasks.Task ChangeDirectoryAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }
+        public System.Threading.Tasks.Task CreateDirectoryAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }
+        public System.Threading.Tasks.Task DeleteAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }
+        public System.Threading.Tasks.Task DeleteDirectoryAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }
+        public System.Threading.Tasks.Task<bool> ExistsAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }
+        public System.Threading.Tasks.Task<Renci.SshNet.Sftp.ISftpFile> GetAsync(string path, System.Threading.CancellationToken cancellationToken) { }
     }

-    public class SshClient : Renci.SshNet.BaseClient
+    public class SshClient : Renci.SshNet.BaseClient, Renci.SshNet.IBaseClient, Renci.SshNet.ISshClient, System.IDisposable
     {
     }

}
namespace Renci.SshNet.Common
{
-    public struct BigInteger : System.IComparable, System.IComparable<Renci.SshNet.Common.BigInteger>, System.IEquatable<Renci.SshNet.Common.BigInteger>, System.IFormattable
-    {
-    }

-    public class DerData
-    {
-        public DerData() { }
-        public DerData(byte[] data, bool construct = false) { }
-        public bool IsEndOfData { get; }
-        public byte[] Encode() { }
-        public Renci.SshNet.Common.BigInteger ReadBigInteger() { }
-        public byte[] ReadBitString() { }
-        public byte ReadByte() { }
-        public byte[] ReadBytes(int length) { }
-        public int ReadInteger() { }
-        public int ReadLength() { }
-        public byte[] ReadObject() { }
-        public byte[] ReadOctetString() { }
-        public void Write(Renci.SshNet.Common.BigInteger data) { }
-        public void Write(Renci.SshNet.Common.DerData data) { }
-        public void Write(Renci.SshNet.Common.ObjectIdentifier identifier) { }
-        public void Write(bool data) { }
-        public void Write(byte[] data) { }
-        public void Write(uint data) { }
-        public void WriteBitstring(byte[] data) { }
-        public void WriteBytes(System.Collections.Generic.IEnumerable<byte> data) { }
-        public void WriteNull() { }
-        public void WriteObjectIdentifier(byte[] bytes) { }
-    }

     public class HostKeyEventArgs : System.EventArgs
     {
+        public Renci.SshNet.Security.Certificate? Certificate { get; }
     }

-    public struct ObjectIdentifier
-    {
-        public ObjectIdentifier(params ulong[] identifiers) { }
-        public ulong[] Identifiers { get; }
-    }

     public abstract class SshData
     {
-        protected void Write(Renci.SshNet.Common.BigInteger data) { }
+        protected void Write(System.Numerics.BigInteger data) { }
     }

     public class SshDataStream : System.IO.MemoryStream
     {
-        public Renci.SshNet.Common.BigInteger ReadBigInt() { }
+        public System.Numerics.BigInteger ReadBigInt() { }
-        public void Write(Renci.SshNet.Common.BigInteger data) { }
+        public void Write(System.Numerics.BigInteger data) { }
     }

}
namespace Renci.SshNet.Compression
{
+    public class Zlib : Renci.SshNet.Compression.Compressor
+    {
+        public Zlib() { }
+        protected Zlib(bool delayedCompression) { }
+        public override string Name { get; }
+        protected override byte[] CompressCore(byte[] data, int offset, int length) { }
+        protected override byte[] DecompressCore(byte[] data, int offset, int length) { }
+        protected override void Dispose(bool disposing) { }
+    }

+    public class ZlibOpenSsh : Renci.SshNet.Compression.Zlib
+    {
+        public ZlibOpenSsh() { }
+        public override string Name { get; }
+    }

}
namespace Renci.SshNet.Messages.Transport
{
     public class KeyExchangeDhGroupExchangeGroup : Renci.SshNet.Messages.Message
     {
-        public Renci.SshNet.Common.BigInteger SafePrime { get; }
-        public Renci.SshNet.Common.BigInteger SubGroup { get; }
+        public System.Numerics.BigInteger SafePrime { get; }
+        public System.Numerics.BigInteger SubGroup { get; }
     }

}
namespace Renci.SshNet.Security
{
+    public class Certificate
+    {
+        public Certificate(byte[] data) { }
+        public byte[] CertificateAuthorityKey { get; }
+        public string CertificateAuthorityKeyFingerPrint { get; }
+        public System.Collections.Generic.IDictionary<string, string> CriticalOptions { get; }
+        public System.Collections.Generic.IDictionary<string, string> Extensions { get; }
+        public Renci.SshNet.Security.Key Key { get; }
+        public string KeyId { get; }
+        public string Name { get; }
+        public byte[] Nonce { get; }
+        public ulong Serial { get; }
+        public byte[] Signature { get; }
+        public Renci.SshNet.Security.Certificate.CertificateType Type { get; }
+        public System.DateTimeOffset ValidAfter { get; }
+        public ulong ValidAfterUnixSeconds { get; }
+        public System.DateTimeOffset ValidBefore { get; }
+        public ulong ValidBeforeUnixSeconds { get; }
+        public System.Collections.Generic.IList<string> ValidPrincipals { get; }
+        public enum CertificateType : uint
+        {
+            User = 1u,
+            Host = 2u,
+        }
+    }

-    public class CertificateHostAlgorithm : Renci.SshNet.Security.HostAlgorithm
+    public class CertificateHostAlgorithm : Renci.SshNet.Security.KeyHostAlgorithm
     {
-        public CertificateHostAlgorithm(string name) { }
+        public CertificateHostAlgorithm(string name, Renci.SshNet.Security.Certificate certificate, System.Collections.Generic.IReadOnlyDictionary<string, System.Func<byte[], Renci.SshNet.Security.KeyHostAlgorithm>> keyAlgorithms) { }
+        public CertificateHostAlgorithm(string name, Renci.SshNet.Security.Key privateKey, Renci.SshNet.Security.Certificate certificate) { }
+        public CertificateHostAlgorithm(string name, Renci.SshNet.Security.Certificate certificate, Renci.SshNet.Security.Cryptography.DigitalSignature digitalSignature, System.Collections.Generic.IReadOnlyDictionary<string, System.Func<byte[], Renci.SshNet.Security.KeyHostAlgorithm>> keyAlgorithms) { }
+        public CertificateHostAlgorithm(string name, Renci.SshNet.Security.Key privateKey, Renci.SshNet.Security.Certificate certificate, Renci.SshNet.Security.Cryptography.DigitalSignature digitalSignature) { }
+        public Renci.SshNet.Security.Certificate Certificate { get; }
     }

     public class DsaKey : Renci.SshNet.Security.Key, System.IDisposable
     {
-        public DsaKey(Renci.SshNet.Common.BigInteger p, Renci.SshNet.Common.BigInteger q, Renci.SshNet.Common.BigInteger g, Renci.SshNet.Common.BigInteger y, Renci.SshNet.Common.BigInteger x) { }
+        public DsaKey(System.Numerics.BigInteger p, System.Numerics.BigInteger q, System.Numerics.BigInteger g, System.Numerics.BigInteger y, System.Numerics.BigInteger x) { }
-        public Renci.SshNet.Common.BigInteger G { get; }
+        public System.Numerics.BigInteger G { get; }
-        public Renci.SshNet.Common.BigInteger P { get; }
-        public override Renci.SshNet.Common.BigInteger[] Public { get; }
-        public Renci.SshNet.Common.BigInteger Q { get; }
-        public Renci.SshNet.Common.BigInteger X { get; }
-        public Renci.SshNet.Common.BigInteger Y { get; }
+        public System.Numerics.BigInteger P { get; }
+        public override System.Numerics.BigInteger[] Public { get; }
+        public System.Numerics.BigInteger Q { get; }
+        public System.Numerics.BigInteger X { get; }
+        public System.Numerics.BigInteger Y { get; }
     }

     public class ED25519Key : Renci.SshNet.Security.Key, System.IDisposable
     {
-        public override Renci.SshNet.Common.BigInteger[] Public { get; }
+        public override System.Numerics.BigInteger[] Public { get; }
     }

     public class EcdsaKey : Renci.SshNet.Security.Key, System.IDisposable
     {
-        public byte[] PrivateKey { get; }
-        public override Renci.SshNet.Common.BigInteger[] Public { get; }
+        public byte[]? PrivateKey { get; }
+        public override System.Numerics.BigInteger[] Public { get; }
     }

     public abstract class Key
     {
-        public abstract Renci.SshNet.Common.BigInteger[] Public { get; }
+        public abstract System.Numerics.BigInteger[] Public { get; }
     }

     public class RsaKey : Renci.SshNet.Security.Key, System.IDisposable
     {
-        public RsaKey(Renci.SshNet.Common.BigInteger modulus, Renci.SshNet.Common.BigInteger exponent, Renci.SshNet.Common.BigInteger d, Renci.SshNet.Common.BigInteger p, Renci.SshNet.Common.BigInteger q, Renci.SshNet.Common.BigInteger inverseQ) { }
-        public Renci.SshNet.Common.BigInteger D { get; }
-        public Renci.SshNet.Common.BigInteger DP { get; }
-        public Renci.SshNet.Common.BigInteger DQ { get; }
+        public RsaKey(System.Numerics.BigInteger modulus, System.Numerics.BigInteger exponent, System.Numerics.BigInteger d, System.Numerics.BigInteger p, System.Numerics.BigInteger q, System.Numerics.BigInteger inverseQ) { }
+        public System.Numerics.BigInteger D { get; }
+        public System.Numerics.BigInteger DP { get; }
+        public System.Numerics.BigInteger DQ { get; }
-        public Renci.SshNet.Common.BigInteger Exponent { get; }
-        public Renci.SshNet.Common.BigInteger InverseQ { get; }
+        public System.Numerics.BigInteger Exponent { get; }
+        public System.Numerics.BigInteger InverseQ { get; }
-        public Renci.SshNet.Common.BigInteger Modulus { get; }
-        public Renci.SshNet.Common.BigInteger P { get; }
-        public override Renci.SshNet.Common.BigInteger[] Public { get; }
-        public Renci.SshNet.Common.BigInteger Q { get; }
+        public System.Numerics.BigInteger Modulus { get; }
+        public System.Numerics.BigInteger P { get; }
+        public override System.Numerics.BigInteger[] Public { get; }
+        public System.Numerics.BigInteger Q { get; }
     }

     public sealed class SshKeyData : Renci.SshNet.Common.SshData
     {
-        public SshKeyData(string name, Renci.SshNet.Common.BigInteger[] keys) { }
+        public SshKeyData(string name, System.Numerics.BigInteger[] keys) { }
-        public Renci.SshNet.Common.BigInteger[] Keys { get; }
+        public System.Numerics.BigInteger[] Keys { get; }
     }

}
namespace Renci.SshNet.Security.Cryptography
{
     public abstract class Cipher
     {
-        public byte[] Decrypt(byte[] input) { }
+        public virtual byte[] Decrypt(byte[] input) { }
     }

-    public class HMACMD5 : System.Security.Cryptography.HMACMD5
-    {
-        public HMACMD5(byte[] key) { }
-        public HMACMD5(byte[] key, int hashSize) { }
-        public override int HashSize { get; }
-        protected override byte[] HashFinal() { }
-    }

-    public class HMACSHA1 : System.Security.Cryptography.HMACSHA1
-    {
-        public HMACSHA1(byte[] key) { }
-        public HMACSHA1(byte[] key, int hashSize) { }
-        public override int HashSize { get; }
-        protected override byte[] HashFinal() { }
-    }

-    public class HMACSHA256 : System.Security.Cryptography.HMACSHA256
-    {
-        public HMACSHA256(byte[] key) { }
-        public HMACSHA256(byte[] key, int hashSize) { }
-        public override int HashSize { get; }
-        protected override byte[] HashFinal() { }
-    }

-    public class HMACSHA384 : System.Security.Cryptography.HMACSHA384
-    {
-        public HMACSHA384(byte[] key) { }
-        public HMACSHA384(byte[] key, int hashSize) { }
-        public override int HashSize { get; }
-        protected override byte[] HashFinal() { }
-    }

-    public class HMACSHA512 : System.Security.Cryptography.HMACSHA512
-    {
-        public HMACSHA512(byte[] key) { }
-        public HMACSHA512(byte[] key, int hashSize) { }
-        public override int HashSize { get; }
-        protected override byte[] HashFinal() { }
-    }

-    public abstract class StreamCipher : Renci.SshNet.Security.Cryptography.SymmetricCipher
-    {
-        protected StreamCipher(byte[] key) { }
-    }

}
namespace Renci.SshNet.Security.Cryptography.Ciphers
{
-    public sealed class Arc4Cipher : Renci.SshNet.Security.Cryptography.StreamCipher
-    {
-        public Arc4Cipher(byte[] key, bool dischargeFirstBytes) { }
-        public override byte MinimumSize { get; }
-        public override byte[] Decrypt(byte[] input, int offset, int length) { }
-        public override byte[] Encrypt(byte[] input, int offset, int length) { }
-    }

-    public sealed class BlowfishCipher : Renci.SshNet.Security.Cryptography.BlockCipher
-    {
-        public BlowfishCipher(byte[] key, Renci.SshNet.Security.Cryptography.Ciphers.CipherMode mode, Renci.SshNet.Security.Cryptography.Ciphers.CipherPadding padding) { }
-        public override int DecryptBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) { }
-        public override int EncryptBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) { }
-    }

-    public sealed class CastCipher : Renci.SshNet.Security.Cryptography.BlockCipher
-    {
-        public CastCipher(byte[] key, Renci.SshNet.Security.Cryptography.Ciphers.CipherMode mode, Renci.SshNet.Security.Cryptography.Ciphers.CipherPadding padding) { }
-        public override int DecryptBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) { }
-        public override int EncryptBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) { }
-    }

-    public sealed class SerpentCipher : Renci.SshNet.Security.Cryptography.BlockCipher
-    {
-        public SerpentCipher(byte[] key, Renci.SshNet.Security.Cryptography.Ciphers.CipherMode mode, Renci.SshNet.Security.Cryptography.Ciphers.CipherPadding padding) { }
-        public override int DecryptBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) { }
-        public override int EncryptBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) { }
-    }

-    public sealed class TwofishCipher : Renci.SshNet.Security.Cryptography.BlockCipher
-    {
-        public TwofishCipher(byte[] key, Renci.SshNet.Security.Cryptography.Ciphers.CipherMode mode, Renci.SshNet.Security.Cryptography.Ciphers.CipherPadding padding) { }
-        public override int DecryptBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) { }
-        public override int EncryptBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) { }
-    }

}
namespace Renci.SshNet.Security.Cryptography.Ciphers.Paddings
{
-    public class PKCS5Padding : Renci.SshNet.Security.Cryptography.Ciphers.CipherPadding
-        public PKCS5Padding() { }
-        public override byte[] Pad(byte[] input, int offset, int length, int paddinglength) { }
-        public override byte[] Pad(int blockSize, byte[] input, int offset, int length) { }
-    }

}
namespace Renci.SshNet.Sftp
{
     public interface ISftpFile
     {
+        System.Threading.Tasks.Task DeleteAsync(System.Threading.CancellationToken cancellationToken = default);
     }

     public sealed class SftpFile : Renci.SshNet.Sftp.ISftpFile
     {
+        public System.Threading.Tasks.Task DeleteAsync(System.Threading.CancellationToken cancellationToken = default) { }
     }
}

v2024.1.0

Compare Source

New features:

  • Add support for aes*[email protected] cipher algorithms on .NET 6+
  • Add cancellation of SshCommand via signals
  • Add SshCommand.ExecuteAsync
  • Add support for [email protected] compression algorithm on .NET 6+

Breaking changes:

  • SshCommand.ExitStatus was changed in #​1423 from returning int to returning int? to reflect the fact that an exit status may not always be returned.
  • PipeStream (which provides the implementation of SshCommand.OutputStream and ExtendedOutputStream) was rewritten in #​1399 to fix a number of bugs and become more "stream-like". As such:
    • It may now block where previously it may have returned 0 prematurely
    • It may now return partial data where previously it may have blocked until a certain amount of data was available.
    • The properties BlockLastReadBuffer and MaxBufferLength have been removed.
  • CommandAsyncResult was deleted in #​1426
  • RsaCipher, AsymmetricCipher and CipherDigitalSignature were deleted in #​1373
  • Encrypt/DecryptBlock were moved down from SymmetricCipher to BlockCipher in #​1369
  • The previously nonfunctional ZlibStream was deleted and the API of Compressor was changed in #​1326
  • SftpFileSytemInformation was renamed to SftpFileSystemInformation in #​1425
  • See the full API diff at the end

What's Changed

New Contributors

Full Changelog: sshnet/SSH.NET@2024.0.0...2024.1.0

API diff
namespace Renci.SshNet
{
     public abstract class BaseClient : Renci.SshNet.IBaseClient, System.IDisposable
     {
-        public bool IsConnected { get; }
+        public virtual bool IsConnected { get; }
-        public event System.EventHandler<Renci.SshNet.Common.ExceptionEventArgs> ErrorOccurred;
+        public event System.EventHandler<Renci.SshNet.Common.ExceptionEventArgs>? ErrorOccurred;
-        public event System.EventHandler<Renci.SshNet.Common.HostKeyEventArgs> HostKeyReceived;
+        public event System.EventHandler<Renci.SshNet.Common.HostKeyEventArgs>? HostKeyReceived;
-        public event System.EventHandler<Renci.SshNet.Common.SshIdentificationEventArgs> ServerIdentificationReceived;
+        public event System.EventHandler<Renci.SshNet.Common.SshIdentificationEventArgs>? ServerIdentificationReceived;
     }

     public class CipherInfo
     {
-        public CipherInfo(int keySize, System.Func<byte[], byte[], Renci.SshNet.Security.Cryptography.Cipher> cipher) { }
+        public CipherInfo(int keySize, System.Func<byte[], byte[], Renci.SshNet.Security.Cryptography.Cipher> cipher, bool isAead = false) { }
+        public bool IsAead { get; }
     }

-    public class CommandAsyncResult : System.IAsyncResult
-    {
-        public object AsyncState { get; }
-        public System.Threading.WaitHandle AsyncWaitHandle { get; }
-        public int BytesReceived { get; set; }
-        public int BytesSent { get; set; }
-        public bool CompletedSynchronously { get; }
-        public bool IsCompleted { get; }
-    }

     public interface ISftpClient : Renci.SshNet.IBaseClient, System.IDisposable
     {
-        System.IAsyncResult BeginDownloadFile(string path, System.IO.Stream output, System.AsyncCallback asyncCallback);
+        System.IAsyncResult BeginDownloadFile(string path, System.IO.Stream output, System.AsyncCallback? asyncCallback);
-        System.IAsyncResult BeginListDirectory(string path, System.AsyncCallback asyncCallback, object state, System.Action<int> listCallback = null);
+        System.IAsyncResult BeginListDirectory(string path, System.AsyncCallback? asyncCallback, object? state, System.Action<int>? listCallback = null);
-        System.IAsyncResult BeginDownloadFile(string path, System.IO.Stream output, System.AsyncCallback asyncCallback, object state, System.Action<ulong> downloadCallback = null);
+        System.IAsyncResult BeginDownloadFile(string path, System.IO.Stream output, System.AsyncCallback? asyncCallback, object? state, System.Action<ulong>? downloadCallback = null);
-        System.IAsyncResult BeginSynchronizeDirectories(string sourcePath, string destinationPath, string searchPattern, System.AsyncCallback asyncCallback, object state);
+        System.IAsyncResult BeginSynchronizeDirectories(string sourcePath, string destinationPath, string searchPattern, System.AsyncCallback? asyncCallback, object? state);
-        System.IAsyncResult BeginUploadFile(System.IO.Stream input, string path, System.AsyncCallback asyncCallback);
+        System.IAsyncResult BeginUploadFile(System.IO.Stream input, string path, System.AsyncCallback? asyncCallback);
-        System.IAsyncResult BeginUploadFile(System.IO.Stream input, string path, System.AsyncCallback asyncCallback, object state, System.Action<ulong> uploadCallback = null);
+        System.IAsyncResult BeginUploadFile(System.IO.Stream input, string path, System.AsyncCallback? asyncCallback, object? state, System.Action<ulong>? uploadCallback = null);
-        System.IAsyncResult BeginUploadFile(System.IO.Stream input, string path, bool canOverride, System.AsyncCallback asyncCallback, object state, System.Action<ulong> uploadCallback = null);
+        System.IAsyncResult BeginUploadFile(System.IO.Stream input, string path, bool canOverride, System.AsyncCallback? asyncCallback, object? state, System.Action<ulong>? uploadCallback = null);
-        void DownloadFile(string path, System.IO.Stream output, System.Action<ulong> downloadCallback = null);
+        void DownloadFile(string path, System.IO.Stream output, System.Action<ulong>? downloadCallback = null);
-        Renci.SshNet.Sftp.SftpFileSytemInformation GetStatus(string path);
+        Renci.SshNet.Sftp.SftpFileSystemInformation GetStatus(string path);
-        System.Threading.Tasks.Task<Renci.SshNet.Sftp.SftpFileSytemInformation> GetStatusAsync(string path, System.Threading.CancellationToken cancellationToken);
+        System.Threading.Tasks.Task<Renci.SshNet.Sftp.SftpFileSystemInformation> GetStatusAsync(string path, System.Threading.CancellationToken cancellationToken);
-        System.Collections.Generic.IEnumerable<Renci.SshNet.Sftp.ISftpFile> ListDirectory(string path, System.Action<int> listCallback = null);
+        System.Collections.Generic.IEnumerable<Renci.SshNet.Sftp.ISftpFile> ListDirectory(string path, System.Action<int>? listCallback = null);
-        void UploadFile(System.IO.Stream input, string path, System.Action<ulong> uploadCallback = null);
+        void UploadFile(System.IO.Stream input, string path, System.Action<ulong>? uploadCallback = null);
-        void UploadFile(System.IO.Stream input, string path, bool canOverride, System.Action<ulong> uploadCallback = null);
+        void UploadFile(System.IO.Stream input, string path, bool canOverride, System.Action<ulong>? uploadCallback = null);
     }

     public class ScpClient : Renci.SshNet.BaseClient
     {
-        public event System.EventHandler<Renci.SshNet.Common.ScpDownloadEventArgs> Downloading;
+        public event System.EventHandler<Renci.SshNet.Common.ScpDownloadEventArgs>? Downloading;
-        public event System.EventHandler<Renci.SshNet.Common.ScpUploadEventArgs> Uploading;
+        public event System.EventHandler<Renci.SshNet.Common.ScpUploadEventArgs>? Uploading;
     }

     public class SftpClient : Renci.SshNet.BaseClient, Renci.SshNet.IBaseClient, Renci.SshNet.ISftpClient, System.IDisposable
     {
+        public override bool IsConnected { get; }
-        public System.IAsyncResult BeginDownloadFile(string path, System.IO.Stream output, System.AsyncCallback asyncCallback) { }
+        public System.IAsyncResult BeginDownloadFile(string path, System.IO.Stream output, System.AsyncCallback? asyncCallback) { }
-        public System.IAsyncResult BeginDownloadFile(string path, System.IO.Stream output, System.AsyncCallback asyncCallback, object state, System.Action<ulong> downloadCallback = null) { }
+        public System.IAsyncResult BeginDownloadFile(string path, System.IO.Stream output, System.AsyncCallback? asyncCallback, object? state, System.Action<ulong>? downloadCallback = null) { }
-        public System.IAsyncResult BeginListDirectory(string path, System.AsyncCallback asyncCallback, object state, System.Action<int> listCallback = null) { }
+        public System.IAsyncResult BeginListDirectory(string path, System.AsyncCallback? asyncCallback, object? state, System.Action<int>? listCallback = null) { }
-        public System.IAsyncResult BeginSynchronizeDirectories(string sourcePath, string destinationPath, string searchPattern, System.AsyncCallback asyncCallback, object state) { }
+        public System.IAsyncResult BeginSynchronizeDirectories(string sourcePath, string destinationPath, string searchPattern, System.AsyncCallback? asyncCallback, object? state) { }
-        public System.IAsyncResult BeginUploadFile(System.IO.Stream input, string path, System.AsyncCallback asyncCallback) { }
+        public System.IAsyncResult BeginUploadFile(System.IO.Stream input, string path, System.AsyncCallback? asyncCallback) { }
-        public System.IAsyncResult BeginUploadFile(System.IO.Stream input, string path, System.AsyncCallback asyncCallback, object state, System.Action<ulong> uploadCallback = null) { }
+        public System.IAsyncResult BeginUploadFile(System.IO.Stream input, string path, System.AsyncCallback? asyncCallback, object? state, System.Action<ulong>? uploadCallback = null) { }
-        public System.IAsyncResult BeginUploadFile(System.IO.Stream input, string path, bool canOverride, System.AsyncCallback asyncCallback, object state, System.Action<ulong> uploadCallback = null) { }
+        public System.IAsyncResult BeginUploadFile(System.IO.Stream input, string path, bool canOverride, System.AsyncCallback? asyncCallback, object? state, System.Action<ulong>? uploadCallback = null) { }
-        public void DownloadFile(string path, System.IO.Stream output, System.Action<ulong> downloadCallback = null) { }
+        public void DownloadFile(string path, System.IO.Stream output, System.Action<ulong>? downloadCallback = null) { }
-        public Renci.SshNet.Sftp.SftpFileSytemInformation GetStatus(string path) { }
+        public Renci.SshNet.Sftp.SftpFileSystemInformation GetStatus(string path) { }
-        public System.Threading.Tasks.Task<Renci.SshNet.Sftp.SftpFileSytemInformation> GetStatusAsync(string path, System.Threading.CancellationToken cancellationToken) { }
+        public System.Threading.Tasks.Task<Renci.SshNet.Sftp.SftpFileSystemInformation> GetStatusAsync(string path, System.Threading.CancellationToken cancellationToken) { }
-        public System.Collections.Generic.IEnumerable<Renci.SshNet.Sftp.ISftpFile> ListDirectory(string path, System.Action<int> listCallback = null) { }
+        public System.Collections.Generic.IEnumerable<Renci.SshNet.Sftp.ISftpFile> ListDirectory(string path, System.Action<int>? listCallback = null) { }
-        public void UploadFile(System.IO.Stream input, string path, System.Action<ulong> uploadCallback = null) { }
+        public void UploadFile(System.IO.Stream input, string path, System.Action<ulong>? uploadCallback = null) { }
-        public void UploadFile(System.IO.Stream input, string path, bool canOverride, System.Action<ulong> uploadCallback = null) { }
+        public void UploadFile(System.IO.Stream input, string path, bool canOverride, System.Action<ulong>? uploadCallback = null) { }
     }

     public class SshClient : Renci.SshNet.BaseClient
     {
-        public Renci.SshNet.Shell CreateShell(System.IO.Stream input, System.IO.Stream output, System.IO.Stream extendedOutput, string terminalName, uint columns, uint rows, uint width, uint height, System.Collections.Generic.IDictionary<Renci.SshNet.Common.TerminalModes, uint> terminalModes, int bufferSize) { }
+        public Renci.SshNet.Shell CreateShell(System.IO.Stream input, System.IO.Stream output, System.IO.Stream extendedOutput, string terminalName, uint columns, uint rows, uint width, uint height, System.Collections.Generic.IDictionary<Renci.SshNet.Common.TerminalModes, uint>? terminalModes, int bufferSize) { }
-        public Renci.SshNet.Shell CreateShell(System.Text.Encoding encoding, string input, System.IO.Stream outpu

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/reactiveui/Camelotia).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjEuOSIsInVwZGF0ZWRJblZlciI6IjM5LjE5LjAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbIkRlcGVuZGVuY3kgTWFuYWdlbWVudCJdfQ==-->

@renovate renovate bot force-pushed the renovate/ssh.net-2024.x branch from 644ed8c to b0b4dc7 Compare July 11, 2024 10:41
@renovate renovate bot force-pushed the renovate/ssh.net-2024.x branch from b0b4dc7 to f4af01c Compare November 22, 2024 16:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

0 participants