Build 3854: Encryption in Rebex ZIP, FIPS-mode in Rebex FTP/SSL

Encryption and other enhancements in Rebex ZIP

We added all the important features that didn't make it into the first release of Rebex ZIP: AES encryption, stream-based access to compressed files, asynchronous methods, and more. Check out the list below for details. On top of that, a new explorer-like sample was added.

FIPS 140-2 mode in FTP/SSL

When using Rebex FTP on a machine where only certified FIPS 140-2 algorithms are allowed, a FIPS 140-2 mode is enabled and non-compliant algorithms are switched off. This mode can also be enabled manually by referencing Rebex.Security.dll and setting the Rebex.Security.Cryptography.CryptoHelper.UseFipsAlgorithmsOnly property to true. This was already available in Rebex SFTP before.

New stream-based access to remote files in SFTP

While there is nothing wrong with PutFile and GetFile methods, sometimes a stream-based access is required. We now added a new GetStream method that returns a stream representing a remote file - and all the stream features are supported, including seeking and setting file length. This makes it possible to (for example) use Rebex SFTP with Rebex ZIP to access a remote ZIP file and extract selected files from it without having to download the whole ZIP file.

Complete list of changes:

  • FTP/SSL: Added FIPS 140-2 compliant mode that is automatically enabled on systems where only compliant algorithms are allowed.
  • FTP: Ftp class inherits from NetworkSession base class that implements some common properties.
  • FTP: Added a workaround for FTP servers 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 .
  • FTP: Better error handling in GetFiles/PutFiles methods.

  • SFTP: Added Sftp.GetStream method that makes it possible to open a readable/writable/seekable stream of a remote file.

  • SFTP: Added ProtocolVersion property to Sftp class.
  • SFTP: Added SftpOption.UseReadWriteModeForDownloads option.
  • SFTP: Sftp class inherits from NetworkSession base class that implements some common properties.
  • SFTP: SftpItemCollection.GetEnumerator is now an implementation of IEnumerable .
  • SFTP: Fixed a DateTime range check in SftpAttributes.Modified and .Created which was performed before the conversion to UTC.
  • SFTP: Better error handling in GetFiles/PutFiles methods.

  • S/MIME: Added support for AES ecnryption (128, 192 and 256bit).

  • MIME: A more descriptive exception is thrown when attempting to save a mail message into a directory path instead of file path.
  • MIME: Changed routine for fixing invalid filenames, it no longer changes the '%' character.
  • MIME: Added a MimeOptions.DisableSinglePartHtmlWorkaround option to disable single-part HTML workaround in MailMessage.
  • MIME: Attachment, view and resource collections' GetEnumerator is now an implementation of IEnumerable .
  • IMAP: ImapMessageCollection implements IEnumerable .
  • IMAP: Imap class inherits from NetworkSession base class that implements some common properties.
  • SMTP: Smtp class inherits from NetworkSession base class that implements some common properties.
  • POP3: Pop3 class inherits from NetworkSession base class that implements some common properties.
  • POP3: Added a workaround for an old version of Lotus Domino that advertises APOP support but don't actually support it.
  • POP3: Pop3MessageCollection implements IEnumerable .

  • SSH Shell: Ssh class inherits from NetworkSession base class that implements some common properties.

  • Terminal: Added new SendToServer method overload to TerminalControl and VirtualTerminal that makes it possible to easily simulate function keys.
  • Terminal: New BreakSeqeuence option added to TerminalOptions.

  • SSH Core: In FIPS-only mode, a CryptoAPI implementation of AES is used if available.

  • SSH Core: Added support for aes *-ctr and 3des-ctr ciphers.
  • SSH Core: SshSession class inherits from NetworkSession base class that implements some common properties.

  • ZIP: Added a new overload for Extract, Add and Delete methods that accepts a list of files.

  • ZIP: Added ZipItem.Open() method that makes it possible to open a readable stream of a compressed file.
  • ZIP: Added a new Rebex.IO.Compression.Streams namespace with low-level compression/decompression classes (Deflate, Enhanced Deflate, ZLIB).
  • ZIP: Better error handling in AddFiles/ExtractFiles/ExtractAll methods.
  • ZIP: Fixed a bug in handling the Retry action if an error occured while retrieving hierarchy.
  • ZIP: Added support for password-based encryption using 256bit, 192bit, 128bit AES and ZIP 2.0.
  • ZIP: Added ShrinkProgress event to make it possible to display shrink progress.
  • ZIP: Asynchronous methods added to ZipArchive class: AddAsync, ExtractAsync, MoveAsync, DeleteAsync, SaveAsync.
  • ZIP: Added support for persisting and restoring last access and creation dates.
  • ZIP: Added a DeleteUnfinishedFileOnExtractError option to specify whether to delete or keep a file on extract error.

Some of you already noticed Rebex DLLs in Visual Studio 2010's application folders. It's now official - we are proud to anounce that Microsoft is using Rebex FTP/SSL and SFTP in Microsoft Visual Studio 2010 and Microsoft Expression Web!

If you would like to be informed about what's going on at Rebex, you are welcome to follow us on Twitter.