Commit Graph

1437 Commits

Author SHA1 Message Date
Scott Xu 326ce14c4c Maintain current build solution (#1268)
* 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
2023-12-15 16:54:57 +01:00
Jacob Slusser f4371ffccc Reduces heap allocations for the some byte[] uses (#1272) 2023-12-11 10:07:32 +01:00
Jacob Slusser f172ac587c Removes MessageAttribute in favor of properties on Message class (#1270)
* Exludes the test projects from code coverage reports

* Removes MessageAttribute in favor of properties on Message class

* Benchmark for removal of MessageAttribute
2023-12-10 17:46:35 +01:00
Wojciech Nagórski 6220beb83d Native async (#1267) 2023-12-09 12:28:06 +01:00
Rob Hague 04178d8432 Always use factories for HmacAlgorithms (#1262)
* Always use factories for HmacAlgorithms

* Re-order HmacAlgorithms

---------

Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
2023-12-09 11:30:57 +01:00
Rob Hague f45af38628 Replace SemaphoreLight with SemaphoreSlim (#1265)
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>
2023-12-09 08:52:31 +01:00
Jacob Slusser 4c4883eed0 Standardizes additional file types in .editorconfig (#1266)
* 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
2023-12-09 07:39:33 +01:00
Rob Hague 6d9d03205b Rebased AsyncResult fix (#1184)
* 🐛 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>
2023-12-04 09:48:56 +01:00
Rob Hague 9b0262c5fb Disable some impactful analyzers (#1246)
* Disable some impactful analyzers

* fb

---------

Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
2023-12-02 16:41:32 +01:00
Rob Hague a027c76d7a Fail with a friendlier error message when response has not been set (#1245)
Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
2023-12-02 14:16:22 +01:00
Scott Xu 4c7bd35a71 Add support for .NET 8.0 (#1255)
* 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
2023-12-01 22:56:48 +01:00
Wojciech Nagórski d3641a0676 Test integration tests (#1250)
* Test integration tests

* Update appveyor.yml

* Update appveyor.yml

* Update Dockerfile

* Update appveyor.yml

* test?

* Test

* Enable docker

* Update appveyor.yml

* Update appveyor.yml

* Fix & Show additional information

* Try to fix connection problems

* Fix build

* remove artifacts

* Enable logging

* Log Information only

* Update appveyor.yml

Co-authored-by: Rob Hague <rob.hague00@gmail.com>

* Update appveyor.yml

* Update appveyor.yml

Co-authored-by: Rob Hague <rob.hague00@gmail.com>

* Update appveyor.yml

Co-authored-by: Rob Hague <rob.hague00@gmail.com>

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* sleep after restarting

* Update RemoteSshd.cs

* Fix tests

* Dispose ports

* Small improvements

* Fix build

* Small fixes

* Revert not related changes

* Test linux and windows

* fix

* test_script

* Use real commands

* Fixes

* fix?

* Add Appveyor TestLogger

* Fix linux tests

* Fix tests

* Try to fix tests

* Revert

* Give time before

* fix

* revert

* Give some time to process all messages after connect

* ForwardedPortDynamicTest_Stop_PortStarted_ChannelNotBound

* fix netsh

* trace

* Update appveyor.yml

* Update appveyor.yml

* etl2pcapng

* Update appveyor.yml

???

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* come on !!

* Update appveyor.yml

* Fixes tests for linux

* Reverts

* Fix build

* Update TestMethodForPlatformAttribute.cs

* Update TestMethodForPlatformAttribute.cs

* Update appveyor.yml

* Issue #1253

* Install .NET SDK

* next try

* fix?

* try

* Finishing

* Fixes

* apt-get install dotnet-sdk-7.0

* Finish?

* Add environment APPVEYOR_BAKE_IMAGE

* Update test/Renci.SshNet.Tests/Classes/Connection/DirectConnectorTest_Connect_TimeoutConnectingToServer.cs

Co-authored-by: Rob Hague <rob.hague00@gmail.com>

* Fix review

* Fix

* Update appveyor.yml

* Update appveyor.yml

* Delete .runsettings

---------

Co-authored-by: Rob Hague <rob.hague00@gmail.com>
Co-authored-by: Robert Hague <rh@johnstreetcapital.com>
Co-authored-by: Scott Xu <scott-xu@msn.com>
2023-11-30 19:19:00 +01:00
Gert Driesen 5921b6eca3 Disable a few duplicate analyzer rules. (#1254) 2023-11-30 07:40:13 +01:00
Pedro Fonseca 4ce18d305e Use hardware-accelerated AES CryptoServiceProvider (#865)
* 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>
2023-11-28 12:59:06 +01:00
Rob Hague 18cf71bc07 Fix build break in Release (#1248) 2023-11-20 20:20:20 +01:00
se006 daa1accaf6 Fix avoidable exception when data length is too long (#823)
* 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>
2023-11-19 07:32:08 +01:00
Scott Xu f9f2b0e5f4 Expose SshIdentificationReceived event (#1195)
* 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
2023-11-16 14:35:59 +01:00
Wojciech Nagórski 54d01621aa Enable trace logging for Integration tests (#1242) 2023-11-16 08:58:22 +01:00
Rob Hague 5021f6d4bb Use System.Security.Cryptography in AesCipher (#1235)
* 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>
2023-11-16 07:05:22 +01:00
Rob Hague b4c829105a Tweak diagnostics (#1241)
* 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>
2023-11-16 06:39:42 +01:00
Rob Hague 58284d6019 Update global.json (#1240) 2023-11-16 06:05:37 +01:00
Pedro Fonseca 2eec748b18 Improve SFTP performance on medium/high latency connections (#866)
* Improve SFTP performance on medium-high latency connections
- Increases maxPendingReads from 10 to 100
- Increases socket send/receive buffer to 10 SSH packets (320K)

* Fix merge

* Adjust SFTP FileReader testcases to accept new MaxPendingReads values

* Fix CreateSftpFileReader testcase, make it dependant on MaxPendingReads constant

---------

Co-authored-by: Pedro Fonseca <pfonseca@qti.qualcomm.com>
2023-11-13 06:08:57 +01:00
Rob Hague 823bc1b67b Use CollectionAssert in ListDirectory tests (#1166)
* Use CollectionAssert in ListDirectory tests

* Indent the braces

---------

Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
2023-11-13 06:07:26 +01:00
Gert Driesen 5ffcb94ec1 Merge pull request #1219 from Rob-Hague/testkeys
* Remove byte order mark, set eol=lf in key files
* Change the passphrase of Key.OPENSSH.ED25519.Encrypted to "12345"
* Normalize the OpenSSH files

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)

* Add OpenSSH public key files

Generated with

puttygen Key.OPENSSH.ECDSA.Encrypted.txt -o Key.OPENSSH.ECDSA.Encrypted.pub -O public-openssh
puttygen Key.OPENSSH.ECDSA.txt -o Key.OPENSSH.ECDSA.pub -O public-openssh
puttygen Key.OPENSSH.ECDSA384.Encrypted.txt -o Key.OPENSSH.ECDSA384.Encrypted.pub -O public-openssh
puttygen Key.OPENSSH.ECDSA384.txt -o Key.OPENSSH.ECDSA384.pub -O public-openssh
puttygen Key.OPENSSH.ECDSA521.Encrypted.txt -o Key.OPENSSH.ECDSA521.Encrypted.pub -O public-openssh
puttygen Key.OPENSSH.ECDSA521.txt -o Key.OPENSSH.ECDSA521.pub -O public-openssh
puttygen Key.OPENSSH.ED25519.Encrypted.txt -o Key.OPENSSH.ED25519.Encrypted.pub -O public-openssh
puttygen Key.OPENSSH.ED25519.txt -o Key.OPENSSH.ED25519.pub -O public-openssh
puttygen Key.OPENSSH.RSA.Encrypted.txt -o Key.OPENSSH.RSA.Encrypted.pub -O public-openssh
puttygen Key.OPENSSH.RSA.txt -o Key.OPENSSH.RSA.pub -O public-openssh

and so forth. Some whose ciphers are unsupported by puttygen were generated with e.g.

sudo ssh-keygen -f Key.RSA.Encrypted.Des.CBC.12345.txt -y > Key.RSA.Encrypted.Des.CBC.12345.pub

* Remove duplicate GetManifestResourceStream helpers

* Use shared Data folder for client keys in integration tests

* Remove unused symbols
2023-11-12 17:02:55 +01:00
Robert Hague 09ad44a823 Remove unused symbols 2023-11-11 18:47:46 +01:00
Robert Hague 0829fce6e4 Use shared Data folder for client keys in integration tests 2023-11-11 18:47:46 +01:00
Robert Hague 1fc6360cf8 Remove duplicate GetManifestResourceStream helpers 2023-11-11 17:39:34 +01:00
Robert Hague d36e7f552d Add OpenSSH public key files
Generated with

puttygen Key.OPENSSH.ECDSA.Encrypted.txt -o Key.OPENSSH.ECDSA.Encrypted.pub -O public-openssh
puttygen Key.OPENSSH.ECDSA.txt -o Key.OPENSSH.ECDSA.pub -O public-openssh
puttygen Key.OPENSSH.ECDSA384.Encrypted.txt -o Key.OPENSSH.ECDSA384.Encrypted.pub -O public-openssh
puttygen Key.OPENSSH.ECDSA384.txt -o Key.OPENSSH.ECDSA384.pub -O public-openssh
puttygen Key.OPENSSH.ECDSA521.Encrypted.txt -o Key.OPENSSH.ECDSA521.Encrypted.pub -O public-openssh
puttygen Key.OPENSSH.ECDSA521.txt -o Key.OPENSSH.ECDSA521.pub -O public-openssh
puttygen Key.OPENSSH.ED25519.Encrypted.txt -o Key.OPENSSH.ED25519.Encrypted.pub -O public-openssh
puttygen Key.OPENSSH.ED25519.txt -o Key.OPENSSH.ED25519.pub -O public-openssh
puttygen Key.OPENSSH.RSA.Encrypted.txt -o Key.OPENSSH.RSA.Encrypted.pub -O public-openssh
puttygen Key.OPENSSH.RSA.txt -o Key.OPENSSH.RSA.pub -O public-openssh

and so forth. Some whose ciphers are unsupported by puttygen were generated with e.g.

sudo ssh-keygen -f Key.RSA.Encrypted.Des.CBC.12345.txt -y > Key.RSA.Encrypted.Des.CBC.12345.pub
2023-11-11 17:39:34 +01:00
Robert Hague 9d6f3ef979 Normalize the OpenSSH files
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)
2023-11-11 17:39:34 +01:00
Robert Hague 60ba1dd090 Change the passphrase of Key.OPENSSH.ED25519.Encrypted to "12345" 2023-11-11 17:39:33 +01:00
Robert Hague 6ec6dc13fd Remove byte order mark, set eol=lf in key files 2023-11-11 17:39:33 +01:00
Rob Hague 826222f6fe Increase test coverage for AesCipher (#1232)
* 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
2023-11-05 09:45:30 +01:00
Gert Driesen 508fc87d2a Fix analyzer errors in Renci.SshNet and Renci.SshNet.TestTools.OpenSSH (#1229)
* 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.
2023-11-01 11:33:42 +01:00
drieseng f745b3f803 Use <see langword="..."/> for language keywords. 2023-10-29 11:35:21 +01:00
Gert Driesen 42ff9206d2 Merge partial classes and complete IForwardedPort interface (#1223)
* Merge partial classes.
Complete IForwardedPort interface.
Expoe Closing event publicly on ForwardedPort.
Disable CA1030 (use events where appropriate).

* Merge partial classes.
Complete IForwardedPort interface.
Expoe Closing event publicly on ForwardedPort.
Disable CA1030 (use events where appropriate).

* Use local function and remove suppression.

* Compile regular expressions.

* Fix build, pfff.

---------

Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
2023-10-25 22:14:56 +02:00
Gert Driesen 066f9982e3 Upgrade .NET SDK from 7.402 to 7.403. (#1222) 2023-10-25 08:35:44 +02:00
Wojciech Nagórski 8e2363360d Update Nugets 10/2023 (#1214)
* Update Nugets 10/2023

* Fix
2023-10-16 15:06:18 +02:00
Rob Hague 46796094f1 Delete more dummy tests (#1213) 2023-10-15 08:25:22 +02:00
Wojciech Nagórski f1297dec75 Move test projects (#1212)
* 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>
2023-10-14 22:16:11 +02:00
Rob Hague 0e9b518492 Remove placeholder tests (#1183)
* Remove placeholder tests

* Move Reverse perf test to benchmarks project

---------

Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
2023-10-14 21:41:04 +02:00
Patrick-3000 91d1ed2cbd Enable list directory async for net framework (#1206)
* Enable ListDirectoryAsync for .NET Framework
* Removed (now) unused constant.
2023-10-14 16:35:31 +02:00
Gert Driesen 1c7166a002 Update tests for SetLastAccessTime(Utc) to also verify the time component and the Kind of the DateTime value returned by GetLastAccessTime(Utc). (#1198) 2023.0.0 2023-10-09 05:45:16 +02:00
Rob Hague 70f58b7660 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>
2023-09-29 14:38:32 +02:00
Wojciech Nagórski 5803ada7cf Implement set last write and access time (#1194) 2023-09-29 10:07:18 +02:00
Wojciech Nagórski cd1151deca Update ISftpClient for #120 (#1193) 2023-09-29 09:05:45 +02:00
Patrick Yates f28c2c2dd0 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)
2023-09-28 21:01:18 +02:00
Dmitry Tsarevich dd2e55209b 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>
2023-09-26 21:29:45 +02:00
Wojciech Nagórski 4ba591ee0b FingerPrints (#1186) 2023-09-26 21:00:20 +02:00
Rob Hague fdd113022b Enable DSA tests (#1181)
Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com>
2023-09-25 22:22:15 +02:00
Rob Hague 51e0c67f40 Try to "fix" the flaky test (#1185) 2023-09-25 21:35:14 +02:00