FTP and FTP/SSL client .NET library

Download 30-day free trial Buy from $349

Release notes for Rebex FTP/SSL for .NET

2020 R2 #

(build 7450 from 2020-05-24)

Maintenance release

This is a maintenance release with a number of useful enhancements.

Detailed list of changes:

  • FTP: Added FtpExtensions.ExtendedPassiveMode (enables EPSV if supported by the server).
  • FTP: Added FtpSettings.EnableBrokenShutdownWorkaround option (workaround for FTPS servers that don't handle TLS 1.3 close messages properly).
  • SSH: Added new properties to SshCipher to make it possible to determine IDs of active ciphers.
  • SSH: Added workaround for a weakness in legacy CBC ciphers.
  • TLS Core: Enhanced TlsSocket.Timeout property to apply to subsequent Send, SendAsync, Receive and ReceiveAsync methods even when TLS is already active.
  • TLS Core: Fixed availability of TLS 1.3 session ticket when the receive side of the connection has already been closed.
  • TLS Core: Fixed behavior of server-side DoNotCacheSessions option (which previously led to connection failures).
  • TLS Core: Fixed some cases of missing AggregateException unwrapping.
  • TLS Core: Improved and unified behavior of the TlsSocket Shutdown/ShutdownAsync methods when negotiation has not been started.
  • TLS Core: Improved TLS exception reporting.
  • TLS Core: Logging improvements.
  • TLS Core: Optimizations in TLS 1.3 internals.
  • TLS Core: Support for the TLS 1.3 record with empty application data payload and random padding.
  • TLS Core: Unified TlsSocket.Cipher property behavior across TLS versions.
  • Cryptography: Added ContentInfo.ToStream() method.
  • Cryptography: Enhanced Certificate.LoadDerWithKey to support RSASSA-PSS and RSAES-OAEP for RSA keys.
  • Cryptography: Fixed AsymmetricKeyAlgorithm.GenerateDiffieHellmanParameters slowness (only affected the previous release).
  • Cryptography: Improved AsymmetricKeyAlgorithm to support RSASSA-PSS and RSAES-OAEP with keys loaded via ImportKey method.
  • Cryptography: Optimized Certificate and CertificateChain class to only consume native resources when needed.
  • Cryptography: Optimized CNG handles cleanup.

2020 R1.1 #

(build 7390 from 2020-03-25)

Reintroducing fast Diffie-Hellman on Xamarin.Android

Until 2019 R4.2, Rebex binaries for Xamarin.Android platforms used Android's cryptographic API for Diffie-Hellman calculations. However, this functionality is no longer available in current Rebex binaries targeting Xamarin.Android via .NET Standard 2.0. To make it possible to use the faster Diffie-Hellman implementation on Xamarin.Android again, we have have added it to our native extensions library. Once enabled, it will make Diffie-Hellman key exchange in TLS as fast on Xamarin.Android as before.

Detailed list of changes:

  • FTP: Fixed an issue in GetItems() method that caused file system items with an unknown type to not be filtered according to the specified mask.
  • Networking: Fixed rare race condition in TLS and SSH internals.
  • TLS Core: Fixed breaking changes in the behavior of seldom-used parts of TlsSocket API.
  • TLS Core: Fixed handling of OperationCanceledException in TLS 1.3 core.
  • TLS Core: Improved TLS logging.
  • Common: Added DiffieHellmanNative class to Rebex.Common.Native assembly (speeds up Diffie-Hellman calculations on Xamarin.Android).

2020 R1 #

(build 7357 from 2020-02-21)

.NET Standard 2.0 on Xamarin.Android and Xamarin.iOS

Rebex binaries targeting .NET Standard 2.0 are now supported on Xamarin.Android and Xamarin.iOS. Previously-available binaries targeting specific Xamarin platforms have been deprecated, and .NET Standard 2.0 binaries should be used instead.

Note: Applications that require certificate validation also need to use the new Rebex.Common.Native.dll assembly which provides validation of X.509 certificates on Xamarin.Android and Xamarin.iOS.

ChaCha20-Poly1305 support in TLS 1.3 and 1.2

Our TLS 1.3/1.2 core now supports the following ChaCha20-Poly1305 cipher suites:

  • TLS_CHACHA20_POLY1305_SHA256 (TLS 1.3)

To enable these ciphers, use Settings.SetSymmetricCipherSuites(...) method for TLS 1.3 and Settings.SslAllowedSuites property for TLS 1.2.

Native X25519 elliptic curve support on Windows 10

On Windows 10, Windows Server 2016 and Windows Server 2019, Rebex components using ECDH key exchange in TLS or SSH now support X25519 curve (also known as Curve25519) without any external plugins.

End of Standard Support for .NET Framework 2.0 and 3.0

2019 R4.2 was the last release to include support for .NET Framework 2.0 and 3.0 in the standard package. Customers using these platforms are advised to migrate to .NET Framework 3.5 SP1, which will enjoy mainstream support until 2023-10-10.

For customers who are unable to migrate, a Legacy Edition of Rebex components for .NET Framework 2.0/3.0 is available.

Deprecated .NET Core 1.0/1.1

.NET Core 1.1 and 1.0 became end-of-life platforms at 2019-06-27. In accordance with our framework support policy, they are no longer supported by Rebex components. Customers using these platforms are advised to migrate to .NET Core 2.1 or .NET Core 3.1.

Detailed list of changes:

  • All: !!! WARNING: CMP-22 has no release note. Edit value in JIRA. Use '-' to skip including this case in release notes. !!! !!! WARNING: CMP-22 has no components assigned. Adding fake component. Change it in JIRA. !!!
  • All: Binaries targeting .NET Standard 2.0 now support Xamarin.Android and Xamarin.iOS.
  • All: Deprecated binaries targeting .NET Standard 1.5, Xamarin.Android and Xamarin.iOS.
  • All: Fixed several occurences of culture-sensitive string formatting.
  • All: Fixed several occurrences of wrong synchronization context.
  • All: Mainstream edition no longer supports .NET Framework 2.0/3.0 and .NET Core 1.0/1.1.
  • FTP: Fixed handling of symbolic link source paths in non-recursive multi-file operation.
  • FTP: Unified GetConnectState() behavior across platforms.
  • SSH: Added full support for Elliptic Curve Diffie-Hellman (ECDH) on Windows 10, Windows Server 2016 and Windows Server 2019.
  • SSH: Added support for 'curve25519-sha256' key exchange cipher (equivalent to already-supported '').
  • SSH: Enhanced performance of ChaCha20-Poly1305 cipher ('') in SSH client.
  • SSH: Fixed possible deadlock in SSH client when processing incoming EOF packet while waiting for remote receive buffer size to increase.
  • TLS Core: Added asynchronous methods to TlsSocket base class.
  • TLS Core: Added SetSymmetricCipherSuites/GetSymmetricCipherSuites methods to configure enabled TLS 1.3 cipher suites.
  • TLS Core: Added support for ChaCha20-Poly1305 cipher suites to TLS 1.3 and 1.2.
  • TLS Core: Fixed behavior of TlsSocket methods after Dispose has been called.
  • TLS Core: Fixed behavior of TlsSocket.Shutdown.
  • TLS Core: Improved argument checks in TlsSocket base class.
  • TLS Core: Improved multi-pass parsing of the TLS 1.3 records.
  • TLS Core: Many optimizations in TLS 1.3 core.
  • Cryptography: Added full support for Elliptic Curve Diffie-Hellman (ECDH) on Windows 10, Windows Server 2016 and Windows Server 2019.
  • Cryptography: Added native support for ECDH with X25519 curve on Windows 10, Windows Server 2016 and Windows Server 2019.
  • Common: Internal optimizations.

2019 R4.2 #

(build 7320 from 2020-01-15)

Maintenance release

This release solves several issues in the shared functionality.

Detailed list of changes:

  • SSH: Fixed possible deadlock during SSH renegotiation (client-side).
  • TLS Core: Fixed renegotiation in TLS 1.2 (has been broken since 2019 R4).
  • Cryptography: Added workaround for RSA signatures shorter than the key size (.NET Core on Linux is unable to handle them).
  • Cryptography: Fixed AsymmetricKeyAlgorithm.GetRawPublicKey() key format when RSA via MS CNG is in use.
  • Cryptography: Only known external plugins are allowed for enhanced security.
  • Cryptography: Saving public key as well when saving X25519 private keys.

2019 R4.1 #

(build 7290 from 2019-12-16)

.NET Core 3.1 support

.NET Core 3.1 is now supported on the following platforms:

  • Windows (x64, x86, ARM32)
  • Windows 10 IoT (x64, x86, ARM32)
  • Linux (x64, ARM32)
  • macOS (x64)

TLS 1.3 improvements

This release fixes several issues in our new TLS 1.3 core. If you are already using TLS 1.3, upgrading to this release is recommended.

Please note that TLS 1.3 support is not enabled by default yet to prevent interoperability issues with legacy third-party servers. To enable it, use SslAllowedVersions setting, as described in our TLS 1.3 support announcement.

Detailed list of changes:

  • All: Added support for .NET Core 3.1.
  • All: Added support for Mono 6.x.
  • FTP: Fixed transfer aborting logic that caused data connection sockets to remain unclosed in some scenarios.
  • FTP: Using TLS version of the control connection when negotiation the data connection.
  • Networking: Added missing 'buffer' argument check to some Send/Receive methods in ProxySocket/TlsSocket.
  • Networking: Fixed unhandled ObjectDisposedException or misleading SocketException when ProxySocket.Connect aborted due to timeout.
  • SSH: Added a workaround for a bug introduced in OpenSSH 8.0 that rejects 'sender channel' numbers in the upper half of uint32 range.
  • SSH: Added SshEncryptionMode.AEAD (to replace SshEncryptionMode.GCM).
  • SSH: Added support for ChaCha20-Poly1305 AEAD cipher ('') to SSH client.
  • TLS Core: Added support for RSASSA-PSS signatures in TLS 1.2 when TLS 1.3 has been enabled.
  • TLS Core: Avoid unwanted truncation of outgoing TLS 1.3 messages when TlsSocket is disposed.
  • TLS Core: Enhanced error message when no suitable curve is available.
  • TLS Core: Fixed compatibility issue with Xamarin's "Sdk Assemblies Only" option.
  • TLS Core: Fixed exception type to TlsException for TLS 1.3 errors.
  • TLS Core: Fixed handling of TLS 1.3 PSK-KE.
  • TLS Core: Fixed check of signature algorithm in TLS 1.3 CertificateVerify.
  • TLS Core: Fixed occasional failure when negotiating TLS 1.2 or lower when TLS 1.3 is allowed.
  • TLS Core: Fixed order of supported signature schemes in TLS 1.3 ClientHello message.
  • TLS Core: Fixed parsing of fragmented TLS 1.3 handshake messages.
  • TLS Core: Fixed parsing of the TLS 1.3 KeyShare extension.
  • TLS Core: Fixed potential NullReferenceException when TLS 1.3 negotiation has been interrupted unexpectedly.
  • TLS Core: Fixed selection of signature algorithm used in CertificateVerify handshake messages.
  • TLS Core: Not announcing support for X.509 certificates with Ed25519 or RSASSA-PSS public key OID (not supported yet).
  • TLS Core: Optimizations in TLS 1.3 internals.
  • Cryptography: Added workaround for bad RSA/PSS signature algorithm identifiers with missing parameters.
  • Cryptography: Enabled workaround for private key loading from Mono key store in .NET Standard edition on Mono.
  • Cryptography: Enhanced 'Invalid key format' error message when loading a private key.
  • Cryptography: Fixed serial number handling in CertificateIssuer to conform to RFC 5280 constraints.
  • Common: Binaries for .NET Standard 1.5 now use System.Collections.NonGeneric instead of custom implementations.
  • Common: Enabled Xamarin.Android workarounds in .NET Standard 2.0 edition.
  • Common: Improved ISafeSerializationData support detection.

2019 R4 #

(build 7244 from 2019-10-31)

Support for TLS 1.3 in FTP

Ftp class features support for FTP over TLS 1.3.

Detailed list of changes:

  • FTP: Added support for TLS 1.3.
  • FTP: Improved behavior of stream-based PutFile methods with DisableProgressPercentage (stream length is no longer determined).
  • TLS Core: Added support for ALPN TLS extension to TlsSocket.
  • TLS Core: Added TlsBulkCipherMode.AEAD (to replace TlsBulkCipherMode.GCM).
  • TLS Core: Removed support for two legacy unsecure anonymous ciphers (DH_anon_EXPORT_WITH_DES40_CBC_SHA and DH_anon_EXPORT_WITH_RC4_40_MD5).
  • Cryptography: Added PkcsBase.LoadSignedOrEnvelopedData method (a replacement for deprecated PkcsBase.Load).

2019 R3.2 #

(build 7206 from 2019-09-23)

.NET Core 3.0 support

This release introduces support for .NET Core 3.0 on the following platforms:

  • Windows (x64, x86, ARM32)
  • Windows 10 IoT (x64, x86, ARM32)
  • Linux (x64, ARM32)
  • macOS (x64)

Windows 10 IoT support

This release introduces support for .NET Core 3.0 on Windows 10 IoT on x64, x86 and ARM32 platforms.

Detailed list of changes:

  • All: Added support for .NET Core 3.0.
  • All: Added support for Windows 10 IoT (via .NET Core 3.0).
  • SSH: Added SshGssApiCredentials.AccountName property to make it possible to specify an account name to be passed to the SSH server.
  • SSH: Added workaround for legacy WS_FTP 7.x servers that encode long SSH packets improperly.
  • SSH: Fixed SshChannel.SendEof method not to send EOF when channel has already been closed.
  • Common: Optimized internal Task infrastructure on old .NET platforms.

2019 R3.1 #

(build 7161 from 2019-08-09)

Removed SSL 3.0 from TlsVersion.Any

TlsVersion.Any is no longer used by any Rebex component, but it might be used in custom applications. This could present a security issue because until now, TlsVersion.Any still used to contain TlsVersion.SSL30. SSL 3.0, a predecessor to TLS 1.0 protocol, has been published in 1996. It is comprehensively broken and should no longer be used. Application that still use it violate RFC 7568, which deprecated SSL 3.0 in 2015.

Serialization on Xamarin.Android and Xamarin.iOS platforms

Added support for classic .NET serialization ([Serializable] attributes and related infrastructure) on Xamarin.Android and Xamarin.iOS platforms.

Enhanced compatibility with Pure-FTPd server

Rebex FTP/SSL includes several new workarounds that enhance compatibility with Pure-FTPd server.

Detailed list of changes:

  • All: Added support for serialization on Xamarin.Android and Xamarin.iOS platforms.
  • FTP: Added workaround for occasional '451 Transfer aborted' observed with Pure-FTPd and TLS 1.3.
  • FTP: Added workaround for Pure-FTPd's nonconvencial responses.
  • FTP: Enhanced PutFileUnique to be compatible with Pure-FTPd's STOU command response.
  • FTP: Transfer aborting made compatible with Pure-FTPd.
  • TLS Core: Modified TlsVersion.Any to only include TLS 1.0, 1.1 and 1.2.
  • Cryptography: Fixed handling of user-supplied RSACng in AsymmetricKeyAlgorithm and SshPrivateKey on modern platforms.

2019 R3 #

(build 7119 from 2019-06-28)

Support for .NET Standard 2.0 on Mono 5.14 and higher

Binaries of Rebex components targeting .NET Standard 2.0 are now also supported on Mono 5.14 and higher.

End of Standard Support for .NET Compact Framework 3.5 and 3.9

2019 R3 is the last release that includes support for .NET Compact Framework 3.5 and 3.9 in the standard package. Starting with 2019 R4, .NET CF 3.5/3.9 will only be supported with Legacy Editions, which will be available as separate products. See their release history.

Detailed list of changes:

  • All: Binaries targeting .NET Standard 2.0 are now supported on Mono 5.14 or higher.
  • SSH: Added SshPrivateKey.Generate(...) methods on .NET Compact Framework.
  • SSH: Added workaround for broken EtM ciphers in OpenSSH 6.6.
  • SSH: Enhanced GlobalScape SSH server detection.
  • SSH: Enlarged upper limit for non-standard DSA keys to 8192 bits on .NET Framework and .NET Core.
  • TLS Core: Added TlsCipherSuite.Fast enum value.
  • TLS Core: Fixed a bug in server-side mode of TlsSocket that caused client certificate authentication to fail.
  • TLS Core: Internal changes in the TLS layer (in preparation for the upcoming TLS 1.3 support on mainstream platforms).
  • Cryptography: Added Certificate.GetPrivateKeyInfo() method.
  • Cryptography: Added CertificateEngine.LocalMachine engine and CertificateEngine.Bind method.
  • Cryptography: Added support for SHA-224 hash algorithm.
  • Cryptography: Added support for X25519 key format (RFC 8410).
  • Cryptography: Always using AES by default to encrypt PKCS #8 private keys.
  • Cryptography: Meaningful error message for the CNG AEAD auth tag mismatch.
  • Common: Optimized asynchronous continuations on modern platforms.
  • Common: Upgraded Task infrastructure in Xamarin.Android binaries.

2019 R2 #

(build 7077 from 2019-05-17)

Support for Visual Studio 2019

All Rebex components are now fully supported in Microsoft Visual Studio 2019.

Support for .NET Framework 4.8

.NET Framework 4.8 is a fully supported platform.

Native elliptic curve cryptography on Linux with .NET Core 2.1 or higher

On Linux, binaries for .NET Standard 2.0 now utilize OpenSSL elliptic curve routines via .NET Core 2.1 (or higher), making it possible to use ECDH and ECDSA ciphers in TLS/SSL and SFTP/SSH with no need of external plugins.

Detailed list of changes:

  • All: Added support for .NET Framework 4.8 and Visual Studio 2019.
  • All: Removed leftover Trace.Write logging.
  • SSH: Added dummy support for SSH_MSG_EXT_INFO (RFC 8308).
  • Cryptography: Added CertificationRequest.Save method.
  • Cryptography: Added support for ECDSA and ECDH on .NET Core 2.1/.2.2 on Linux (no need for external plugins).
  • Cryptography: Added workaround for broken export of RSA keys from the CNG providers on Windows 7.
  • Cryptography: Added workaround for CRLs with redundant trailing data to CertificateRevocationList.
  • Cryptography: Added workaround for legacy versions of Mono with lack of SHA-2 support.
  • Common: Asynchronous infrastructure improvements.

2019 R1 #

(build 7027 from 2019-03-28)

Improved platform support

This release adds three new sets of binaries targeting the following platforms:

  • .NET Core 2.0/2.1/2.2 (via .NET Standard 2.0)
  • .NET 4.6.x/4.7.x
  • .NET 3.5 SP1

For an overview of available binaries and supported platforms, check out Rebex Support Lifecycle KB article.

API changes

In this release we changed our API a bit. We removed parts of our API that have been deprecated for years, and we deprecated parts of our API that were considered outdated. Additionally, we made some missing methods available on Xamarin and .NET Standard 1.5 platforms as well.

These changes should only affect a minority of our users. If you are affected and need help, please contact us!

Optimized AES/GCM performance

Improved performance of AES/GCM ciphers in TLS and SSH protocols on .NET Compact Framework and non-Windows platforms.

Detailed list of changes:

  • All: Added binaries targeting .NET Framework 3.5 SP1.
  • All: Added binaries targeting .NET Framework 4.6 and higher.
  • All: Added binaries targeting .NET Standard 2.0.
  • All: Removed long-deprecated API. Deprecated legacy API.
  • FTP: Fixed parsing of millisecond-precision datetimes of MLST/MLSD format.
  • FTP: GetItems() method changed to return items of unknown type instead of throwing an exception.
  • ProxySocket: Fixed passing of state to the callback method in BeginConnect.
  • SSH: Changed behavior of SshFingerprint.ToString() and .ToArray() to use SHA-256.
  • SSH: Improved performance of AES/GCM ciphers on .NET Compact Framework and non-Windows platforms.
  • SSH: RSA host keys are preferred to DSA host keys.
  • SSH: SHA-512 is only used during SSH client authentication when the RSA key length allows it.
  • SSH: SshParameters.MinimumRsaKeySize now applies to client RSA keys as well.
  • SSH: Using standard form of Diffie-Hellman group exchange with GlobalScape servers.
  • TLS Core: Fixed passing of state to the callback method in BeginConnect.
  • TLS Core: Improved performance of AES/GCM ciphers on .NET Compact Framework and non-Windows platforms.
  • Cryptography: Fixed behavior of HMAC mode in KeyMaterialDeriver.DeriveKeyMaterial method.
  • Cryptography: Fixed garbage collection issue with PFX-based certificate keys on non-Windows platforms.
  • Cryptography: Fixed handling of shared secred padding in AsymmetricKeyAlgorithm.GetKeyMaterialDeriver.
  • Cryptography: Fixed possible NullReferenceException in CertificationRequest.GetAlternativeHostnames method.
  • Common: Fixed Certificate.Associate with permanent bind on .NET Compact Framework to ensure the key is not garbage-collected.
  • Common: LocalItem constructor no longer fails on items with invalid paths.

2018 R4 #

(build 6930 from 2018-12-21)

Maintenance release

This is a maintenance release with enhancements in the shared functionality.

Detailed list of changes:

  • Networking: Fixed handling of Ssh.Encoding property.
  • Networking: Improved TLS logging.
  • Networking: ProxySocket and TlsSocket implement IDisposable now.
  • ProxySocket: Added workaround for ObjectDisposedException in Socket.ConnectAsync on .NET Core for macOS.
  • SSH: Enhanced legacy group exchange autodetection.
  • SSH: Fixed SshPublicKey(PublicKeyInfo) constructor that only accepted RSA or DSA keys.
  • SSH: Fixed Verbose logging of interactive authentication.
  • SSH: Changed SshParameters.MinimumRsaKeySize from 1024 to 1023 bits.
  • TLS Core: Improved server certificate usage check.
  • Cryptography: Added support for 'BEGIN RSA PUBLIC KEY' keys (PKCS #1 / RFC 3447) to PublicKeyInfo.
  • Cryptography: Added support for IP addresses in Subject Alternative Name certificate extension.
  • Common: Added support for new OpenSSH key format with AES-CTR encryption.
  • Common: Fixed possible certificate validation failures on some versions of Xamarin.Android.

2018 R3 #

(build 6874 from 2018-10-26)

Password-hiding in Verbose logging mode

Communication logs created with Verbose level no longer contain authentication credentials, which makes it more convenient and safer to share them with others.

Connection-establishing API for .NET CF

Added very simple connection-establishing API for .NET Compact Framework (Rebex.Net.ConnectionManagement namespace).

Detailed list of changes:

  • All: Added password-hiding in Verbose logging mode.
  • All: Added experimental support for Mono on Windows.
  • All: Fixed messages of some ObjectDisposedException objects.
  • Networking: Added simple connection manager API on .NET Compact Framework (Rebex.Net.ConnectionManagement namespace).
  • Networking: Added SshParameters.MaximumPacketSize property.
  • Networking: Report a meaningful error message when .NET Compact Framework's 'not a socket' issue is encountered.
  • Networking: Fixed Login not to block Dispose in Sftp, Scp and Ssh classes.
  • SSH: Using UTF-8 at SSH protocol level by default in Sftp, Scp and Ssh classes.
  • SSH: Added logging of SSH channel window size adjustments.
  • SSH: Fixed decompression in encrypt-then-mac (EtM) MAC mode.
  • TLS/SSL: TLS cipher suite being negotiated is logged as soon as possible.
  • Cryptography: CertificateStore implements IEnumerable<Certificate>.
  • Cryptography: Proper error is reported when trying to validate ECDSA certificates on Mono.
  • Common: Added optimized thread pool on .NET Compact Framework.

2018 R2.1 #

(build 6821 from 2018-09-03)

Maintenance release

This is a maintenance release with bugfixes and enhancements in the shared functionality.

Detailed list of changes:

  • Proxy: Added Proxy.HttpUserAgent property to make it possible to specify User-Agent for HTTP CONNECT proxies.
  • Proxy: ProxySocket methods now throw ObjectDisposedException when disposed.
  • SSH: Fixed data buffering when raising SshChannel.ExtendedDataReceived event.
  • Cryptography: Optimized certificate signature validation on .NET Compact Framework.

2018 R2 #

(build 6755 from 2018-06-29)

New fully supported platform: .NET Core on macOS

This release adds full support for .NET Core 2.x on macOS.

Enhancements and bugfixes

Enhancements and bugfixes in the shared functionality.

Detailed list of changes:

  • All: Added support for .NET Core on macOS.
  • FTP: Added Ftp.Settings.BackslashIsRemoteDirectorySeparator option.
  • FTP: Fixed Download() method for filenames starting with backslash on Unix-like servers.
  • FTP: Added Ftp.Settings.EnableRenameOperationForFileExistanceCheck option.
  • Proxy: Closed ProxySocket objects throw more meaningful exception.
  • SSH: Added support for additional formats to SshPublicKey.
  • SSH: Fixed possible bug in SshPublicKey loading.
  • SSH: Added SshPrivateKey.GetPrivateKeyInfo() method.
  • TLS/SSL: Added SslSettings.SslServerCertificateValidationOptions and SslCertificateValidationEventArgs.Options properties.
  • Cryptography: Added workaround for eToken CSP private key operations.
  • Cryptography: Fixed possible 'Unexpected key algorithm' error in AsymmetricKeyAlgorithm.
  • Cryptography: Fixed Certificate.GetSignatureHashAlgorithm() for RSASSA-PSS certificates
  • Cryptography: RSACryptoServiceProvider usability detection made more compatible.
  • Cryptography: Fixed CertificateStore.Exists on .NET Core.
  • Cryptography: Fixed Certificate.HasPrivateKey for non-silent keys.
  • Cryptography: Fixed potential security vulnerability in RSAManaged class (proper padding check in signature verification).
  • Common: Fixed compatibility with AWS Lambda.

2018 R1.1 #

(build 6690 from 2018-04-25)

New fully supported platform: .NET Core on Linux

This release adds full support for .NET Core 2.x on Linux.

Detailed list of changes:

  • All: Added support for .NET Core on Linux.
  • FTP: Added FtpListItemReceivedEventArgs.UserState property.
  • FTP: Fixed handling of symbolic link in multi-file operations.
  • FTP: FtpItem.SymlinkPath is now set in Ftp.GetInfo() method as well.
  • SSH: Fixed handling of invalid data packets claiming to contain more data than their payload length.
  • TLS/SSL: Fixed error raising in TlsSocket's EndSend/EndReceive methods.
  • Cryptography: Enhanced error message when trying to use signing-only RSA certificate for decryption.
  • Cryptography: Fixed private key exporting on .NET Core on Linux.
  • Cryptography: Fixed retrieval of certificate with bound keys from store on .NET Core on Linux.
  • Cryptography: Fixed possible NullReferenceException in built-in custom certificate validator on .NET Compact Framework. Could occur using CRL validation.
  • Cryptography: Fixed DSAManaged.ExportParameter method that failed to export parameters with missing Seed.
  • Cryptography: Added CertificateEngine.BuildChain(Certificate) method.
  • Cryptography: Current CertificateEngine's BuildChain method is now used in CMS (PKCS #7) SignedData and EnvelopedData.
  • Cryptography: Added Certificate.Tag property to make it possible to associate custom objects with a particular Certificate instance.
  • Cryptography: Enhanced logging in built-in custom certificate validator on .NET Compact Framework.

2018 R1 #

(build 6666 from 2018-04-01)

Enhancements and bugfixes

This is a maintenance release with bugfixes, workarounds and enhancements in several areas.

Detailed list of changes:

  • FTP: Fixed handling of multi-line FTP responses in VMS listing parser.
  • FTP: Fixed NullReferenceException in FtpItemCollection constructor (only occurred when directly parsing raw FTP responses).
  • SSH: Added support for AES/GCM ciphers ('' and '') to SSH client.
  • SSH: Added support for EtM MAC ciphers ('' and '') to SSH client.
  • TLS/SSL: Log deprecation warning when using SSL 3.0, which is disabled by default and should no longer be used at all.
  • TLS/SSL: Added SslSettings.SslRenegotiationExtensionEnabled option.
  • TLS/SSL: Added SslSettings.SslServerNameIndicationEnabled option.
  • Cryptography: Added CryptographicCollection<T> as a base for cryptographic collection classes.
  • Cryptography: Fixed possible NullReferenceException inCertificateRevocationList.GetRevocationReason() method.
  • Cryptography: Fixed PFX saving on Mono.
  • Cryptography: Fixed "Unable to load DLL 'Bcrypt.dll'" error on Linux with .NET Core.
  • Cryptography: Added EnhancedCertificateEngine to .NET Compact Framework version to make it possible to supply custom root certification authorities.
  • Common: Enabled Certificate/CertificateChain.LoadPfx with AlwaysCng option on .NET Compact Framework 3.9.
  • Common: Fixed rare race condition in possibly leading to NullReferenceException on .NET Core and UWP platforms.
  • Common: Fixed COMException in CertificateChain.BuildFrom method on experimental UWP platform.
  • Common: Built-in custom certificate validator on .NET CF no longer unnecessarily validates signature of root CA certificates that are trusted by the OS.

2017 R6.3 #

(build 6586 from 2018-01-11)

Maintenance release

This is a maintenance release with enhancements in the shared functionality.

Detailed list of changes:

  • Cryptography: Added support for RSAES-OAEP with input parameter (label).
  • Cryptography: Added support for RSAES-OAEP with mismatched hash algorithms.
  • Cryptography: Fixed initialization of EncryptionAlgorithm property in MailMessage.Recipients collection items.
  • Cryptography: Added support for RSASSA-PSS with mismatched hash algorithms.
  • Cryptography: Fixed CNG private key conversion workaround.

2017 R6.2 #

(build 6565 from 2017-12-21)

Faster AES on Windows

Rebex components now use Windows CNG for AES symmetric encryption algorithm when available. CNG implementation of AES is faster and takes advantage of AES-NI instructions.

Detailed list of changes:

  • FTP: Fixed compatibility with Titan server's ABOR behavior.
  • Proxy: ProxySocket constructor requires a connected socket now.
  • SSH: Added SshParameters.UseLegacyGroupExchange option to make it possible to force using legacy or standard form of SSH Diffie-Hellman group exchange packet.
  • TLS/SSL: Fixed handling of duplicate suites in ClientHello packets.
  • Cryptography: Added CertificateChain.LoadDer method to load a chain of Base64-encoded certificates.
  • Cryptography: Fast CNG implementation of AES (which takes advantage of AES-NI instructions) is used when available.
  • Cryptography: Added workaround for broken X509Certificate.GetPublicKey() on Mono 5.4.
  • Cryptography: Added a workaround for GPG's gpgsm utility that required some SignedData fields to be DER-encoded.

2017 R6.1 #

(build 6534 from 2017-11-20)

Native elliptic curve cryptography on Windows Embedded Compact 2013

Rebex components now utilize MS CNG API on .NET Compact Framework 3.9 / Windows Embedded Compact 2013, making it possible to use ECDH and ECDSA ciphers in TLS/SSL and SFTP/SSH with no need of external plugins.

Maintenance release

This is a maintenance release with improvements, bugfixes or workarounds.

Detailed list of changes:

  • FTP: Added workaround for FTP servers that announce their IP as
  • FTP: Fixed MLSD parser to support empty facts.
  • SSH: Added SshPublicKey.LoadPublicKeys method that supports loading OpenSSH's 'authorized_keys' files.
  • Cryptography: Enhanced custom CRL downloader for .NET Compact Framework to handle all 3xx redirect codes.
  • Cryptography: Enhanced Certificate.LoadDer to handle files with multiple certificates (loads the first one).
  • Cryptography: Enabled usage of MS CNG API in .NET Compact Framework 3.9 edition on Windows Embedded Compact 2013 when appropriate.
  • Cryptography: Fixed detection of AES/GCM support.
  • Cryptography: Fixed detection of native Brainpool and secp256k1 support.
  • Cryptography: Added 'params' to CertificateInfo.SetExtendedUsave/SetAlternativeHostnames methods.
  • Cryptography: Fixed null handling in CertificateInfo.MailAddress.
  • Cryptography: Fixed empty block processing in AES/GCM.
  • Common: Added workaround for broken Encoding.ASCII encoder on legacy Mono platforms.
  • Common: Enhanced SSPI error reporting.
  • Common: Fixed platform info in logs on macOS.

2017 R6 #

(build 6508 from 2017-10-25)

AES/GCM support in TLS/SSL on all platforms

We added support for TLS ciphers based on AES/GCM (AES in Galois/Counter Mode) symmetric encryption algorithm:


These ciphers are available on all supported platforms including .NET 2.0/3.5 and .NET Compact Framework.

Detailed list of changes:

  • All: Added support for DSA key generation on .NET Core on Windows.
  • Networking: Fixed PortRange binding (an issue introduced in previous release).
  • Networking: Fixed ReceiveBufferSize/SendBufferSize propagation (an issue introduced in previous release). This was observed to cause slowdown on Windows platform in some scenarios.
  • Proxy: Fixed handling of IP-based host names in proxy name resolving routine (an issue introduced in previous release).
  • TLS/SSL: Added support for AES/GCM to TLS.
  • TLS/SSL: Added TlsCipherSuite.Weak enum.
  • Cryptography: Added support for RSAES-OAEP encryption to EnvelopedData/RecipientInfo objects (CMS / PKCS #7).
  • Cryptography: Added support for RSAES-OAEP encryption to Encrypt/Decrypt methods in Certificate and AsymmetricKeyAlgorithm classes.
  • Cryptography: Added support for DSA key generation on .NET Core 1.1 on Windows.
  • Cryptography: Added support for RSASSA-PSS signatures to SignMessage/VerifyMessage methods in Certificate and AsymmetricKeyAlgorithm classes.
  • Cryptography: Enhanced environment info logging.
  • Cryptography: Fixed KeySize property of RSAManaged and DSAManaged to return the proper size for key sizes that are not evenly divisible by 8.
  • Cryptography: Added support for RSASSA-PSS signatures to SignedData/SignerInfo objects (CMS / PKCS #7).
  • Cryptography: Added support for legacy MD4 algorithm.
  • Cryptography: Fixed saving of Brainpool keys (used wrong OID).
  • Cryptography: Fixed handling of ED25519 keys in PrivateKeyInfo.
  • Cryptography: Fixed CertificateStore private key saving on Mono.
  • Common: Environment info is now logged when creating an instance of FileLogWriter.

2017 R5 #

(build 6461 from 2017-09-08)

New fully supported platforms: .NET Core 1.1 and 2.0 on Windows

This release adds full support for .NET Core 2.0 and 1.1 on Windows. Support for .NET Core on Linux and macOS is still experimental.

Support for .NET Standard 1.5, 1.6 and 2.0 (on .NET Core 1.1 and 2.0)

All Rebex components support .NET Standard 1.5, 1.6 and 2.0 on .NET Core 1.1 and 2.0. Support for other platforms (such as .NET Standard on .NET 4.6.x or higher) is still experimental.

Detailed list of changes:

  • All: Added support for .NET Core 1.1 and 2.0 on Windows.
  • FTP: Fixed wrong port in debug log when establishing active data transfer.
  • FTP: Added Ftp.Settings.ForceSimpleDirectoryExists to force Ftp.DirectoryExists method to use just CWD/PWD commands.
  • Proxy: Added support for "http://" URLs in Proxy.Host.
  • Cryptography: Added HTTP redirect handling to CRL downloader on .NET Compact Framework.
  • Cryptography: Added workaround to enable SHA-2 on legacy operating systems (such as pre-SP3 Windows XP).
  • Cryptography: Using ASN.1 GeneralizedTime for dates greater than 2050.
  • Cryptography: Enhanced logging of some SSPI errors.
  • Cryptography: Added workaround for invalid or empty HTTP header names.
  • Common: Enabled SHA-2 support workaround for legacy RSA providers.
  • Common: Using custom IBM 437 encoding on .NET Compact Framework.

2017 R4.1 #

(build 6426 from 2017-08-04)

Maintenance release

This is a maintenance release with several improvements, bugfixes and workarounds.

Detailed list of changes:

  • FTP: Added workaround for BulletProof FTP Server's invalid response to MLSD command.
  • Cryptography: Enhanced RSAES-OAEP support.
  • Cryptography: Added CertificateStore.Add method (replacement for deprecated CertificateStore.AddCertificate method).
  • Cryptography: Added KeySetOptions.PreferCng and KeySetOptions.AlwaysCng options.
  • Cryptography: Fixed AsymmetricKeyAlgorithm.Dispose method.
  • Cryptography: Fixed AsymmetricKeyAlgorithm.CreateFrom method (always honors the ownsAlgorithm argument now).

2017 R4 #

(build 6391 from 2017-06-30)

Support for CNG Key Storage Providers

Rebex Certificate class now fully supports RSA, DSA and ECDSA private keys stored in Windows CNG Key Storage Providers.

Native support for Brainpool (P-256 R1, P-384 R1, P-512 R1) and secp256k1 elliptic curves on Windows 10

Windows 10 (and Windows Server 2016) added native support for additional Elliptic Curve DSA (ECDSA) / Elliptic Curve Diffie-Hellman (ECDH) curves including secp256k1, Brainpool P-256 R1, P-384 R1 and P-512 R1, and Rebex classes can take advantage of them now (in addition to NIST P-256/P-384/P-521 curves).

Brainpool curves have already been supported by our TLS/SSL library and can be used with the following ciphers:


For earlier Windows and other operating systems, Brainpool curves are available through external plugins.

Detailed list of changes:

  • All: Deprecated .NET Compact Framework 2.0, Windows (Store) 8.0 and Windows (Store/Phone) 8.1 platforms.
  • All: Lots of improvements in experimental .NET Core / .NET Standard edition.
  • SSH: Added SshParameters.CompressionLevel option to make it possible to specify the desired compression level for SSH.
  • SSH: Deprecated SshPrivateKey.CreateSignature, VerifySignature and an old variant of the SshPrivateKey.Save method.
  • SSH: Added SshPublicKey.GetPublicKeyInfo() method.
  • SSH: Added SshException.GetServerInfo() method to make it possible to determine lists of ciphers supported by the server when SSH negotiation fails.
  • Cryptography: Added support for certificates with private keys stored in CNG Key Storage Providers.
  • Cryptography: Compatibility enhancements in Certificate public/private key operations and AsymmetricKeyAlgorithm class.
  • Cryptography: Added Certificate.GetPublicKeyInfo() method.
  • Cryptography: Fixed PublicKeyInfo.GetKeySize() method that used to throw an exception for ECDSA and ED keys.
  • Cryptography: Added native support for secp256k1, Brainpool P-256 R1, P-384 R1 and P-512 R1 on Windows 10 and Windows Server 2016.
  • Cryptography: Fixed default hash algorithm detection in SignMessage/VerifyMessage methods in Certificate and AsymmetricKeyAlgorithm classes.
  • Cryptography: Experimental support for CMS (PKCS #7) decryption with RSA/OAEP/SHA-1 (RSAES-OAEP defined by RFC 3447).
  • Cryptography: Fixed 'Unexpected PFX length' error when exporting 4096-bit RSA certificates into PFX/P12 file.

2017 R3 #

(build 6339 from 2017-05-09)

NuGet packages

Rebex components just got official NuGet packages!

If you have an active subscription, you will get NuGet packages as part of Rebex components. These are supposed to be added to your private NuGet repository.

Rebex packages are available at as well.

Experimental support for .NET Standard 1.5 and NET Core

This release adds experimental support for .NET Core (or rather .NET Standard 1.5/1.6) to all Rebex components.

In addition to .NET Core on Windows, Linux and macOS, .NET Standard edition of Rebex components can be used on any platform with .NET Standard 1.5 support. This currently includes .NET 4.6.2 and .NET 4.7, and hopefully other platforms soon.

Please note that 'experimental' support means that this edition has not yet reached the 'mainstream' support phase, and the API is subject to change. Any feedback is greatly appreciated.

Support for .NET Framework 4.7

.NET Framework 4.7 is a fully supported platform.

Detailed list of changes:

  • All: Added NuGet packages.
  • All: Added experimental support for .NET Core and .NET Standard 1.5.
  • All: Added workaround for a breaking change in Exception.Data on recent Xamarin.Android.
  • All: Added support for .NET Framework 4.7.
  • FTP: Fixed parsing of rare multi-line responses of PASV, SIZE, MDTM or PWD commands (used by DrFTPD server).
  • FTP: Fixed handling of TLS packets received through data connection while uploading.
  • Cryptography: Enhanced error messages in AsymmetricKeyAlgorithm.
  • Cryptography: Custom certificate validator now behaves like MS CryptoAPI validator when dealing with RSA key sizes shorter than 1024 bits; MD5 signature hash algorithm is always considered to be weak for non-root certificates.
  • Cryptography: Added support for .PFX/.P12 saving on .NET Compact Framework (requires Windows CE 5.0 or later).
  • Common: Fixed incorrect handling of CNG RSA keys.

2017 R2 #

(build 6291 from 2017-03-22)

ECDSA certificate support in TLS/SSL

All Rebex components utilizing our TLS/SSL library now support the following TLS ciphers based on Elliptic Curve DSA (ECDSA) algorithm:


Supported curves:

  • NIST P-256
  • NIST P-384
  • NIST P-521

Please note that external plugins are needed for these algorithms and curves on some platforms.

Support for Visual Studio 2017

All Rebex components are now fully supported in Microsoft Visual Studio 2017. Older Visual Studio versions (2008 and higher) and .NET Framework versions (2.0 and higher) are still supported as well.

Minor ISocket API changes

Legacy parts of ISocket interface were moved into ISocketExt interface. If you implemented a custom transport layer using the ISocket API, make sure to implement ISocketExt instead when upgrading to this release.

Seldom-used static methods in CryptoHelper class were removed. If you need any of them, please let us know.

Detailed list of changes:

  • All: Mono 2.10 is no longer supported. (Mono 3.x and 4.x still supported.)
  • FTP: Added Ftp.Settings.SkipDuplicateItems option (set to true by default).
  • Networking: Added logging of environment and platform information.
  • Networking: Enhanced target address logging when connecting.
  • Networking: HTTP core provides better inner exceptions on errors.
  • Networking: Legacy members of custom transport layer API moved from ISocket to ISocketExt.
  • Proxy: Fixed ProxySocket.Connect(...) on Mono 2.10.
  • SSH: Enhanced cipher mismatch error reporting during SSH negotiation to produce informative error messages.
  • SSH: Added GetSupportedMacAlgorithms/GetSupportedEncryptionAlgorithms/GetSupportedKeyExchangeAlgorithms static methods to SshParameters.
  • SSH: Added support for client key authentication using 'rsa-sha2-256', 'rsa-sha2-512' and '' algorithms.
  • SSH: Added OpenSSH-style fingerprint support to SshFingerprint class.
  • TLS/SSL: Added support for Elliptic Curve DSA to TLS 1.2/1.1/1.0.
  • TLS/SSL: Fixed unexpected connection closure handling in TlsSocket.
  • TLS/SSL: Fixed handling of Timeout value in TlsSocket.Receive.
  • Cryptography: Added support for Elliptic Curve DSA to Certificate/CertificateChain/CertificateIssuer classes.
  • Cryptography: SignMessage/VerifyMessage methods added to AsymmetricKeyAlgorithm.
  • Cryptography: Renamed KeyDerivationOptions class to KeyDerivationParameters.
  • Cryptography: Removed seldom-used static methods from CryptoHelper.
  • Cryptography: CertificateIssuer class made available on .NET Compact Framework.
  • Cryptography: Fixed TLS 1.0/1.1 on FIPS-only Windows with disabled UseFipsAlgorithmsOnly.
  • Cryptography: Enhanced CertificateIssuer API.
  • Cryptography: Fixed PrivateKeyInfo.KeyAlgorithm that returned non-standard values for some ECDSA keys.
  • Cryptography: Fixed handling of padding in ECDSA private keys stored using the new OpenSSH format.
  • Cryptography: Fixed weak algorithm detection in .NET Compact Framework custom certificate verifier.

2017 R1 #

(build 6249 from 2017-02-08)

TLS Renegotiation Indication Extension

Renegotiation Indication Extension (RFC 5746) fixes a vulnerability in the TLS/SSL protocol that makes it possible for an attacker to hijact TLS/SSL connections during renegotiation in some scenarios.

Detailed list of changes:

  • Networking: Added workaround for a breaking change in Exception.Data on recent Xamarin.iOS.
  • Networking: TlsSocket.Timeout modifies the underlying ISocket.Timeout as well now.
  • Networking: Slightly enhanced certificate rejection reason reporting in TLS.
  • Proxy: Enhanced ProxySocket connection initialization.
  • SSH: Added EnsureKeyAcceptable option that instructs SSH client to announce public key to the server before performing key authentication.
  • SSH: Added support for saving private keys in new OpenSSH key format (Base64-encoded keys with "BEGIN OPENSSH PRIVATE KEY" header).
  • SSH: Added support for "rsa-sha2-256" and "rsa-sha2-512" host key algorithms.
  • SSH: Added support for "diffie-hellman-group14-sha256", "diffie-hellman-group15-sha512" and "diffie-hellman-group16-sha512" key exchange algorithms.
  • TLS/SSL: Added support for Renegotiation Indication Extension (RFC 5746).
  • TLS/SSL: Preferred TLS/SSL ciphers can be now defined (using TlsParameters.SetPreferredSuites method).
  • TLS/SSL: Added check for private key accessibility when starting server-side TLS.
  • Cryptography: Added support for ValidationOptions.UseCacheOnly on .NET CF.
  • Cryptography: Substantially optimized CRL parsing code used by enhanced certificate validator on .NET Compact Framework.

2016 R3 #

(build 6198 from 2016-12-19)

Elliptic curve cryptography in TLS/SSL

All Rebex components utilizing our TLS/SSL library now support the following TLS ciphers based on Elliptic Curve Diffie-Hellman (ECDH) algorithm:


Supported curves:

  • NIST P-256
  • NIST P-384
  • NIST P-521
  • Brainpool P256 R1
  • Brainpool P384 R1
  • Brainpool P512 R1
  • Curve 25519

Please note that external plugins might be needed for some of those algorithms or curves on some platforms.

Enhanced SHA-2 certificate validation on all .NET Compact Framework platforms

We still support .NET Compact Framework 2.0, 3.5 and 3.9 and Windows CE 5.0 and higher. Unfortunately, legacy versions of Windows CE won't get native support for X.509 certificates signed using SHA-2 algorithms, which essentially makes the native certifiacte validator useless - it only supports SHA-1, which is getting deprecated.

As a workaround to this platform limitation, we introduce a new built-in certificate validator. It handles SHA-2 and is used by default on .NET Compact Framework platforms that lack native SHA-2 support.

Proper certificate validation on Universal Windows Platform

Support for Universal Windows Platform is still experimental, but it just got much better. We now support the platform's native certificate validation provided by Windows.Security.Cryptography.Certificates namespace. There is now no need to implement custom validators in your Windows 10 Store applications.

New API for remote checksum calculation

Ftp object now features GetChecksum methods, making it possible to retrieve a checksum or hash of a remote file (or part of it). Together with the LocalItem.GetChecksum methods, this makes it easily possible to reliably detect changed files.

This replaces older Ftp.GetRemoteChecksum methods. Please note that this functionality is not supported by all servers.

Disabled weak legacy ciphers in TLS/SSL

All legacy 'EXPORT1024' ciphers are now prohibited by default in addition to already-prohibited 'EXPORT' ciphers. SslAllowVulnerableSuites option can be used to enable them, but this is strongly discouraged.

Detailed list of changes:

  • FTP: Added Ftp.GetChecksum methods to replace legacy Ftp.GetRemoteChecksum methods.
  • FTP: Added special handling for another variant of NOOP response during transfer.
  • Networking: Enhanced and optimized HTTP/HTTPS client core.
  • Networking: Connect/Listen methods on ProxySocket/TlsSocket objects now throw an exception when called twice on the same socket.
  • Networking: Added SocketInformation constructor.
  • SSH: Added support for "ecdh-sha2-nistp256", "ecdh-sha2-nistp384", "ecdh-sha2-nistp521" and "" key exchange algorithms (plugins might be needed on some platforms).
  • SSH: Added support for saving keys in new OpenSSH key format (Base64-encoded keys with "BEGIN OPENSSH PRIVATE KEY" header).
  • SSH: Added SetKeyExchangeAlgorithms, SetHostKeyAlgorithms, SetMacAlgorithms methods to SshParameters object to make it possible to fine-tune the list of enabled SSH ciphers.
  • SSH: Legacy Diffie-Hellman group exchange is only used with legacy SSH servers.
  • SSH: Added SshSession.ServerInfo property to make it possible to determine ciphers supported by the SSH server.
  • SSH: Added SshPublicKey.KeySize property.
  • SSH: Added SshParameters.MinimumRsaKeySize property specifying to connect only to SSH servers with RSA server key of given size or higher.
  • SSH: Added support for "ecdsa-sha2-nistp256", "ecdsa-sha2-nistp384", "ecdsa-sha2-nistp521" and "ssh-ed25519" host key algorithms (plugins might be needed on some platforms).
  • SSH: Disabled weak SSH ciphers by default (they can still be enabled explicitly).
  • SSH: Check availability of associated private key when adding a certificate-based server host key.
  • SSH: Fixed possible NullReferenceException when closing SSH client from another thread just before receiving data.
  • TLS/SSL: Added support for Elliptic-Curve based TLS ciphers (TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA) with NIST P-256/P-384/P-521, Curve 25519 and Brainpool P256R1/P384R1/P512R1 curves. Plugins are needed for some of those.
  • TLS/SSL: Server name is now passed to TLS server during negotiation (use TlsParameters.CommonName to override it).
  • TLS/SSL: Fixed TlsCipherSuite.All to include all recently added cipher suites.
  • TLS/SSL: All legacy 'EXPORT1024' ciphers are now prohibited by default in addition to already-prohibited 'EXPORT' ciphers (unless AllowVulnerableSuites option is enabled).
  • TLS/SSL: Fixed issues with some legacy TLS/SSL ciphers (all of them were already disabled by default).
  • TLS/SSL: Enhanced error reporting in server-side TLS/SSL library.
  • Cryptography: Improved ASN.1 time node parser.
  • Cryptography: Added support for certificate validation on Universal Windows Platform.
  • Cryptography: Added custom X.509 certificate validator for .NET Compact Framework with full SHA-2 support on all platforms.
  • Cryptography: Fixed parsing of 'Intended Usage' extension when 'Decipher Only' was specified.
  • Cryptography: Added static Create method to SHA256Managed/SHA384Managed/SHA512Managed classes on .NET Compact Framework.
  • Cryptography: ValidationResult.ErrorCode deprecated and replaced with NativeErrorCode.
  • Cryptography: Optimized memory usage in CMS/PKCS #7 (SingedData/EnvelopedData classes).
  • Cryptography: Added missing argument checks to CertificateIssuer methods.
  • Cryptography: Added support for Base64-encoded files with CRLF end-of-line sequences to CertificateChain.LoadP7b method.
  • Cryptography: Fixed HMAC calculation based on SHA-384 and SHA-512 on NET Compact Framework and Mono platforms.
  • Cryptography: Added Rebex.Security.Certificates.CertificateEngine class to make it possible to implement custom X.509 chain building and validation engines.
  • Common: Added ConsoleLogWriter for Xamarin platforms.
  • Common: Added Rebex.TeeLogWriter class that makes it possible to log to multiple log writers.
  • Common: Added LocalItem.GetChecksum methods and related types.

2016 R2.2 #

(build 6083 from 2016-08-26)

Maintenance release

This is a maintenance release with enhancements in the shared functionality.

Detailed list of changes:

  • SSH: Enhanced handling of errors in FingerprintCheck event handlers.
  • TLS/SSL: Fixed a rare issue in abbreviated TLS/SSL negotiation handling.
  • Cryptography: Added CheckCertificate/GetIssuingDistributionPoint methods to CertificateRevocationList class and ValidateRevocationList method to Certificate class.
  • Cryptography: Enhanced SHA-2 support check on .NET Compact Framework.
  • Cryptography: Fixed SHA-2 support in AsymmetricKeyAlgorithm.SignHash on Windows Server 2008 (and possibly other old platforms).
  • Common: Added workaround for broken FileStream.SetLength on some .NET Compact Framework platforms.

2016 R2.1 #

(build 6054 from 2016-07-28)

Workarounds for Microsoft Schannel bugs in TLS/SSL

Added workaround for bugs in Microsoft's TLS/SSL library which uses and expects wrong padding in DHE_RSA_* ciphers.

Detailed list of changes:

  • FTP: Fixed parsing of win32.ea extended attribute on .NET Compact Framework.
  • Networking: Fixed ProxySocket.ToEndPoint to throw a more meaningful exception for entries with no IP addresses.
  • TLS/SSL: Fixed unreadable TLS debug log messages on Xamarin platforms.
  • TLS/SSL: Added workarounds for bugs in Microsoft Schannel implementation of DHE_RSA_* ciphers related to incorrect padding processing.
  • Cryptography: Fixed AsymmetricKeyAlgorithm.SignHash (in 2016 R2, it falls back to RSAManaged without trying to use RSACryptoServiceProvider first).
  • Cryptography: Fixed CertificateIssuer.IssueRevocationList method that ignored signatureHashAlgorithm argument and always used SHA-1.
  • Common: FileLogWriter on Windows Store 8.x / Universal Windows Platform is now thread-safe.
  • Common: Fixed LocalItem(string) constructor on Windows Store 8.x / Universal Windows Platform.
  • Common: Added workaround for broken handling of surrogate pairs when converting to "iso-8859-1" using System.Text.Encoding on Mono 4.x.

2016 R2 #

(build 6026 from 2016-06-30)

Support for Xamarin June 2016 Update

June 2016 update of Xamarin.iOS/Xamarin.Android/Xamarin.Mac introduced a breaking change in Mono.Security API that broke compatibility with Rebex components. This issue has been solved in this release.

SHA-2 for all supported .NET Compact Framework platforms

SHA-1 is currently being deprecated (applies to X.509 certificates, TLS/SSL and SSH), which poses a problem for legacy .NET Compact Framework platforms based on editions of Windows CE with no native SHA-2 support. To make solutions for these platforms compatible with current TLS/SSL and SSH serves, we added a custom implementation of SHA-2 for these legacy platforms.

Detailed list of changes:

  • FTP: Enhanced IgnorePassiveModeAddress workaround to support SOCKS4/SOCKS5 and HTTP CONNECT proxies.
  • FTP: Added support for another variant of 200 NOOP response.
  • Networking: Increased default receive buffer size on Windows 8 and higher. Added related Proxy properties to make this configurable.
  • Proxy: ProxySocket object's Connect method now uses the timeout value specified by the Timeout property.
  • SSH: Added support for additional server authentication algorithms ('x509v3-sign-dss', '' and '').
  • SSH: Disabled hmac-sha96 SSH cipher in FIPS mode (it's not compliant).
  • SSH: Fixed error handling in queued background calls (mostly applies to session renegotiation).
  • SSH: Fixed renegotiation handling to allow renegotiation while authenticating.
  • SSH: Fixed DSA client certificate authentication.
  • SSH: Enhanced interactive authentication support to handle uppercase password prompts.
  • TLS/SSL: Enhanced SHA-2 support for .NET Compact Framework. SHA-256, SHA-384 and SHA-512 are now supported even on platforms with no native SHA-2 support.
  • TLS/SSL: Added Settings.SslSession property to allow resuming specific TLS/SSL sessions.
  • TLS/SSL: Fixed record layer 'protocol version' handling.
  • TLS/SSL: Enhanced Diffie-Hellman key exchange logging.
  • Cryptography: Fixed detection of native SHA-2 support in .NET Compact Framework version.
  • Cryptography: Added support for more variants of OpenSSL/OpenSSH (SSLeay) key files.
  • Cryptography: Fixed Certificate.Associate to work with DSA keys.
  • Cryptography: Added CrlNumber property to CertificateRevocationList object.
  • Cryptography: Added support for SHA-2 certificates to Certificate.VerifyHash in .NET 2.0 on Windows with FIPS-compliant mode enabled.
  • Cryptography: Certificate.LoadPfx and CertificateChain.LoadPfx methods now specify Exportable options by default (in addition to UserKeySet).
  • Cryptography: Added workaround for RSA implementations that reject rare signatures shorter than the key size.
  • Common: Enhanced SSPI error messages.
  • Common: Fixed LogWriterBase.Level default value.
  • Common: Fixed compatibility issue in Xamarin edition (caused by a breaking change in June 2016 update of Xamarin).

2016 R1.1 #

(build 5885 from 2016-02-10)

Experimental assemblies for Xamarin.Mac

Added experimental binaries of most Rebex components (FTP/SSL, SFTP, File Server, Secure Mail, ZIP, Time, Security) for Xamarin.Mac platforms. They are suitable for targeting Xamarin.Mac Mobile Framework and Xamarin.Mac .NET 4.5 Framework projects.

Mitigation of SLOTH attacks

Usage of legacy MD5 algorithm in TLS 1.2 was disabled to prevent SLOTH attacks.

Maintenance release

Experimental binaries of most Rebex components (FTP/SSL, SFTP, File Server, Secure Mail, ZIP, Time, Security) for the Xamarin.Mac platform are now available. They are suitable for targeting both Xamarin.Mac Mobile and Xamarin.Mac .NET 4.5 Framework projects.

Detailed list of changes:

  • FTP: Fixed a bug that triggered the 'Another operation is pending' exception when internal directory listing failed due to protocol error.
  • FTP: Added workaround for servers returning "cdir" in MLST responses.
  • SSH: Fixed seldom-used SshSession.Connect(string, int) method that was freezing since 2016 R1.
  • SSH: Added workaround for older version of Bitvise server that don't properly handle SSH channel closing.
  • SSH: Fixed handling of multi-line SSH banner messages.
  • SSH: Fixed a bug in SSH channel window size adjustment.
  • SSH: Fixed potential NullReferenceException error in SshSession.Dispose method.
  • TLS/SSL: Disabled any usage of MD5 in TLS 1.2 to prevent SLOTH attacks.

2016 R1 #

(build 5855 from 2016-01-11)

TLS 1.2 enhancements

TLS 1.2 is now enabled by default in all our TLS/SSL enabled components. We fixed several interoperability issues as well.

Experimental assemblies for Windows Store Apps

Experimental binaries of many Rebex components (SFTP, FTP/SSL, Time, ZIP, File Transfer Pack, Terminal Emulation) for "Windows 8 Store", "Windows 8.1 PCL", and "Windows Universal Platform" are now available. The are suitable for "Store Apps" targeting Windows 8.0, Windows 8.1, Windows Phone 8.1, Windows 10, Windows 10 Mobile and Windows 10 IoT. Visit Rebex Labs for additional information.

Mitigation of Logjam attacks

Check for minimum allowed Diffie-Hellman key size (1024 bits) has been added to SSH and TLS/SSL to mitigate Logjam attacks. The minimum value can be changes using Settings.SslMinimumDiffieHellmanKeySize or Settings.SshParameters.MinimumDiffieHellmanKeySize.

Detailed list of changes:

  • All: Added workaround for Xamarin.Android whose Dns.GetHostEntry resolves 'localhost' to device's external IP address.
  • All: Rebex assemblies are now signed with SHA-256 signatures in addition to legacy SHA-1 signatures.
  • FTP: Added workaround for broken MLSD command on CC-patched WU-FTPD server.
  • FTP: Added workaround for GlobalScape EFT Server 6.5-7.1 with broken OPTS MLST command.
  • FTP: TLS 1.2 is now enabled by default.
  • FTP: Improved port selection algorithm when using PortRange objects.
  • FTP: Added support for FileCatalyst FTP server listings.
  • FTP: Added Ftp.Settings.CompressionLevel property that specifies compression level for MODE Z uploads.
  • Proxy: Fixed a bug in SOCKS4/SOCKS5 response reading code that triggered an infinite loop with buggy proxy servers.
  • Proxy: Enhanced DNS resolution error messages.
  • SSH: Enhanced interactive authentication support to make it possible to use AuthenticationRequest event to ask for username and password.
  • SSH: Enhanced rejected authentication logging and error reporting.
  • SSH: Fixed compatibility with old versions of OpenSSH (2 and 3).
  • SSH: Fixed a bug that could cause a deadlock in packet sending routine.
  • SSH: Added SshParameters.MinimumDiffieHellmanKeySize value (set to 1024 by default to mitigate Logjam attacks).
  • SSH: SshPrivateKey constructor's 'password' argument made optional.
  • SSH: No exception is thrown when the server aborts connection instead of closing it (unless a packet is being received).
  • SSH: Enhanced 'no common algorithms' error message.
  • SSH: Refactored SSH core to handle multi-thread scenarios more efficiently.
  • SSH: Added certificate-based constructor to SshPublicKey class.
  • SSH: Added support for certificate-based server authentication (using 'x509v3-sign-rsa algorithm').
  • SSH: Fixed misleading error message when user interactive authentication attempt is rejected.
  • SSH: Added support for one additional 'keyboard-interactive' authentication prompt ('Password for [user@server]:').
  • SSH: Added Settings.PostponeChannelClose option to enable workaround for servers that send channel data or exit code after the channel has been closed.
  • SSH: Added EnableSignaturePadding option that forces signature padding (workaround for SSH servers that got signature padding wrong).
  • SSH: Added logging of debug messages received from SSH server.
  • TLS/SSL: TLS 1.2 made compatible with Microsoft's implementation.
  • TLS/SSL: Fixed client certificate authentication in TLS 1.2.
  • TLS/SSL: Added Settings.SslMinimumDiffieHellmanKeySize value (set to 1024 by default to mitigate Logjam attacks).
  • TLS/SSL: Added reliable detection of SHA-2 certificate support.
  • Cryptography: Enhanced cryptographic provider initialization error message.
  • Cryptography: Added workaround for PuTTY keys with bad data at the end.
  • Common: Fixed multi-file operations to never modify input FileSet's BasePath.
  • Common: ThreadPool is now used to handle background operations instead of a custom implementation.
  • Common: Enhanced multithread operation support in log writers.

2015 R4.1 #

(build 5715 from 2015-08-24)

Fixed Xamarin mobile platform detection

Fixed platform detection code on Xamarin.iOS and Xamarin.Android.

Detailed list of changes:

  • All: Fixed platform detection on Xamarin.Android and Xamarin.iOS.
  • All: Version and platform added to assembly description.

2015 R4 #

(build 5700 from 2015-08-09)

Support for Windows 10, .NET Framework 4.6 and Visual Studio 2015

All Rebex components now ship with full support for Windows 10, .NET Framework 4.6 and Microsoft Visual Studio 2015. Older Visual Studio versions (2005 and higher) and .NET Framework versions (2.0 and higher) are still supported as well.

Faster TLS/SSL and SSH negotiation on Xamarin.Android

Our SSH and TLS/SSL libraries now use Java-based Diffie-Hellman on Xamarin.Android, which substantially speeds up SSH and TLS/SSL negotiation when Diffie-Hellman algorithm is used.

File creation date support in FTP

Items returned by Ftp object's GetList and GetItems methods now provide creation time (if supported by the FTP server).

Detailed list of changes:

  • All: Enhanced platform detection code.
  • FTP: Added OPTS MLST support to enable non-default attributes.
  • FTP: Added link support to MLSD/MLST parsers.
  • FTP: Added FtpWebRequest.LogWriter property.
  • FTP: Default value of Ftp.Settings.ReuseControlConnectionSession changed to True to enhance compatibility.
  • FTP: Some legacy methods and properties now emit a warning when compiling.
  • SSH: Added Settings.TryPasswordFirst and Settings.WaitForServerWelcomeMessage workarounds to Scp and Ssh.
  • SSH: Added support for message authentication algorithms based on SHA-2 on .NET Compact Framework (when supported natively).
  • SSH: Fixed NullReferenceException thrown by some SshSession properties (such as IsConnected) when not connected.
  • SSH: SHA-2 is now the preferred message authentication algorithm.
  • SSH: Added logging of SSH packet header data on decoding error.
  • SSH: Added support for larger SSH packets.
  • TLS/SSL: Unified status handling in ValidatingCertificate events and ICertificateVerifier interface.
  • TLS/SSL: Enhanced TLS/SSL version mismatch handling.
  • Cryptography: Fixed final empty block handling in Twofish/Blowfish/ArcTwo TransformFinalBlock with PKCS #7 padding.
  • Cryptography: SSH and TLS/SSL now use Java-based Diffie-Hellman objects on Xamarin.Android platform to speed up negotiation.
  • Common: Fixed end-of-line sequences in LogWriterBase, optimized FileLogWriter.
  • Common: Added workaround for broken ASN.1 time values with the second part of "60".

2015 R3.1 #

(build 5584 from 2015-04-15)

Maintenance release

This release disables "arcfour" cipher in SSH client core. Unless you are running FTP, IMAP, POP3 or SMTP over an SSH channel, there is no need to upgrade.

Detailed list of changes:

  • SSH: Disabled legacy "arcfour" SSH cipher by default.
  • SSH: Fixed a bug that caused an algorithm list set by Settings.SshParameters.SetEncryptionAlgorithms to be ignored in FIPS-compliant mode.

2015 R3 #

(build 5577 from 2015-04-08)

Disabled RC4 in TLS/SSL

The security of RC4 symmetric encryption algorithm has been questionable for many years. Recently, researchers have been able to exploit RC4's invariance weakness vulnerability to retrieve about 64 bytes of encrypted information of a very small fraction of TLS/SSL connections that happen to use weak keys. Since RC4 is no longer believed to be secure, it has been disabled by default.

Detailed list of changes:

  • All: Fixed Version property of Ftp, Imap, Pop3, Scp, Sftp, Smtp and Ssh classes to return a proper version number. Changed Ftp.Version to a static propery to match the other objects.
  • FTP: Added a workaround for broken firewalls that send an invalid response of "27 Entering passive mode (...)" when initiating a data transfer.
  • SSH: Enhanced some authentication error messages.
  • TLS/SSL: Disabled ciphers based on RC4 to prevend Bar Mitzvah attack on TLS/SSL.
  • Cryptography: Enhanced weak signature algorithm detection during certificate validation on Xamarin.iOS.
  • Common: Connect methods no longer require FileIOPermission (used to determine the assembly version for a log).

2015 R2 #

(build 5555 from 2015-03-17)

Fix for FREAK vulnerability

This release fixes vulnerability to FREAK exploit. The vulnerable 512-bit legacy 'exportable' TLS/SSL ciphers have been disabled.

Support for TLS 1.2

Support for TLS 1.2 has been added, along with support for AES/SHA-256 cipher suites.

Detailed list of changes:

  • TLS/SSL: Added support for TLS 1.2.
  • TLS/SSL: Added support for AES ciphers with SHA-256 checksums.
  • TLS/SSL: Disabled legacy 'exportable' ciphers (by default) to prevent FREAK security exploit.
  • Cryptography: Added support for SSLeay private keys with AES-256-CBC encryption.
  • Cryptography: Fixed broken HashSize property in SHA-2 CSP on .NET Compact Framework.

2015 R1 #

(build 5512 from 2015-02-02)

Support for Xamarin Unified API

Added support for the new Unified API. This includes unified 32-bit and 64-bit platform support and makes it simple to share code between iOS and Mac.

Detailed list of changes:

  • All: Added support for Xamarin.iOS unified API.
  • FTP: Compatibility enhancements in Ftp.FileExists and Ftp.GetInfo methods.

2014 R3 #

(build 5466 from 2014-12-18)

Legacy SSL 3.0 disabled by default in TLS/SSL-enabled components.

TLS 1.1 is now used by default in TLS/SSL-enabled components. Legacy SSL 3.0 support is disabled by default because it is no longer considered secure. Its use is strongly discouraged after disclosure of POODLE Attack.

Maintenance release

This update brings several improvements, workarounds and bugfixes.

Detailed list of changes:

  • All: Added more overloads to asynchronous Connect and Login methods.
  • All: Removed legacy Connect methods and enumerations from Xamarin.iOS and Xamarin.Android version (should never have been there).
  • FTP: Fixed improper logging of data received over FTP control connection.
  • FTP: Fixed a bug that caused Ftp.DataPortRange to be ignored.
  • FTP: Enhanced DataPortRange to better handle multiple Ftp objects with overlapping data port ranges.
  • FTP: Added workaround for WinFtp Server's incorrect MDTM response which does not contain the milliseconds delimiter.
  • FTP: Fixed MLST quoting workaround for the ProFTPD server. It is now only applied in 1.3.2x versions of ProFTPD server.
  • FTP: Added workaround for WinFTP's server broken MDTM command.
  • FTP: Made it possible to enabling wrong passive mode IP address workaround when using a proxy (if DNS resolution works locally).
  • SSH: Enhanced SshPublicKey constructor to accept base64-encoded public key data.
  • SSH: Added workaround for wrong SSH_MSG_USERAUTH_PK_OK packet in Cisco SSH.
  • TLS/SSL: TLS 1.1 is now used by default in TLS/SSL-enabled components. Legacy SSL 3.0 support is disabled by default.
  • TLS/SSL: Added experimental support for AES and Twofish based anonymous ciphers.
  • Cryptography: Fixed SymmetricKeyAlgorithm.Padding for non-CBC modes.
  • Cryptography: Added support for base-64 encoded P7B certificate chains.
  • Cryptography: Changed padding of parameters exported by DSAManaged.ExportParameters to match DSACryptoServiceProvider.
  • Cryptography: Added AsymmetricKeyAlgorithm.PublicOnly property.
  • Cryptography: Added workaround for non-working HMACSHA256/384/512 on some FIPS-only systems.
  • Cryptography: Added CertificateExtension.EnhancedKeyUsage method Useful when constructing certificate requests using CertificateRequest object.
  • Cryptography: Fixed DiffieHellmanManaged.KeySize that sometimes reported shorter bit lengths.
  • Cryptography: Several new AsymmetricKeyAlgorithm-based methods added to Certificate and CertificationRequest.
  • Common: Added LocalItem.Attributes property.
  • Common: PKCS #12 key loading routines changed to not persist keys in Windows key storage by default.
  • Common: Added ConsoleLogWriter, a console-based log writer class.

2014 R2 #

(build 5298 from 2014-07-03)

Maintenance release

This update brings several improvements, workarounds and bugfixes.

Detailed list of changes:

  • All: Eliminated "Unknown heap type" warnings in Mono.
  • FTP: Multi-file operations only try to determine the current remote path if it is actually needed.
  • FTP: Added an option to force EPSV/EPRT commands.
  • Networking: Enhanced logging of failed certificate validation errors.
  • Proxy: Fixed ProxySocket's Connect method behavior with disabled timeout.
  • TLS/SSL: Enhanced TlsVersion and TlsCipherSuite parameters checking.
  • TLS/SSL: Fixed alert names in TlsException messages.
  • Cryptography: Added Load, Save and Generate methods to PrivateKeyInfo and PublicKeyInfo classes.
  • Cryptography: Enhanced CertificationRequest class to support request generating in addition to parsing.
  • Cryptography: Fixed behavior with disabled UseFipsAlgorithmOnly on FIPS-only systems.

2014 R1 #

(build 5171 from 2014-02-26)

Maintenance release

This update brings several improvements, workarounds and bugfixes.

Detailed list of changes:

  • All: Various small low-level optimizations.
  • FTP: Added workaround for small chunks of data received while uploading.
  • Networking: Added static NetworkSession.DefaultLogWriter property to make it easily possible to set a shared log writer for all Ftp/Sftp/Imap/Smtp/Pop3/Scp/Ssh/SshSession objects.
  • Proxy: Enhanced logging capabilities of ProxySocket class (Socket4/Socks5 proxies).
  • SSH: Added support for SHA-2 (SHA-256 and SHA-512) message authentication codes.
  • SSH: Enhanced CTR mode workaround for OpenSSH 4.x.
  • SSH: Fixed missing MAC algorithm ID in SshCipher.ToString().
  • SSH: Standard form of SSH_MSG_KEX_DH_GEX_REQUEST packets is used with recent OpenSSH servers instead of its legacy form.
  • TLS/SSL: Added new Certificate-based CertificateRequestHandler.CreateRequestHandler overloads.
  • Cryptography: Fixed a bug in MD5SHA1 signature validation on .NET Compact Framework.
  • Cryptography: Fixed AES CSP availability detection in FIPS-compliant mode.
  • Cryptography: Fixed sorting of PKCS #7 signature attributes.
  • Cryptography: Added support for AES-128-CBC SSLeay private keys.
  • Cryptography: Added workaround for certificates and keys in Base64-encoded format ending with a zero octet.
  • Common: Assemblies made more obfuscator-friendly.
  • Common: Fixed null value comparisons in FileSystemItemComparer.

2013 R3 #

(build 5085 from 2013-12-02)

Support for Xamarin.iOS and Xamarin.Android

Rebex components now support Xamarin.iOS and Xamarin.Android, making it possible to target iPad/iPhone and Android devices! (The only exception is the Terminal Emulation component whose TerminalControl object relies heavily on Windows Forms and is only available for Windows and Linux at the moment.)

Support for .NET Compact Framework 3.9

In addition to .NET CF 2.0 and 3.5, we now support .NET CF 3.9 as well. This makes it possible to target Windows Embedded Compact 2013, Microsoft's latest incarnation of Window CE.

Assemblies for every supported platform for all

With every purchase, you now get binaries for all supported platforms. Users with active support contract were upgraded for free. This will make it easy to embrace the new trends - we offer a single API that works with .NET, .NET Compact Framework, Mono, Xamarin.iOS and Xamarin.Android.

Support for Visual Studio 2013

All Rebex components now ship with full support for Microsoft Visual Studio 2013. Older Visual Studio versions (2005 and higher) and .NET Framework versions (2.0 and higher) are still supported as well.

Detailed list of changes:

  • All: Xamarin.iOS and Xamarin.Android officially supported in all components except Rebex Terminal Emulation.
  • All: .NET Compact Framework 3.9 officially supported.
  • All: Visual Studio 2013 officially supported.
  • FTP: Added FtpSetting.RecheckItemExistence option to verify remote item existence before using it.
  • FTP: Support for checksum-based file modification checking added to Upload and Download methods (ActionOnExistingFiles.ChecksumDiffers).
  • FTP: Added support for AS/400 to batch operations (uses NAMEFMT extension).
  • FTP: Ftp.GetInfo method now always returns .Path and .Name parsed from the input "path" argument (instead of parsing MLST output when available).
  • FTP: FtpBatchTransferException made obsolete (use FtpException instead).
  • FTP: Enhanced SSCN mode handling in server-to-server transfers (FXP), making it more compatible.
  • FTP: Fixing time checking in SetFileDateTimeSync (incorrectly used millisecond precision).
  • FTP: Asynchronous version of the GetRemoteChecksum method added.
  • FTP: Fixed assignment of default reaction in response to a problem encountered during Upload/Download methods.
  • Networking: On Windows 8 and 8.1, larger TCP receive buffer size is used by default. The default value caused low transfer speeds in many cases with FTP and SFTP.
  • Networking: Added IsAuthenticated and IsConnected properties to NetworkSession (Ftp, Sftp, Scp, Imap, Smtp, Pop3, Ssh and SshSession objects).
  • Proxy: Added support for digest authentication to HTTP CONNECT proxies.
  • Proxy: Fixed ProxySocket.BeginSend and BeginReceived methods which used to fail in some scenarios.
  • SSH: Added support for additional formats to SshPublicKey/SshPrivateKey object's SavePublicKey method and SshPublicKey constructor.
  • SSH: Enhanced error checking to report a more meaningful error instead of "Invalid decoder state" in case of some connection failures.
  • SSH: Enhanced GSSAPI/Kerberos support to be compatible with OpenSSH.
  • SSH: Added Kerberos ticket delegation support.
  • SSH: Added GSSAPI/Kerberos support to .NET CF version of SSH core.
  • Cryptography: Changed Certificate.FindCertificates method not to include subordinate CAs in the search by default.
  • Cryptography: Fixed CertificateStore.Exists on non-Windows platforms.
  • Cryptography: Added workaround for opening certificate stores in .NET CF that don't exist yet.
  • Cryptography: Added workaround for problem with DSA certificate in .PFX importing code on Windows Embedded Compact 2013.
  • Cryptography: Added .NET CF support for Certificate.Associate(privateKey, permanentBind)
  • Cryptography: Added Certificate.GetAuthorityKeyIdentifier() method.
  • Cryptography: Changed SignerInfo and SignerInfo objects to use NULL parameters for hash algorithms (in order to match RSACryptoServiceProvider behavior).
  • Common: Added FileLogWriter.Path to replace FileLogWriter.Filename.
  • Common: Added LocalItem.ComputeCrc32() method.
  • Common: Signed and encrypted message parsing made more compatible with broken messages.

2013 R2 #

(build 4981 from 2013-08-20)

Maintenance release

This update brings several improvements and workarounds.

Detailed list of changes:

  • Networking: Added support for IPv6 hostnames with zone IDs.
  • TLS/SSL: Added workaround for MS FTP's TLS 1.1 bug in close_notify handling.

2013 R1 #

(build 4959 from 2013-07-29)

Official support for Mono

All Rebex components now officially support Mono, an open source, cross-platform, implementation of C# and the CLR that is binary compatible with Microsoft .NET Framework. The same assemblies that work on Windows now work on Mono in Linux or Apple OS X as well.

Unified FTP and SFTP item comparers

Although FtpItemCollection and SftpItemCollection objects have been derived from a shared base class since the introduction of IFtp (a common interface for SFTP and FTP/SSL), a common base class for FtpItemComparer and SftpItemComparer has been missing. In this release, we added FileSystemItemComparer to fix this inconvenience.

Detailed list of changes:

  • All: Added support for Mono.
  • All: Fixed finalizers that used to call state-changed events in some cases.
  • FTP: GetItems now returns links instead of resolved items.
  • FTP: Ftp.Settings.RestoreDateTime now applies to PutFile and GetFile methods as well.
  • FTP: Fixed handling of broken links when deleting.
  • FTP: Fixed a conflict of ConnectPassiveLater option and XFB server workaround.
  • FTP: Added Ftp.Settings.TimeComparisonGranularity property.
  • FTP: Ftp.Settings.UploadCommand now used in GetUploadStream and Upload methods as well.
  • FTP: Multi-file operations use relative paths if possible.
  • FTP: Sanity check for GetCurrentDirectory return value added to multi-file operations.
  • FTP: Added proxy authentication support to FtpSite and FtpOpen proxy types.
  • FTP: Improved Ftp.FileExists to work with servers that return code 553 to indicate non-existent file or directory.
  • FTP: Fixed Gene6 FTP server version detection (v3.10 was detected as v3.1).
  • FTP: Ftp.GetConnectionState() method made more reliable.
  • FTP: Added Ftp.Settings.KeepAliveDuringTransferInterval to replace Ftp.KeepAliveDuringTransferInterval.
  • FTP: When using TransferMethod.Move, only successfully transferred files are deleted.
  • FTP: Enhanced TLS connection error handling - FtpException with ConnectionClosed state is thrown.
  • FTP: Fixed possible race condition on multi-file methods.
  • FTP: Optimized directory existence detection for current directory.
  • FTP: Added workaround for server that appends 'bytes' to the end of response to the SIZE command.
  • FTP: GetList and GetInfo return a path in the Path property.
  • FTP: Item type order of FtpItemComparer reversed to match Rebex SFTP.
  • FTP: Added workaround for ncFTPd's partially-broken MLST command.
  • FTP: TransferType and TransferMode now persist through sessions.
  • FTP: Enhanced multi-file operation logging.
  • FTP: Added FileSystemItemComparer to replace FtpItemComparer and SftpItemComparer.
  • FTP: Multi-file operations fixed to work properly with '.'-based FileSets.
  • FTP: Several options shared by Ftp and Sftp objects added to IFtpSettings.
  • FTP: Fixed Delete("dir/.") that used to delete "dir" as well.
  • Proxy: Added support for HTTP CONNECT proxy communication logging.
  • SSH: Dispose and Disconnect methods added to SshSession object and Close method deprecated.
  • SSH: SshSession now throws exceptions with ConnectionClosed status on closed connections.
  • SSH: Fixed SshException.Data["ProtocolCode"] and .Data["ProtocolMessage"] values.
  • SSH: Added verbose logging of raw data during welcome message exchange.
  • SSH: Fixed FingerprintCheck, BannerReceived and AuthenticateRequest events in Ssh.
  • TLS/SSL: SslInsertEmptyFragments property added to SslSettings.
  • TLS/SSL: Fixed null TlsParameters.Certificate handling in server-side TlsSocket.
  • Cryptography: Added support for anyExtendedKeyUsage attribute (in X.509 certificates).
  • Cryptography: Added DiffieHellmanCryptoServiceProvider class.
  • Cryptography: Added PrivateKeyFormat.RawPkcs8 format for PrivateKeyInfo.Save and PrivateKeyInfo.Encode methods.
  • Cryptography: RSAManaged.VerifyHash returns false on error.
  • Cryptography: Fixed ArcTwoTransform to treat EffectiveKeySize of 0 as "current KeySize".
  • Cryptography: HMAC fixed to use block length of 128 for algorithms with hashes larger than 256 bits.
  • Cryptography: Fixed certificate verification to better handle server certificate with missing common name (used to throw NullReferenceException).
  • Cryptography: Fixed handle leak in CertificateStore constructor.
  • Common: Enhanced workaround for Stream.Seek on .NET CF.
  • Common: FileLogWriter enhanced to log assembly version when opening log file.
  • Common: Added missing PublicKeyInfo() constructor.
  • Common: Added FileSet.ContainingDirectoriesIncluded option.
  • Common: Added workaround for instances of FileStream that return "[Unknown]" name.
  • Common: EncodingTools support IBM437 charset on all platforms.
  • Common: Added CertificateFindOptions.None.
  • Common: Added FileSystemItemCollection.UsePath property.

2012 R3 #

(build 4700 from 2012-11-12)

Official support for Visual Studio 2012

All Rebex components now ship with full support for Microsoft Visual Studio 2012. Samples and tutorials were updated for a new project file format. Older Visual Studio and .NET Framework versions are still supported too.

Task-based asynchronous methods

The major change is the addition of new Task-based asynchronous methods to .NET 4.0/4.5 variant of our components. This brings our API up-to-date with the current trends and makes it possible to utilize the new await keyword available in .NET 4.5 and Visual Studio 2012. Finally, asynchronous programming became easy and seamless. Check out some of the updated samples to see this in action!

Events now using SynchronizationContext

Previously, events raised by asynchronous methods were running in a background thread, making them hard to use in GUI applications. Now, events are raised using the SynchronizationContext captured when the asynchronous method was started, which basically means the events will run on application's GUI thread, making it possible to update application's controls directly from the event code.

Simplified Connect methods

We simplified even the most common task - connecting to a server. All you have to supply to the Connect method of Ftp, Imap, Pop3 or Smtp object is the server hostname and an SslMode. The Connect method automatically chooses the port according to the communication protocol and the specified SSL mode.

Simplified custom certificate validation

We added a new ValidatingCertificate event to Ftp, Imap, Pop3 and Smtp. It makes it much easier to write custom certificate validation routines - all you have to do is add an event handler which either calls e.Accept() or e.Reject().

Detailed list of changes:

  • All: Added .NET 4.x-style task-based asynchronous methods to objects previously using .NET 1.x-style Begin/End asynchronous pattern.
  • All: Asynchronous method events are raised using the current synchronization context for the asynchronous operation.
  • All: Added options to force the old-style event behavior (not using the current synchronization context).
  • All: Added Rebex.Legacy namespace to .NET 4.x builds to allow compiling code that uses old-style asynchronous methods.
  • All: Added official support for Visual Studio 2012.
  • FTP: Added Ftp.Settings.As400ListingDateFormat property to make it possible to specify AS/400 listing date format.
  • FTP: Added Ftp.Settings.UploadCommand to make it possible to specify a different upload command to be used instead of STOR.
  • FTP: Removed deprecated Ftp.SetTransferType and Ftp.Logoff methods.
  • FTP: Removed unused FtpBatchTransferOperation.FileDataBlockProcessed value.
  • FTP: FtpException.Response is now set for some OperationFailure errors as well.
  • FTP: Ftp.DirectoryExists/FileExists methods enhanced to support more servers.
  • FTP: Added a support for "cdir" field on MLST command results (fixed NullReferenceException in GetFileDateTime method with some FTP servers).
  • FTP: Added Ftp.Settings.UseLegacyPaths flag to enable old-style path reporting in multi-file operation events.
  • FTP: Fixed ActionOnExistingFiles.ResumeIfPossible behavior to skip existing files if already transferred.
  • FTP: Multi-file operation events always report absolute paths.
  • FTP: Enhanced source path checking in multi-file operations.
  • FTP: Fixed a bug in AS/400 listing parser that caused the last modified datetime to be parsed incorrectly.
  • FTP: Added simplified Connect method overload with SslMode argument.
  • FTP: FtpBatchTransferException object was made redundant (its properties were moved to FtpException).
  • FTP: Added Ftp.Settings.RestoreDateTime property to make it possible to restore source date/time on target.
  • FTP: Fixed argument checks in GetUploadStream/GetDownloadStream methods.
  • FTP: Added Rename value to ActionOnExistingFiles enum (used in Upload/Download methods).
  • FTP: Events Traversing, TransferProgressChanged, DeleteProgressChanged and ProblemDetected added into Ftp to make it possible to get notified about significant actions and to be able to react to a problem in multi-file operations.
  • FTP: Added Ftp.Settings.SslReuseSessions option to make it possible to disable TLS/SSL session reusing for data transfers.
  • Networking: NetworkSessionException is now the base class for all network protocol exceptions.
  • Networking: Task-based asynchronous methods added to IFtp interface.
  • Networking: Removed several Socket.Available calls, resulting in higher speed and Windows Azure compatibility.
  • Networking: Events Traversing, TransferProgressChanged, DeleteProgressChanged and ProblemDetected added into IFtp to make it possible to get notified about significant actions and to be able to react to a problem in multi-file operations.
  • SSH: Better error message for unsuccessful keyboard-interactive fallback workaround.
  • SSH: Enhanced "Invalid decoder state" error reporting.
  • SSH: Added support for diffie-hellman-group-exchange-sha256 key exchange algorithm.
  • SSH: Added SshPublicKey class, SshSession.ServerKey property and FingerprintCheck.ServerKey property (to make it possible to determine server host key in addition to fingerprint).
  • TLS/SSL: Fixed a bug in server-side TLS/SSL that caused it to fail when session resuming was enabled.
  • TLS/SSL: Fixed TlsException serialization that failed for some errors.
  • TLS/SSL: Fixed a bug that caused problems with TLS/SSL in FIPS-only mode.
  • Cryptography: Fixed a bug in TransformFinalBlock method of Rebex.Security.Cryptography ciphers that caused interoperability issues with CryptoStream.
  • Cryptography: Fixed PKCS#7 padding check in built-in ciphers.
  • Cryptography: Added EncodingTools class that adds support for all the charsets needed on all platforms.
  • Cryptography: Added auto-detection of a bug in unpatched .NET 3.5's AesCryptoServiceProvider object.
  • Cryptography: Implicit ObjectIdentifier(string) constructor added.
  • Cryptography: Fixed CryptoHelper.CreateAlgorithm to return CSP version of SHA-2 hash algorithms when available.
  • Cryptography: Fixed CertificateFinder property behavior to keep old certificates if no certificates are found by the new finder.
  • Cryptography: Server certificate verification routine now allows certificates with '*' names to be used for '' in addition to '*'.
  • Cryptography: Fixed a bug in private key decryption routine which failed with keys encrypted with PKCS #12 key derivation algorithm.
  • Common: Fixed P/Invokes in NTLM/Kerberos code.
  • Common: AddRange method added to file item collections.
  • Common: FIPS 140-2 compliant mode enhancements.
  • Common: Fixed certificate validation issue on Windows XP and Windows Server 2003.
  • Common: Added Certificate.Thumbprint property.
  • Common: Fixed a bug in certificate chain building routine that caused it to ignore additional stores in some cases.

2012 R2 #

(build 4546 from 2012-06-11)

Detailed list of changes:

  • FTP: Added support for "double-login" FTP proxy servers.
  • FTP: Added Ftp.GetItems(string, ...) methods.
  • FTP: Link resolving code enhanced to better handle FTP servers on Un*x-like platforms.
  • FTP: Added support for additional MLSD attributes (creation time, Unix mode/owner/group and Windows file attributes).
  • FTP: Added support for OPTS UTF8 on RaidenFTPD server.
  • FTP: Added Download/Upload(string, string) method overload.
  • FTP: Added support for common names with '*' wildcard to CertificateChain.Validate.
  • FTP: Added support for instances of MS FTP 7.5 which request hostname.
  • FTP: MLST is now used in Ftp.GetFileDateTime by default.
  • FTP: Added workaround to SetFileDateTime that checks whether the correct time was set and fixes it if it was not.
  • FTP: Compatibility enhancements in multifile methods.
  • FTP: Fixed FtpProxy serialization where Encoding was omitted.
  • Networking: UseLargeBuffers option added into IFtpSettings.
  • SSH: Added SshPrivateKey(AsymmetricAlgorithm) constructor that makes it possible to initialize it from RSACryptoServiceProvider/DSACryptoServiceProvider (useful for SmartCard-based keys).
  • SSH: Fixed wrong handling of large remote SSH channel window sizes (used by mod_sftp server).
  • SSH: Client certificate authentication added (compatible with VanDyke VShell server).
  • SSH: ZLIB support announced even when not preferred (without that, we were unable to connect to servers that refuse uncompressed sessions).
  • SSH: Fixed a bug that causes a misleading error to be reported on immediately-closed connections.
  • SSH: Added workaround for mod_sftp/0.9.7 which occasionally produces broken DSA signatures.
  • TLS/SSL: Fixed a misleading error message which was reported when certificate revocation status could not be checked.
  • TLS/SSL: When ProtocolVersion error occurs, data received prior to it is logged.
  • Cryptography: Fixed local/UTC time comparison in Certificate.IsTimeValid.
  • Cryptography: Added implicit conversion between Certificate object and X509Certificate/X509Certificate2 objects.
  • Cryptography: Enhanced compatibility with Mono on non-Windows platforms - Certificate validation now works!
  • Cryptography: Support for saving .PFX/.P12 files added to Certificate.Save method.
  • Cryptography: Added new overloads of Certificate.Associate that make it possible to permanently bind the private key to the certificate.
  • Cryptography: Added Certificate.FriendlyName property.
  • Cryptography: Fixed Certificate.SignHash method which used to fail on .NET 2.0 when an associated key was used for MD5SHA1 signature generation.
  • Cryptography: Fixed MD5Managed.HashSize property which used to return 0.
  • Cryptography: Certificate.HasPrivateKey code in .NET CF version changed to behave identically to .NET version.
  • Common: Added FileSet.Flatten option (makes it possible to ignore source directory structure and copy all files into single target directory).
  • Common: Enhanced error reporting of file-path-based methods.
  • Common: Added LocalItem and LocalItemCollection classes (used by FileSet.GetLocalItems method).

2012 R1 #

(build 4444 from 2012-03-01)

Components DLLs have been renamed

We found out that the DLL naming scheme we decided to use back in 2003 was no longer sustainable and decided to change it. Instead of Rebex.Net.Ssh.dll, Rebex.Net.SecureSocket.dll, Rebex.Net.ProxySocket.dll and Rebex.Security.dll, we now have Rebex.Common.dll and Rebex.Networking.dll. Most of the other DLLs were renamed as well during the process (Rebex.Net.Ftp.dll became Rebex.Ftp.dll, for example). We are sorry for any inconvenience this may have caused, but an alternative solution - introduction of a new DLL for shared functionality - would not be hassle-free either. Fortunately, in order to upgrade to the new version, most customers will only need to remove references to the old DLLs and add references to the new ones because the API is still backward-compatible.

New multi-file methods in Rebex SFTP and FTP/SSL

FTP/SSL and SFTP got several new methods: Upload, Download, Delete and GetItems. The first two are replacements for PutFiles/GetFiles (and support move operation in addition to copy), Delete makes it possible to delete multiple files (or even a directory tree) at once and GetItems makes it possible to retrieve a list of files for the whole directory tree in one call.

Common API for SFTP and FTP/SSL (experimental)

Lot of our customers have been asking for a common API capable of both SFTP and FTP/SSL. Even though Ftp and Sftp objects provide a very similar API, they are still two distinct classes and writing code that can use either of them was hard. Now, it got much better with the introduction of IFtp interface.

Detailed list of changes:

  • All: SecurityRuleSet.Level2 is used for .NET 4.0 binaries.
  • All: Added a Stream.Flush() call after each Stream.Seek() or Stream.Position call in .NET Compact Framework (workaround for .NET CF FileStream bug).
  • FTP: Auto-resume capability added for PutFiles/GetFiles methods.
  • FTP: Fixed a bug in handling some NOOP responses.
  • FTP: DoNotDetectFeatures option now turns off server feature detection completely, not only the one using the FEAT command.
  • FTP: Fixed a bug in PutFiles method that caused incorrect behavior when a root-based masked path was specified.
  • FTP: Better GlobalScape server detection.
  • FTP: Ftp.GetFile called with non-zero localOffset creates the local file if it doesn't exists.
  • FTP: String comparison methods use StringComparison.Ordinal.
  • FTP: GetList/GetRawList methods log the list content at Debug log level.
  • FTP: Added workaround to GetFiles method for servers that return full paths in file listings.
  • FTP: New values related to Upload, Download, Delete and GetItems methods added to FtpBatchTransferOperation enum.
  • FTP: Added a workaround for servers that append a dot to their SIZE response.
  • FTP: Fixed date parsing in 24h DOS-like file listings.
  • FTP: Fixed problems with synchronization when EnableMultipleBlockingCalls option is enabled.
  • FTP: FTP no longer attempts to resume TLS/SSL session for data connection when TlsOptions.DoNotCacheSessions option is used.
  • FTP: New Download, Upload, Delete and GetItems methods added to Ftp object (along with associated enums and classes).
  • FTP: Added Ftp.Settings property that replaces and extends Ftp.Options.
  • FTP: Ftp object implements IFtp interface to make it easier to write code which works with both FTP and SFTP.
  • FTP: Multi-file operations optimized by omitting existence check of items found during the operation.
  • FTP: Added a workaround for GlobalScape servers that used to ignore the last packet in some circumstances.
  • Networking: Socket.NoDelay is used by default in non-CF version of Rebex components.
  • SSH: Fixed error handling in SshSession.OpenTcpIpTunnel method that caused troubles when multiple channels were active at the same time.
  • SSH: SshChannel no longer attempts to adjust window size after the channel has been closed.
  • TLS/SSL: Fixed non-working TlsSocket.BeginSend and BeginReceive methods.
  • Cryptography: Certificate.Save and Certificate.SavePrivateKey methods added, along with a corresponding variant of Certificate.LoadDerWithKey.
  • Cryptography: PKCS #7 writer changed to use a more compatible variant of EncryptedContent in EncryptedContentInfo structure. This solves interoperability issues with Entrust CSP and signed messages.
  • Cryptography: Added ObjectIdentifier.ToArray(bool useDer) method.
  • Cryptography: CertificateChain.LoadP7b method added (used for loading .P7B certificate chains).
  • Cryptography: Faster Blowfish and Twofish algorithms.
  • Cryptography: SubjectPublicKeyInfo.Load method now supports binary keys.
  • Cryptography: Removed lots of CryptoApi dependencies from Certificate code.
  • Cryptography: 4096-bit DSA keys (used by some SSH servers) are no longer rejected.
  • Cryptography: Diffie-Hellman and DSA algorithms fall back to managed ModPow calculation on .NET CF with missing "Enhanced DSA and Diffie-Hellman" CSPs.
  • Cryptography: Added Certificate.Associate(PrivateKeyInfo) method.
  • Cryptography: Certificates associated with a private key using Associate method now support MD5SHA1 hash algorithm and suitable for TLS/SSL client certificate authentication.
  • Common: Fixed a bug in TraceLogWriter that caused an additional newline to be written at the end of each message.
  • Common: Added FileSystemItem and FileSystemItemCollection classes.
  • Common: Better readability in Verbose-level logs.
  • Common: Thread ID added to all log messages.

3.0.4086.0 #

(build 4086 from 2011-03-09)

Detailed list of changes:

  • FTP: Missing end-of-data blocks in are ignored in MODE Z transfers (some FTP servers failed to send them).
  • FTP: GetList, GetRawList and GetNameList methods with empty arguments now behave like their parameter-less variants.

3.0.4060.0 #

(build 4060 from 2011-02-11)

Detailed list of changes:

  • FTP: Group, Owner and Permissions properties added to FtpItem class.
  • FTP: Added support for Transnet FTP Gateway's list format.
  • FTP: BytesTotal and ProgressPercentage properties added to Ftp.TransferProgress event arguments.
  • FTP: Added a new overload for the Login method that accepts account in addition to username and password.
  • FTP: Added FtpOptions.ForceListHiddenFiles option to force using "LIST -la" instead of "LIST" command to retrieve file and directory listings.
  • FTP: Fixed a bug that caused a list parser to failed for symlinks with missing target path.
  • FTP: Added support for Tandem Guardian FTP server list format.
  • FTP: FtpItemComparer class added to ease sorting of FtpList items.
  • FTP: Enabling FtpOptions.EnableControlConnectionFlushing option doesn't cause a noticeable slowdown now.
  • FTP: Ftp.PutFiles method (in ThrowExceptionOnLinks mode) correctly detects the links in Windows 7 which were not detected previously.
  • FTP: Added a workaround for servers that advertise MLST support but report a "Can't check for file existence" error later.
  • FTP: Ftp.IsAuthenticated property added to make it easily possible to skip calling Ftp.Login method for users already authenticated using a certificate.
  • FTP: Fixed a bug in ZLIB decompression routines.
  • FTP: Fixed improper TLS/SSL session reusing. FtpOptions.FtpReuseControlConnectionSession option added to make it possible to re-use the control connection session for subsequent data connections as well.
  • FTP: Support for IBM AS/400 FTP listing format added.
  • FTP: Added workaround for FTP servers which don't properly end the ZLIB stream when MODE Z is used.
  • ProxySocket: Added a new ILogWriter implementation that logs all messages to .NET's System.Diagnostics.Trace.
  • Cryptography: Added a new overload of SshPrivateKey.Save to make it possible to save keys in SSLEay/OpenSSH format (in addition to PuTTY .ppk and PKCS #8 formats).
  • Cryptography: Added CertificateChain.Save method to save the chain in .p7b format.
  • Cryptography: Fixed a bug in DistinguishedName object that caused the elements of string representation of DNs to be reversed.
  • Cryptography: Added CryptoHelper.ForceManagedAes flag as a workaround to .NET's leaking AesCryptoServiceProvider.

3.0.3854.0 #

(build 3854 from 2010-07-20)

Detailed list of changes:

  • FTP: Ftp class inherits from NetworkSession base class that implements some common properties.
  • FTP: Added a workaround for an FTP server with broken MLST output.
  • FTP: SITE command is no longer used to detect MS IIS FTP 7.x because it caused problems to some firewalls.
  • FTP: FtpList.GetEnumerator is now an implementation of IEnumerable<FtpItem>.
  • FTP: Better error handling in GetFiles/PutFiles methods.
  • FTP: Added FIPS 140-2 compliant mode that is automatically enabled on systems where only compliant algorithms are allowed.

3.0.3793.0 #

(build 3793 from 2010-05-20)

Detailed list of changes:

  • All: Packages for .NET 4.0 and Visual Studio 2010 now available.
  • FTP: A more meaningful exception is raised when a premature OK response is received while still uploading data.
  • FTP: Information about invalid data IP address detection is now written to the log.
  • FTP: Fixed a bug that caused "/" local path argument of PutFiles/GetFiles methods to be treated as current directory.
  • FTP: More information is logged when a FTP connection is broken.
  • FTP: A full local path is passed in FtpBatchTransferProgressEventArgs.
  • FTP: Added experimental FtpOptions.UseLargeBuffers to use larger internal buffers (doesn't seem to make substantial difference on most systems).
  • FTP: Fixed a bug in PRET command implementation that caused problems with DrFTPd servers.
  • FTP: FtpTransferProgressEventArgs now contain RemotePath and LocalPath when available.
  • FTP: FtpBatchTransferException is now serializable.
  • FTP: On .NET Compact Framework, SO_LINGER option is enabled for data sockets.
  • FTP: Added support for Tumbleweed's SSL-like encrypted tunnel encryption.
  • FTP: Useless pre-authentication feature check in implicit SSL mode removed.

3.0.3723.0 #

(build 3723 from 2010-03-11)

Detailed list of changes:

  • FTP: Maximum allowed UploadBufferLength changed from 64KB to 16MB.
  • FTP: Ftp.Connect method no longer throws UriFormatException when invalid proxy hostname is specified.
  • FTP: Added support for OTC S/KEY(tm) (One-Time Password System) authentication according to RFC 2289 (optionally used by Serv-U FTP Server). (S/KEY is a trademark of Bellcore.)
  • FTP: Added FtpBatchTransferOptions.XCopy batch transfer mode. This is an alternative form of FtpBatchTransferOptions.Recursive that traverses all subdirectories but only transfers files that match the specified mask.
  • FTP: New Ftp.DataAddress property to make it possible to specify active mode IP address transmitted to the FTP server.
  • FTP: FtpTransferProgressEventArgs.BytesPerSecond property added that contains the estimated current speed.
  • FTP: HierarchyRetrieve events are no longer raised when only a single file is transferred.
  • FTP: A more meaningful exception is thrown when a directory path is passed to Ftp.GetFile method instead of file path.
  • FTP: Ftp.TransferProgress event is called less often on high-speed connections now (several times per second is sufficient).
  • FTP: FtpOptions.SendDataAsynchronously is deprecated and ignored.
  • FTP: Fixed PutFiles method to accept all kinds of root paths (such as "c:", "c:/", or "c:\" - previously, only "c:\." worked).
  • FTP: Added Ftp.DefaultImplicitSslPort constant.
  • ProxySocket: The underscore character is now allowed in hostnames (this is non-standard, but used by Windows).
  • ProxySocket: FileLogWriter is capable of logging into a single file from multiple applications now.
  • ProxySocket: ProxySocket.Send behavior changed to always send all the data or fail.
  • Cryptography: Added Certificate.LoadDerWithKey method to make it possible to easily load certificates with private keys in external file (Unix-style).
  • Cryptography: Support for PKCS #7 EnvelopedData encrypted using RC2 with effective key length not equal to key data length.
  • Cryptography: Fixed a bug in EnvelopedData class that cause a NullReferenceException to be raised when unsupported encryption algorithm is encoutered.
  • Cryptography: Internal ModPow method optimized.
  • Cryptography: Key generation support removed from RSAManaged a DSAManaged. No part of any of our components ever used it at it was prohibitively slow anyway.
  • TLS/SSL: TlsSocket.SessionID is deprecated because its global cache was unsuitable for most applications. TlsSocket.Session (and the associated TlsSession class) should be used instead.

3.0.3588.0 #

(build 3588 from 2009-10-27)

Detailed list of changes:

  • FTP: Added a workaround for bad PASV implementation at
  • FTP: Enhanced MODE Z support.
  • FTP: CCC command no longer actively sends close_notify TLS message by default.
  • FTP: Fixed a bug in proxy code that caused data transfers to fail when using HTTP CONNECT proxy with NTLM authentication.
  • FTP: Added FtpOptions.ConnectPassiveLater option - makes the passive mode transfer initialize the connection only after the LIST/NLST/RETR/STOR commands are sent (instead of after PASV).
  • ProxySocket: Proxy object now has Encoding property that makes it possible to specify character set to be used for parsing server responses.
  • ProxySocket: ProxySocketException.ErrorCode property now returns HTTP and Socket4/Socks5 error codes when available.
  • ProxySocket: SspiAuthentication and GssApiProvider classes added that provide GSSAPI/SSPI functionality.
  • Cryptography: Certificate's CRL distribution point list can be accessed using GetCrlDistributionPoints method.

3.0.3479.0 #

(build 3479 from 2009-07-10)

Detailed list of changes:

  • FTP: Added automated UTF-8 detection on modern FTP servers.
  • FTP: Listing parser enhanced to support some non-English month names that sometimes occur in file listings of broken servers.
  • FTP: Fixed a bug that might cause an active FTP connection to immediately time out when executed on an existing but idle connection.
  • FTP: IEnumerable<T> support added to collections for .NET 2.0 and higher.
  • FTP: Ftp.CopyToAnotherServer method can now handle Abort requests.
  • FTP: Bandwidth throttling functionality slowed down the transfer too much when a limited but high speed was requested.
  • Cryptography: .PFX/P12 private key file loading support for Windows Mobile 5 and newer.
  • Cryptography: Added support for signatures based on SHA-2 (SHA-256, SHA-384 and SHA-512).
  • Cryptography: If .NET 3.5 is available, a new and much faster AES implementation is used instead of RijndaelManaged.
  • Cryptography: Behavior of certificate finders in CMS/PKCS #7 was enhanced - embedded certificates are always searched now.
  • TLS/SSL: Enhanced logging of certificate-related actions during the TLS/SSL negotiation.

3.0.3428.0 #

(build 3428 from 2009-05-20)

Detailed list of changes:

  • FTP: Fixed a bug in GetRemoteChecksum method that caused it not to work for filenames that contain space characters.
  • FTP: Disposing Ftp object from another thread while an operation is in progress no longer causes NullReferenceException and other similar errors to occur in the operation thread.
  • FTP: Better URL handling in the Connect method (although it is hostname-only by design, lot of users actually pass URLs to it).
  • FTP: Enhanced logging of incoming connection in active mode.
  • FTP: Added a workaround for WS_FTP that requires MLST/MLSD arguments to be quoted if they contain spaces.
  • FTP: Added FtpException.Transferred property as a replacement for the misspelled FtpException.Transfered property.
  • FTP: Fixed a bug that caused FtpException's BytesTransferred property not to be set for exceptions thrown by asynchronous methods.
  • FTP: Fixed a bug in MODE B transfer mode that might cause an improper block length to be received in rare circumstances.
  • FTP: Fixed a bug in GetFiles and PutFiles method that caused a wrong path to be used when a filename only was specified or when a root path was specified.
  • TLS/SSL: Exception thrown by the certificate verifier because of certificate hostname mismatch is more descriptive.
  • TLS/SSL: Added a workaround for vsftpd that occasionally leaks unencrypted error messages while TLS/SSL is in use, which causes an error when the client tries to decode them as proper TLS/SSL messages.
  • TLS/SSL: Fixed a bug that could cause a deadlock when closing a socket from one thread that is currently sending data using another thread.
  • TLS/SSL: Fixed possible NullReferenceException in TlsSocket class.
  • TLS/SSL: BeginSend and BeginReceive methods work again.

3.0.3333.0 #

(build 3333 from 2009-02-14)

Detailed list of changes:

  • FTP: Asynchronous operations now use a thread pool.
  • FTP: FileExists and DirectoryExists methods modified to return the result for "." and "/" arguments instantly without asking the server.
  • FTP: Fixed a workaround for problem with local IP address announced by the server when connecting through ActiveSync to an FTP server that runs on the same machine.
  • FTP: KeepAliveDuringTransfer option made compatible with more FTP servers.
  • FTP: When client certificate authentication is done with Tumbleweed FTP server, an automated login attempt is performed.
  • ProxySocket: Fixed a bug in Socks4/Socks5 proxy code that made it impossible to use FTP in active mode with these proxies.
  • Cryptography: CertificateStore.FindCertificate overloads that accept DistinguishedName now search for certificates signed by intermediate CAs as well.
  • Cryptography: Enhanced treatment of empty passwords in the PFX loader.
  • Cryptography: Certificates with SubjectAlternativeName extension marked as critical are now treated as not having any e-mail address assigned to them if no e-mail address is found in the extension data.
  • Cryptography: Fixed a bug in DiffeHellmanManaged.ImportParameters method that made it impossible to import key with all parameters filled.

3.0.3300.0 #

(build 3300 from 2009-01-12)

Detailed list of changes:

  • FTP: Added PutFiles and GetFiles method to make it possible to transfer multiple files easily by transferring a whole directory tree or use wildcards.
  • FTP: Packages for .NET Compact Framework 3.5 added.
  • FTP: Transfer compression support added to .NET CF 3.5 build (it has only been available for .NET 2.0 and higher previously).
  • FTP: Added a workaround for Serv-U FTP that ungracefully closes data connection for zero-length files.
  • FTP: A better exception is now thrown by a method that has been terminated by calling Dispose from another thread.
  • FTP: Substantial transfer speed increase on fast networks.
  • FTP: Fixed a bug that caused the KeepAliveDuringTransfer option not to work properly.
  • FTP: Asynchronous method threads are now named.
  • FTP: Added a workaround for misconfigured FTP servers that send an unusable private network address when initializing a data transfer.
  • FTP: Disabled control connection flushing when sending commands because it caused a noticeable slowdown on fast networks.
  • FTP: FtpOptions.KeepAliveDuringTransfer option code enhanced by adding the '200 No-operation ...' response to the list of possible NOOP command responses.
  • FTP: SetTransferType method changed to behave just like TransferType property and marked obsolete.
  • FTP: Added workaround for some releases of SecureTransport server - ForceSilentCcc option is enabled automatically.
  • FTP: Fixed a bug in CopyToAnotherServer method that caused it to fail unless SecureTransfers property was set to false.
  • Cryptography: Added support for reading and setting private key comment.
  • Cryptography: Added RootCertificate and LeafCertificate properties to CertificateChain class.
  • Cryptography: Added GetCommonName method to DistinguishedName class.
  • Cryptography: Added IEnumerator support to CertificateChain.
  • Cryptography: Added Equals method to DistinguishedName class.
  • Cryptography: Fixed a bug in OID decoding routine that cased it to occasionally hang on broken input data.
  • Cryptography: Added new Certificate.LoadPfx to make it possible to load keys into machine store.
  • Cryptography: Fixed a problem in Certificate.Decrypt method that made the decryption fail with some rare certificates.
  • Cryptography: Added Certificate.Associate method to make it possible to associate a RSA/DSA crypto service provider with access to a private key with a certificate.
  • TLS/SSL: Anonymous TLS/SSL ciphers are now supported (but disabled by default).
  • TLS/SSL: Fixed an internal static method that was not thread safe.

2.5.3127.0 #

(build 3127 from 2008-07-23)

Detailed list of changes:

  • FTP: Fixed a bug introduced in the last release that caused a bad InvalidOperationException to be thrown when FTP server reported an error during upload.

2.5.3087.0 #

(build 3087 from 2008-06-14)

Detailed list of changes:

  • FTP: Finished property added to FtpTranferProgressEventArgs class.
  • FTP: New variants of GetDownloadStream and GetUploadStream added.
  • FTP: New tutorial for file transfer resume functionality.
  • FTP: Added detection for SFTP and SSH servers that are often mistaken forh SFTP to produce better exception messages. FTP servers in wrong modes are also detected.
  • FTP: Fixed a bug that caused the DoNotDetectFeatures option to fail.
  • FTP: Added hostname validity checking to Connect method.
  • FTP: Added support for unusual way of data channel SSL initialization used by XFB Gateway FTP Server.
  • TLS/SSL: Fixed a bug that caused data loss when a TLS/SSL connection was closed in a certain way.
  • ProxySocket: New ISocket interface to make it possible to easily implement custom transport layers.
  • ProxySocket: Fixed an unhandled exception that occured during a failed connection to a proxy specified by an IP address.

2.5.2896.0 #

(build 2896 from 2007-12-06 )

Detailed list of changes:

  • All: Packages for .NET 3.5 and Visual Studio 2008 now available.
  • FTP: Added support for IBM 4690 file and directory listing format.
  • FTP: Fixed several bugs in MODE Z (compressed transfers) code.
  • FTP: Fixed several bugs in MODE B (block transfer) code.
  • FTP: Fixed a bug that caused an invalid exception to be raised on specific type of transfer failures.

2.5.2871.0 #

(build 2871 from 2007-11-11)

Detailed list of changes:

  • FTP: Support for MODE B (block mode) with MS FTP7 that makes it possible to re-use a single data connection for multiple transfers.
  • FTP: Experimental support for MODE Z (data transfer compression) added to .NET 2.0 build.
  • FTP: Support for HOST command (multiple virtual FTP hosts on a single IP address). (Disabled by default).
  • FTP: Data channel now maintains a separate session from control channel.
  • TLS/SSL: Added built-in PFX-based client certificate request handler.
  • TLS/SSL: Fixed a bug in the negotiation part of the TlsSocket class that caused problems when handling large packets.
  • Cryptography: Added support for loading PuTTY private keys.

2.5.2800.0 #

(build 2800 from 2007-08-30)

Detailed list of changes:

  • FTP: Added Bandwidth throttling support - MaxUploadSpeed and MaxDownloadSpeed properties.
  • FTP: Added CRC32, MD5 and SHA-1 checksum support - GetSupportedChecksums, CalculateLocalChecksum (static) and GetChecksum methods.
  • FTP: GetCurrentDirectory enhanced to support another non-standard reply format.
  • FTP: Added FtpOptions.EnableMultipleBlockingCalls option to change the way multiple concurrent calls are handled.
  • FTP: Added FtpOptions.PauseBeforeUploadClose option to enable workaround for a problem of a missing last data block before SSL data channel close.
  • FTP: Added workaround for several MS FTP7 Beta problems.
  • TLS/SSL: Fixed a bug in the server-side TLS/SSL code that caused a SSL2-style ClientHello message to be parsed incorrectly.
  • Cryptography: Added support for Blowfish and Twofish ciphers.
  • Cryptography: Added new CertificateIssuer class for certificate creation.
  • Cryptography: Added new CertificateChain-based certificate finder.
  • Cryptography: Certificate revocation list is now available in EnvelopedData and SignedData classes.
  • Cryptography: When the CertificateFinder property is changed in EnvelopedData and SignedData Certificate, the new finder is now immediately used to find any missing certificates.
  • Cryptography: Several serialization bugs in EnvelopedData and SignedData classes were fixed.
  • Cryptography: Certificate class has a new Extensions property that makes the extension collection accessible.
  • Cryptography: Various other changes that do not affect the FTP protocol.

2.5.2700.0 #

(build 2700 from 2007-05-24)

Detailed list of changes:

  • FTP: Added support for direct server-to-server transfers, also known as FXP! Check out the new CopyToAnotherServer method.
  • FTP: Added ListItemReceived event. This makes it possible to display the list items as they are received, to filter them or to abort the transfer based on previously received items.
  • FTP: NameList added to FtpListingType.
  • FTP: SetTransferType/BeginSetTransferType/EndSetTransferType methods were marked as obsolete. Please use the TransferType property instead.
  • FTP: Added support for DrFTPD's PRET command.
  • FTP: Added a workaround for occasional problems with uploads to GlobalScape FTP Server using TLS/SSL in .NET CF.
  • Cryptography: CertificateFinder can now be changed even after an EnvelopedData or SignedData has been loaded.

2.3.2666.0 #

(build 2666 from 2007-04-20)

Detailed list of changes:

  • FTP: Added SetFileDateTime method.
  • FTP: Added FileExists and DirectoryExists methods. These simple operations are very hard to achieve using the FTP protocol and we use a combination of several commands to achieve the desired functionality.
  • FTP: Added DataPortRange property to specify local data port range for active and passive mode transfers.
  • FTP: GetFile/PutFile methods refactorred to use the same infrastructure as GetDownloadStream/GetUploadStream methods.
  • FTP: GetList method optimized to parse the list on-the-fly, resulting in enhanced speed.
  • FTP: Removed unnecessary control channel checking code that caused a noticeable slowdown of data transfers.
  • FTP: Fixed a bug in MLSD list parser - date/time was treated as local time.
  • FTP: In active mode, when waiting for the server to connect, error response is now processed as soon as it arrives, without waiting for the connection attempt to time out.
  • FTP: GetConnectionState no longer fails on disconnected objects.
  • TLS/SSL: Speed drop caused by the data receiving loop introduced in the previous build was fixed.

2.0.2621.0 #

(build 2621 from 2007-03-06)

Detailed list of changes:

  • FTP: Enhanced handling of uploads terminated by the server. More meaningful exceptions are now reported.
  • FTP: Compatibility enhancements in download aborting code.
  • FTP: Fixed a bug that caused the Close method of the Stream returned by GetDownloadStream to fail with some servers on fast networks.
  • FTP: Fixed a minor bug in FtpResponse class.
  • FTP: IPv6 support with .NET Framework 1.1/2.0/3.0 and .NET Compact Framework 2.0.
  • TLS/SSL: New refactorred TLS/SSL core introduced.

2.0.2567.0 #

(build 2567 from 2007-01-11)

Detailed list of changes:

  • FTP: Fixed a bug in the Close method of the stream returned by GetUploadStream and GetDownloadStream method.
  • FTP: Rebex Secure FTP renamed to Rebex FTP/SSL in order to avoid confusion with Rebex SFTP.
  • Cryptography: Added PrivateKeyInfo class and an ability to load and save private keys.
  • Cryptography: Fixed a bug in DSAManaged class that made impossible to use keys of some sizes.
  • Cryptography: Random big integer generator optimized.
  • Cryptography: Several typos in documentation fixed.

2.0.2537.0 #

(build 2537 from 2006-12-12)

Detailed list of changes:

  • FTP: Fixed bad ArgumentExceptions in Ftp.Connect and FtpList.GetFiles methods.

2.0.2522.0 #

(build 2522 from 2006-11-27)

Detailed list of changes:

  • FTP: GetUploadStream/GetDownloadStream methods optimized. They no longer use a background thread and should be faster and more reliable.
  • TLS/SSL: Fixed a bug in the Compact Framework version that caused an unnecessary slowdown when using SSL/TLS.

2.0.2482.0 #

(build 2482 from 2006-10-18)

Detailed list of changes:

  • FTP: Default transfer mode is now binary.
  • FTP: Added setter to TransferType property, making SetTransferType method obsolete.
  • FTP: Added CheckConnectionState/GetConnectionState methods to check the state of the connection without sending any command to the server.
  • FTP: MLSD file and directory listing parser is now able to parse legacy mlst-05 style listings.
  • FTP: Added UploadBufferLength property to manipulate the size of the upload bufffer.
  • FTP: Added a workaround to the CF version for a transfer problem that often occurs when using ActiveSync to connected to a FTP server running on the same machine as ActiveSync. This makes the IgnorePassiveModeAddress option unnecessary in these cases.
  • FTP: The workaround for legacy FTP servers that don't understand 'PBSZ' command was extended to cover sessions explicitly secured using 'AUTH SSL' command. It only used to apply to implicitly secured FTP sessions.
  • Cryptography: Fixed a bug in DSAManaged class that made impossible to use keys of less common sizes.

2.0.2449.0 #

(build 2449 from 2006-09-15)

Detailed list of changes:

  • FTP: Fixed a bug in the VB.NET version of WinFormGet sample that made it fail in .NET 2.0.
  • FTP: Fixed a minor bug in WinFormClient sample that made it possible for ClearCommandChannel command to be called for unsecured connections.

2.0.2439.0 #

(build 2439 from 2006-09-05)

Detailed list of changes:

  • TLS/SSL: Several TLS/SSL optimization changes.
  • ProxySocket: Added support for NTLM authentication through HTTP CONNECT proxies.
  • Cryptography: Several new methods.

2.0.2428.0 #

(build 2428 from 2006-08-25)

Detailed list of changes:

  • FTP: Fixed a bug that made the VMS file and directory listing parser fail in rare circumstances.
  • FTP: Added IgnorePassiveModeAddress option as a workaround for FTP servers or firewalls that instruct the client to connect to an unaccessible IP address when initializing passive mode data connection.
  • FTP: Fixed a bug in the finalizer that could cause an exception when the Ftp object using TLS/SSL was finalized.
  • FTP: Added workaround for FileZilla FTP server. FileZilla FTP server is seriously broken and reports an error with 25-50% probability when an upload using TLS/SSL is finished. (This also happens when its own FTP client is used.)
  • TLS/SSL: Fixed a bug that could cause a failure or timeout on extremely fast connections.
  • Cryptography: A PKCS#7 parser and encoder added.
  • Cryptography: Several new methods added to Certificate and CertificateStore classes.

2.0.2382.0 #

(build 2382 from 2006-07-10)

Detailed list of changes:

  • FTP: File and directory listings parser was optimized, it is now much faster.
  • FTP: SupportedExtensions and EnabledExtensions added to make it possible to determine and enable/disable FTP protocol extensions.
  • FTP: Support for MLSD file and directory listings added. GetList now uses this as default on servers that support this extension.
  • FTP: The LF character is now treated as an end-of-line marker, just like CRLF sequence, to enable Rebex FTP to work with buggy servers that send LF instead of CRLF.
  • TLS/SSL: Fixed a bug that caused the connection not to be closed correctly under special circumstances.
  • ProxySocket: Fixed a bug that caused the proxy password to be ignored (since build 2305).
  • Cryptography: Several new methods and classes added.
  • Cryptography: Internal ASN.1 parser replaced by a recent version.
  • Cryptography: Fixed a bug in RSA signature format for MD5 and SHA-1.

2.0.2354 #

(build 2354 from 2006-06-12)

Detailed list of changes:

  • FTP: Server feature detection added (the FEAT command). Can be disabled using DoNotDetectFeatures option for complete compatibility with previous versions.
  • FTP: Added workaround for Nofeel FTP Server in TLS/SSL mode that is unable to handle the final handshake message and first block of data in the same packet.
  • TLS/SSL: Fixed a bug that caused the connection not to be closed correctly if the server ignores TLS/SSL close notifications.
  • Cryptography: GetSubjectKeyIdentifier method added to Certificate class.
  • Cryptography: Added several missing argument checks.
  • Cryptography: Certificates other than RSA and DSS now load as well.

2.0.2305.0 #

(build 2305 from 2006-04-24 )

Detailed list of changes:

  • FTP: Version numbering scheme changed.
  • FTP: DefaultPort constant with a value of 21 added to Ftp class.
  • FTP: Custom directory list parser is now allowed to set the FtpItem to null, which causes the line not to be parsed.
  • FTP: Internal asynchronous methods framework upgraded to the latest version.
  • FTP: Several missing connection state checks added.
  • FTP: Most ArgumentExceptions enhanced and some missing added.
  • FTP: Overall code beautification.
  • FTP: Added TimeoutAsynchronousMethods option to make asynchronous methods optionally time out in the same way the synchronous methods do. (By default, only synchronous methods time out.)
  • FTP: Size of sent blocks in .NET Compact Framework changed to 1460, which seems to be more compatible.
  • FTP: ResumableClient sample added to Compact Framework version.
  • FTP: A .NET Compact Framework version of Rebex FTP/SSL is now available as well.
  • TLS/SSL: Changes for compatibility with .NET Compact Framework's implementation of System.Net.Sockets.
April242006 #

(build 19 from 2005-11-14)

Detailed list of changes:

  • FTP: FtpException is now based on Exception instead of InvalidOperationException.
  • FTP: FtpList is now serializable.
  • FTP: Fixed a bug that caused the PutUniqueFile method to throw an exception.
  • FTP: Added several COM-interop related attributes to some classes to allow basic FTP functionality to be used through COM.
  • FTP: Disconnect method changed to not throw an exception unless another operation is in progress to reflect the way most people use this method.
  • FTP: Added KeepAliveDuringTransferInterval property to allow specifying the interval for KeepAliveDuringTransfer option.
  • FTP: Behavior of Begin.../End... methods changed so that a call to End... is required after an end of the operation prior to additional calls to Begin... methods.
  • FTP: Ftp properties IsSecured, TlsSocket, LocalEndPoint and RemoreEndPoint now LocalEndPoint and RemoreEndPoint now throw InvalidOperationException when not connected.
  • FTP: Added SendDataAsynchronously option to upload data using BeginSend/EndSend instead of Send to deal with hanging Send on some Windows Mobile devices.
  • FTP: The component and samples support .NET 2.0 and Visual Studio .NET 2005.
  • FTP: Fixed a missing Data property in FtpTlsDebugEventArgs class.
  • FTP: Added ForceSilentCcc option to deal with buggy FTP servers that have a habit of not sending CloseNotify messages while shutdowning SSL after a response to CCC command.
  • FTP: Fixed a bug that caused the Connect or Secure method to close the connection if the FTP server replies to AUTH SSL command by an obsolete 3xx response.
  • FTP: BeginClearCommand method now actually returns the IAsyncResult.
  • FTP: TlsDebug event is now being called from the same thread that the current operation runs in.
  • TLS/SSL: Added new TlsDebugEventType UnexpectedException for easier handling of unexpected exceptions thrown from inside the SSL/TLS code.
  • TLS/SSL: Added SilentUnprotect option to enable shutdown of SSL channel without sending the CloseNotify message. Needed to deal with buggy SSL implementations.
  • TLS/SSL: Added DoNotBufferDate option for enhanced control over the SSL channel.
  • TLS/SSL: Minor internal changes towards the forthcoming Compact Framework support.
  • Cryptography: Fixed a bug that caused the Certificate.Decrypt method to return an array of wrong length.
November142005 #

(build 18 from 2005-07-29)

Detailed list of changes:

  • FTP: Added ClearCommandChannel method to revert from protected to unprotected control channel.
  • FTP: Component doesn't assume anything about the protection state upon connection, which makes it compatible with Covalent FTP Server.
  • FTP: Enhancements in unix file list parser to support more variants of unix file listings.
  • FTP: Added KeepAliveDuringTransfer option to deal with buggy firewalls that have a habit of terminating idle control connection during long file transfers.
  • FTP: FtpWebRequest.GetResponse now returns an empty response for FTP upload instead of throwing an exception.
  • FTP: Compact Framework FTP running on full .NET now sends TCP signals with ABOR command during transfer.
  • FTP: Removed workaround for ActiveSync (prior to build 4034) bug from the CF version that made it impossible to close data connections successfully.
  • FTP: Changes to enable C# 2.0 compilation with no warnings.
  • FTP: Trial version for .NET Compact Framework now works with .NET CF 2.0.
  • FTP: Exception handling code in several places cleaned a bit. Other minorchanges. Few lines of unnecessary code removed.
  • FTP: 'Cannot change state' exception messages modified to be more understandable.
  • FTP: Fixed a bug that caused the component not to detect closed control connection in some cases.
  • FTP: Asynchronous method framework enhanced to allow null arguments to be passed to asynchronous Ftp methods.
  • FTP: FtpException, ProxySocketException, FtpProxy, FtpItem and FtpList classes are serializable.
  • TLS/SSL: Added TlsSocket.Unprotect method to allow reverting back from TLS to unencrypted socket.
  • ProxySocket: ProxySocketException, FtpProxy classes are serializable.
  • Cryptography: Various changes in Rebex Security to make Secure FTP for .NET completely compatible with 64bit version of .NET Framework 2.0.
  • Cryptography: CertificateChain enhanced to allow certificate validation using local machine chain engine in addition to current user chain engine.
  • Cryptography: CertificateStore constructor now accepts certificate store location, making it possible to use local machine store and others.
  • Cryptography: CertificateStore class now cleans all unmanaged resources when disposed.
  • Cryptography: Certificate, CertificateChain, CertificateException, DistinguishedName, TlsCipher and TlsException classes are serializable.
July292005 #

(build 17 from 2004-12-08)

Detailed list of changes:

  • FTP: First release of FTP over TLS/SSL.
December082004 #

(build 16 from 2004-11-10)

Detailed list of changes:

  • FTP: Fixed a bug that caused Timeout exception to be thrown instead of OperationAborted exception in special circumstances.
  • FTP: List parser understands a rare variant of Unix directory listing with interchanged month and day parts.
  • FTP: Ftp.Disconnect method always closes the connection, even if the object is not in ready state.
  • ProxySocket: Fixed a bug in Socks5 authentication code (incorrect version in authentication messages).
November102004 #

(build 15 from 2004-09-23)

Detailed list of changes:

  • FTP: Fixed a bug that caused the component to remain in a wrong state when disconnected by the server.
September232004 #

(build 14 from 2004-09-01)

Detailed list of changes:

  • FTP: Underlying locking/unlocking/async/aborting code fixed to get rid of 'Another operation is pending' exception after timeouts.
  • FTP: Abort method can be called at any time, even inside callbacks.
  • FTP: ChangeDirectory accepts an empty path.
  • FTP: Assembly have been marked as CLS-compliant.
  • ProxySocket: Fixed a bug in ProxySocket's Accept method that could cause active mode transfers to hang under rare circumstances with some servers
  • ProxySocket: Assembly have been marked as CLS-compliant.
September012004 #

(build 13 from 2004-04-02)

Detailed list of changes:

  • ProxySocket: Lots of changes and improvements to the proxy code.
  • ProxySocket: GetAddressLong and GetAddressBytes methods added to ProxySocket class to overcome differences between .NET 1.0 and 1.1.
  • FTP: Added a new override for Ftp.GetList method to allow arguments.
  • FTP: Added a new property BytesSinceLastEvent to TransferProgress event. It contains the number of bytes transferred since the last call.
  • FTP: Enhancements in file transfer routines, allowing higher transfer rate on high-speed connections.
  • FTP: All references to obsolete IPAddress.Address in Socks4/Socks5 and FTP code replaced either with calls to ProxySocket.GetAddressLong or ProxySocket.GetAddressBytes.
  • FTP: All references to DateTime.Now.Ticks replaced by more appropriate Environment.TickCount.
  • FTP: Logoff method was renamed to Reinitialize and a new empty Logoff method was added to solve the confusion it caused.
  • FTP: Fixed a bug that caused TransferProgress event not to be raised with FtpTransferState.None when the transfer is finished.
  • FTP: Fixed problems in trial version key check on PocketPC 2003 emulator.
April022004 #

(build 11 from 2003-11-24)

Detailed list of changes:

  • ProxySocket: Enhancement in Available property of the ProxySocket class.
  • FTP: Fixed a bug that caused trial version not to work in ASP.NET with impersonation enabled.
November242003 #

(build 10 from 2003-11-07)

Detailed list of changes:

  • ProxySocket: Fixed a bug in synchronous methods of the ProxySocket that caused them to hang.
  • FTP: New overloads for Sort method added to FtpList.
  • FTP: Corrected the Version property of the Ftp class that returned wrong version number.
  • FTP: No IP addresses are resolved using DNS now.
November072003 #

(build 9 from 2003-11-01)

Detailed list of changes:

  • ProxySocket: Assembly divided into two parts: FTP and Proxy Socket.
  • FTP: Tested with Mono 0.28.
  • FTP: Event handlers can now also be used for FtpWebRequest.
  • FTP: Fixed a bug that could cause a file transfer to fail with some servers and hang under certain circumstances.
  • FTP: Fixed a bug in FTP stream code that caused an exception to be thrown if the transfer was too fast.
  • FTP: More characters are now allowed in remote paths (better interoperability with VMS).
  • FTP: Fixed a bug that caused Ftp class to become unusable if unable to open a local file during asynchronous PutFile or GetFile.
  • FTP: Few missing error messages fixed.
  • FTP: Minor fixes in FtpProxy class.
  • FTP: Server compatibility enhancements in data transfer and aborting code.
November012003 #

(build 8 from 2003-09-01)

Detailed list of changes:

  • FTP: New overloads for GetNameList and GetRawList methods added.
September012003 #

(build 7 from 2003-08-28)

Detailed list of changes:

  • FTP: Many enhancements in the underlying proxy code.
  • FTP: Abort command is more reliable.
  • FTP: Large number of smaller cosmetic changes in the code.
  • FTP: Changes towards better portability.
August282003 #

(build 6 from 2003-08-20)

Detailed list of changes:

  • FTP: Fixed a bug in HttpConnect proxy code that caused the beginning of the data stream to be discarded under certain circumstances.
August202003 #

(build 4 from 2003-08-12)

Detailed list of changes:

  • FTP: Minor bug fixed in EPLF list parser (invalid handling of dates > 2038).
  • FTP: Fixed a bug that caused an unexpected exception to be thrown when calling Ftp.Connect with an empty hostname.
August122003 #

(build 2 from 2003-07-03)

Detailed list of changes:

  • FTP: Server compatibility enhancements in file transfer aborting code. (There were problems with WarFTPd and some older versions of Serv-U.)
  • FTP: Ftp.Disconnect method now does not throw exception if an error is encountered.
  • FTP: Fixed a bug in Unix list parser that caused an exception while parsing
  • FTP: Fixed a bug in Socks4/Socks5 proxy code that caused an exception to be thrown for some IP addresses.
  • FTP: Removed few lines of unused code in HTTP proxy code.
  • FTP: Default character encoding is now Encoding.Default instead of Encoding.ASCII.
  • FTP: Several bugfixes in WinFormClient sample.
  • FTP: ConsoleClient code sample now supports resuming aborted transfers and uploading directory trees.
July032003 #

(build 1 from 2003-04-14)

Detailed list of changes:

  • FTP: Initial release.