* Release 2023.0.0 (#1201)
* Assets/logos (#782)
* Added logo assets
* Added PNG 1260x640 with white border
Co-authored-by: 103filgualan <f.gualandi@crif.com>
* OPENSSH KeyReader for more keys (#614)
* OPENSSH KeyReader for more keys
Add support to parse OpenSSH Keys with ECDSA 256/384/521 and RSA.
https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.key
Change-Id: Iaa9cce0f2522e5fee377a82cb252f81f0b7cc563
* Fix ED25519Key KeyLength
* Fix ED25519 PubKey-auth
LeadingZeros of BigInteger-Conversion have to be removed
before sending the Key.
* Add interface to SftpFile #120 (#812)
* Create ISftpFile interface. SftpFile sealed. Return ISftpFile from SftpClient instead of SftpFile. Make ISftpClient interface disposable.
Co-authored-by: Wojciech Swieboda <wswieboda@chathamfinancial.com>
* Start MessageListener with ThreadAbstraction.ExecuteThreadLongRunning (#902)
* Fix Thread pool exhaustion due to MessageListener running on ThreadPool
* Mark long running thread as background
* Add async support to SftpClient and SftpFileStream (#819)
* Add FEATURE_TAP and net472 target
* Add TAP async support to SftpClient and SftpFileStream
* Add async support to DnsAbstraction and SocketAbstraction
* Add async support to *Connector and refactor the hierarchy
* Add ConnectAsync to BaseClient
* Add CODEOWNERS file.
* Fix virus false-positive by Defender on Renci.SSHNet.Tests.dll (#867)
Co-authored-by: Pedro Fonseca <pfonseca@qti.qualcomm.com>
* Add unit tests for task-based asynchronous API (#906)
* Fix runtime and culture dependant tests.
* Set C# 7.3 in Tests.csproj to limit intellisense's suggestions under different targets
* Add SftpClientTest.*Async
* Add SftpFileStreamTest_OpenAsync_*
* Add SftpFileStreamTest_WriteAsync_*
* Add SftpFileStreamTest_ReadAsync_*
* Align AppVeyor script with Test project target frameworks
* correct 'Documenation' to 'Documentation' (#838)
in the documentation's window title
* Agent auth and Keygen (#794)
* Allow to set PrivateKeyFile Key directly
So you can add your own Key-Classes to SSH.NET
* Add ED25519 ctor for just pub key part.
* Make ECDSA Key Bits accessible
You cant export imported CngKeys. To be able to export them to agent or Key-Files make the private bits also accessible.
* Better NETFRAMEWORK vs NETSTANDARD handling
* Add Comment Property to Key
* Add IPrivateKeySource
So Extension can add own PrivateKeyFiles, e.g. PuttyKeyFile.
* Use cryptographically secure random number generator.
Fixes CVE-2022-29245.
* Remove unused import.
* Add IBaseClient for BaseClient and ISftpClient to inherit from (#975)
Add IBaseClient for BaseClient and ISftpClient to inherit from
* fix typo (#999)
* Fix Seek Operations in SftpFileStream (#910)
* Fix offset operations in SftpFileStream.Seek
* Fix seek exception message and add default case for invalid seek origin
* Use named params when throwing ArgumentException
* Add tests for seeking from end of file
* Add back copyright to license. (#1060)
Fixes#1059.
* Removing old target frameworks (#1109)
Remove support for legacy / deprecated target frameworks while adding support for .NET 6.0 (and higher).
The supported target frameworks are now:
* .NETFramework 4.6.2 (and higher)
* .NET Standard 2.0
* .NET 6.0 (and higher)
* Remove old features [Part 1] (#1117)
Remove obsolete feature switches (now that we've remove support for legacy target frameworks) and remove corresponding conditional code.
* Remove FEATURE_DIRECTORYINFO_ENUMERATEFILES (#1119)
* Remove FEATURE_DIRECTORYINFO_ENUMERATEFILES
* Add exception documentation
* Fix some (lots of) issues reported by analyzers. (#1125)
Fix some (lots of) issues reported by analyzers.
* Round 2 of analyzer fixes and general cleanup. (#1132)
* Analyzer fixes round 3. (#1135)
* Replace Array<T>.Empty with Array.Empty<T>() (#1137)
* Replace IsNullOrWhiteSpace extension (#1142)
* Use License Expression for NuGet Package
licenseUrl is deprecated, see https://github.com/NuGet/Announcements/issues/32
* Integration tests
* Remove todos
* Update CODEOWNERS
* Use correct SSH.NET
* ListDirectoryAsync return IAsyncEnumerable (#1126)
* ListDirectoryAsync return IAsyncEnumerable
* Fix documentation
* Update README.md
* Fix
* Add Sftp ListDirectoryAsync test
* Revert
* Integration tests for ListDirectoryAsync with IAsyncEnumerable
* Fix the assembly resolution build warning (#1165)
* Delete performance/longrunning tests (#1143)
Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
* Move Integration tests (#1173)
* Renci.SshNet.IntegrationTests
* Renci.SshNet.TestTools.OpenSSH
* Move integration tests to main repo
* Move old tests to new integration tests
* Move old integration tests to new integration tests
* Move more tests
* Move authentication tests
* Move SshClientTests
* Fix some tests
* Remove duplicated test
* Poc of ProcessDisruptor
* Rename
* Some fixes
* Remove performance tests
* Small improvements
* Add a benchmarks project (#1151)
* Add a benchmarks project
* Small improvements
---------
Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
* Use ExceptionDispatchInfo to retain call stack in Session.WaitOnHandle() (#936)
* Use ExceptionDispatchInfo to retain call stack in Session.WaitOnHandle()
* merge
* Update src/Renci.SshNet/Session.cs
Co-authored-by: Rob Hague <rob.hague00@gmail.com>
---------
Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
Co-authored-by: Rob Hague <rob.hague00@gmail.com>
* Support SHA256 fingerprints for host key validation (#1098)
* Add tests for HostKeyEventArgs
* Add SHA256 fingerprint support
* Add support for RSA SHA-2 public key algorithms (#1177)
* Abstract out the hash algorithm from RsaDigitalSignature
* Add integration tests
* Add DigitalSignature property to KeyHostAlgorithm
* Add IHostAlgorithmsProvider interface
* Verify the host signature
* Fix HostKeyEventArgsTest after merge
* Remove PubkeyAcceptedAlgorithms ssh-rsa
* Add test coverage for RSA keys in PrivateKeyFile
* Obsolete IPrivateKeySource
---------
Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
* Improvements after #1177 (#1180)
* Use ExceptionDispatchInfo in more places (#1182)
Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
* Try to "fix" the flaky test (#1185)
* Enable DSA tests (#1181)
Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
* FingerPrints (#1186)
* Use OS-agnostic socket error codes to allow tests run on different OSes (#1179)
SocketErrorCode is OS agnostic, ErrorCode is OS specific.
On Windows ErrorCode = (int) SocketErrorCode, but on Mac and Unix it is not.
For example ExitCode for HostNotFound (11001) on Windows is 11001, on Mac & Unix is -131073. So testing for ExitCode == 11001 fails on Mac & Unix.
Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
* Fix for channel session semaphore from thread blocking (#1071)
* Merging fix from @clivetong into our own SSH.NET fork
- The following article describes some of the issues with the double check lock that we have seen issues with: https://www.sudhanshutheone.com/posts/double-check-lock-csharp
* Merging fix from @clivetong into our own SSH.NET fork
- The following article describes some of the issues with the double check lock that we have seen issues with: https://www.sudhanshutheone.com/posts/double-check-lock-csharp
* Update Channel to fix AppVeyor failure (field should be readonly)
* Update ISftpClient for #120 (#1193)
* Implement set last write and access time (#1194)
* Add/migrate hmac+cipher integration tests (#1189)
* Add/migrate hmac+cipher integration tests
* fix integration tests
---------
Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
* Update tests for SetLastAccessTime(Utc) to also verify the time component and the Kind of the DateTime value returned by GetLastAccessTime(Utc). (#1198)
---------
Co-authored-by: Filippo Gualandi <filippo.gualandi@gmail.com>
Co-authored-by: 103filgualan <f.gualandi@crif.com>
Co-authored-by: Stefan Rinkes <darinkes@users.noreply.github.com>
Co-authored-by: wxtsxt <wojciech.swieboda@gmail.com>
Co-authored-by: Wojciech Swieboda <wswieboda@chathamfinancial.com>
Co-authored-by: Igor Milavec <igor.milavec@gmail.com>
Co-authored-by: drieseng <gert.driesen@telenet.be>
Co-authored-by: Pedro Fonseca <pbfonseca@gmail.com>
Co-authored-by: Pedro Fonseca <pfonseca@qti.qualcomm.com>
Co-authored-by: Maximiliano Jabase <maxijabase@gmail.com>
Co-authored-by: Owen Krueger <37021716+Owen-Krueger@users.noreply.github.com>
Co-authored-by: Masuri <psh0258@gmail.com>
Co-authored-by: LemonPi314 <49930425+LemonPi314@users.noreply.github.com>
Co-authored-by: Gert Driesen <gertdriesen@msn.com>
Co-authored-by: Rob Hague <rob.hague00@gmail.com>
Co-authored-by: Rob Hague <rh@johnstreetcapital.com>
Co-authored-by: Marius Thesing <marius.thesing@gmail.com>
Co-authored-by: Dāvis Mošenkovs <davikovs@gmail.com>
Co-authored-by: Dmitry Tsarevich <dimhotepus@users.noreply.github.com>
Co-authored-by: Patrick Yates <114094360+patrick-yates-redgate@users.noreply.github.com>
* Remove code examples
---------
Co-authored-by: Filippo Gualandi <filippo.gualandi@gmail.com>
Co-authored-by: 103filgualan <f.gualandi@crif.com>
Co-authored-by: Stefan Rinkes <darinkes@users.noreply.github.com>
Co-authored-by: wxtsxt <wojciech.swieboda@gmail.com>
Co-authored-by: Wojciech Swieboda <wswieboda@chathamfinancial.com>
Co-authored-by: Igor Milavec <igor.milavec@gmail.com>
Co-authored-by: drieseng <gert.driesen@telenet.be>
Co-authored-by: Pedro Fonseca <pbfonseca@gmail.com>
Co-authored-by: Pedro Fonseca <pfonseca@qti.qualcomm.com>
Co-authored-by: Maximiliano Jabase <maxijabase@gmail.com>
Co-authored-by: Owen Krueger <37021716+Owen-Krueger@users.noreply.github.com>
Co-authored-by: Masuri <psh0258@gmail.com>
Co-authored-by: LemonPi314 <49930425+LemonPi314@users.noreply.github.com>
Co-authored-by: Gert Driesen <gertdriesen@msn.com>
Co-authored-by: Rob Hague <rob.hague00@gmail.com>
Co-authored-by: Rob Hague <rh@johnstreetcapital.com>
Co-authored-by: Marius Thesing <marius.thesing@gmail.com>
Co-authored-by: Dāvis Mošenkovs <davikovs@gmail.com>
Co-authored-by: Dmitry Tsarevich <dimhotepus@users.noreply.github.com>
Co-authored-by: Patrick Yates <114094360+patrick-yates-redgate@users.noreply.github.com>
This makes it easier to reason about Key instances in e.g.
DigitalSignature implementations, because we know that the
Key is initialised with its data and will not change.
Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
* Add .NET 8.0 to current build project.
Add dependency **Microsoft.Bcl.AsyncInterfaces** for net462 and netstandard2.0 for current nuget spec
* Remove last new line
* Tabify
* Exludes the test projects from code coverage reports
* Removes MessageAttribute in favor of properties on Message class
* Benchmark for removal of MessageAttribute
This paves the way for asynchronous synchronisation via WaitAsync
(and eliminates a timing test which sometimes fails in CI)
Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
* Updates .gitignore to exclude test results
* Adds .editorconfig for xml, csproj, and props files
Formats xml, csproj, and props files
* Hides stylecop.json from Solution Explorer projects
* 🐛 AsyncResult contains invalid value
- AsyncResult should contain invalid value immediately after async operation is marked as completed
- there was race condition problems with callback method which is invoked on different thread so updating of value is done without any synchronization. So in some cases async operation is marked as completed but async result value is not yet updated and contains invalid value
* Revert test
---------
Co-authored-by: Miroslav Pokorný <m.pokorny@quadient.com>
* Add support for .NET 8.0
* Fix CA1512: Use 'ArgumentOutOfRangeException.ThrowIfNegative' instead of explicitly throwing a new exception instance (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1512)
* Use `ThrowIfGreaterThan` instead of `ThrowIfNegative`+calculation, to supply the correct parameter name.
* .NET 8 is faster :-)
* Use the explicit version, in case newer version SDK breaks our tests
* Add FEATURE_AES_CSP to use hardware-accelerated AesCryptoServiceProvider
Reduces CPU usage dramatically, allowing more performance on slower machines
* Restructure, move most of the feature code to AesCipher.cs
Fix padding for non-AES blockciphers
Fix IV exception for non-AES blockciphers
* Fix the AES Padding
It looks like the legacy code doesn't correctly remove padding, so this code needs to do the same.
* fix rebase issues
restructure AES CSP code into its own class
* Minor fixes
* Rework based on suggestions
* Move all changes to AesCypher.cs, as per Rob-Hague suggestion
Remove FEATURE_AES_CSP conditional
Fix OFB CipherMode
* update AesCipherTest.cs generator
* Fix continuous session encrypt/decrypt
(preserve IV between calls when Padding is None)
* Reduce CTR memory usage in Net 6+
Small performance increase in CTR buffer mode
Cosmetic changes
* Factor out the implementations and re-add the existing constructor
* remove ctor; revert tests; remove unused _iv member
* Reorder Encryption cipher preference list
* Remove redundant AES tests
Add tests for stream cipher state preservation
* Refactor ArrayXOR()
* Add test for IV overflow
* Performance bump for AES CTR (thanks @robhague)
* fix merge conflict
* Move AesCipherMode enum to its own file
---------
Co-authored-by: Pedro Fonseca <pfonseca@qti.qualcomm.com>
Co-authored-by: Rob Hague <rob.hague00@gmail.com>
* Data lengths longer than stream position when data lengths are greater than int.maxvalue are ignored and do not throw an exception
* Removed unreachable test
* Do not try to load the data (just ignore it)
---------
Co-authored-by: Steve Evans <sevans1@oeconnection.com>
Co-authored-by: Rob Hague <rob.hague00@gmail.com>
* Fix https://github.com/sshnet/SSH.NET/issues/1191
* Expose `SshIdentificationReceived` event so that lib consumer can adjust based on server identification
* revert unrelated code style change
* revert OpenSSH 6.6 related tests
* revert ConnectionBase
* Add unit tests
* Rename to `ServerIdentificationReceived`
* rename
* Use System.Security.Cryptography in AesCipher
* don't set the IV - it is unused by ECB
* Dispose ciphers in Session if applicable
---------
Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
* Make it work (it needs the TRACE symbol defined - lots of head scratching without it)
* Expose publicly, but still in DEBUG (to allow programmatic configuration necessary in Core)
* Document how to use it
* Tweak usage (add some logs, remove key/iv information, override ToString on some Message types)
Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
Change the data to be in 64-wide columns instead of 70, and add a newline
at the end of the file. ssh-keygen does not like it otherwise.
puttygen Key.OPENSSH.ECDSA.Encrypted.txt -O private-openssh-new -C Key.OPENSSH.ECDSA.Encrypted
puttygen Key.OPENSSH.ECDSA.txt -O private-openssh-new -C Key.OPENSSH.ECDSA
puttygen Key.OPENSSH.ECDSA384.Encrypted.txt -O private-openssh-new -C Key.OPENSSH.ECDSA384.Encrypted
puttygen Key.OPENSSH.ECDSA384.txt -O private-openssh-new -C Key.OPENSSH.ECDSA384
puttygen Key.OPENSSH.ECDSA521.Encrypted.txt -O private-openssh-new -C Key.OPENSSH.ECDSA521.Encrypted
puttygen Key.OPENSSH.ECDSA521.txt -O private-openssh-new -C Key.OPENSSH.ECDSA521
puttygen Key.OPENSSH.ED25519.Encrypted.txt -O private-openssh-new -C Key.OPENSSH.ED25519.Encrypted
puttygen Key.OPENSSH.ED25519.txt -O private-openssh-new -C Key.OPENSSH.ED25519
puttygen Key.OPENSSH.RSA.Encrypted.txt -O private-openssh-new -C Key.OPENSSH.RSA.Encrypted
puttygen Key.OPENSSH.RSA.txt -O private-openssh-new -C Key.OPENSSH.RSA
(the -C flag changes the comment, otherwise puttygen refuses to do anything)
* Increase test coverage for AesCipher
The tests were generated by a script which is also added for posterity.
The script works by running "openssl enc [...]" (via WSL) to generate the
expected encrypted values, and also verifies those values against the .NET
BCL implementation as an extra validation (it uncovered a difference in
CFB mode between the two relating to the feedback size).
* Fix OfbCipherMode
It was an exact copy of CfbCipherMode
* Fix analyzer errors in Renci.SshNet and Renci.SshNet.TestTools.OpenSSH.
Suppress all errors in unit tests and integration tests.
* Update unit tests now that we pass 'mode' as argument name when we throw ArgumentException.
* Remove stale comment and add unit tests for SshData.ReadBytes(int length).
* Remove unnessary suppression.
* Remove Visual Studio magic.
* Removed duplicate source file.
* Clarified that suppression hides a false positive.
* Remove suppressions for S2372.
* Update ReadExtensionPair() to return concrete dictionary.
* Move test projects to test folder.
Move global.json to root of repo.
Update solution items in solution.
* Move test projects to test folder.
Move global.json to root of repo.
Update solution items in solution.
Update appveyor configuration/
* Attempt to have appveyor use the correct .NET SDK.
* Update .NET SDK to version 7.0.402.
* Move Data folder below Renci.SshNet.Tests.
* Make csinst less chatty.
* Move Data folder directly below test folder as it's used by multiple test projects.
* Remove CS1591 nowarn from concrete test projects as this is already defined in the Directory.Build.props that is in the test folder.
* Fix integration test after moving test projects
---------
Co-authored-by: drieseng <gert.driesen@telenet.be>