diff options
author | kenneth.skovhede@gmail.com <kenneth.skovhede@gmail.com@59da171f-624f-0410-aa54-27559c288bec> | 2010-06-20 01:08:21 +0400 |
---|---|---|
committer | kenneth.skovhede@gmail.com <kenneth.skovhede@gmail.com@59da171f-624f-0410-aa54-27559c288bec> | 2010-06-20 01:08:21 +0400 |
commit | a40f6acf378d4ceeae9fcdda1e759160d96a9d37 (patch) | |
tree | 01ede0260a9416c16e6678cd6bf9a20cd2373acb /Duplicati/Library/Interface/IEncryption.cs | |
parent | 8296404414aefa870971d847f73b091a9c25245f (diff) |
A fairly large refactoring of the code.
This was based on the idea that the interfaces should remain static.
I hope this change is enough to ensure stable interfaces until release 1.2.
Overview of changes:
Moved all interfaces into the same dll.
Encryption and compression is now plugable modules, just as the backends.
Encryption/compression can now register an UI.
Encryption now uses AESCrypt as a default.
GPG does not default to using the --armor option.
Added support for generic modules, but none are written yet.
Added support for plugable settings pages in the "Options" dialog.
Fixed issue #148.
Duplicati now uses AESCrypt as the default encryption format.
Fixed issue #199.
GPG now supports custom commandline options.
Fixed issue #207.
Encryption modules are now plugable.
Fixed issue #118.
S3 credentials are now stored.
Fixed issue #151.
Backends can now register system wide options.
git-svn-id: https://duplicati.googlecode.com/svn/trunk@427 59da171f-624f-0410-aa54-27559c288bec
Diffstat (limited to 'Duplicati/Library/Interface/IEncryption.cs')
-rw-r--r-- | Duplicati/Library/Interface/IEncryption.cs | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/Duplicati/Library/Interface/IEncryption.cs b/Duplicati/Library/Interface/IEncryption.cs new file mode 100644 index 000000000..8786dcce2 --- /dev/null +++ b/Duplicati/Library/Interface/IEncryption.cs @@ -0,0 +1,109 @@ +#region Disclaimer / License
+// Copyright (C) 2010, Kenneth Skovhede
+// http://www.hexad.dk, opensource@hexad.dk
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+//
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+
+namespace Duplicati.Library.Interface
+{
+ /// <summary>
+ /// Public interface for an encryption method.
+ /// All modules that implements encryption must implement this interface.
+ /// The classes that implements this interface MUST also
+ /// implement a default constructor and a construtor that
+ /// has the signature new(string passphrase, Dictionary<string, string> options).
+ /// The default constructor is used to construct an instance
+ /// so the DisplayName and other values can be read.
+ /// The other constructor is used to do the actual work.
+ /// An instance can be used to encrypt or decrypt multiple files/streams.
+ /// </summary>
+ public interface IEncryption : IDisposable
+ {
+ /// <summary>
+ /// Encrypts the contents of the inputfile, and saves the result as the outputfile.
+ /// </summary>
+ /// <param name="inputfile">The file to encrypt</param>
+ /// <param name="outputfile">The encrypted file</param>
+ void Encrypt(string inputfile, string outputfile);
+
+ /// <summary>
+ /// Encrypts the contents of the input stream, and writes the result to the output stream.
+ /// </summary>
+ /// <param name="input">The stream to encrypt</param>
+ /// <param name="output">The encrypted stream </param>
+ void Encrypt(Stream input, Stream output);
+
+ /// <summary>
+ /// Decrypts the contents of the input file and saves the result as the outputfile
+ /// </summary>
+ /// <param name="inputfile">The file to decrypt</param>
+ /// <param name="outputfile">The decrypted output file</param>
+ void Decrypt(string inputfile, string outputfile);
+
+ /// <summary>
+ /// Dencrypts the contents of the input stream, and writes the result to the output stream.
+ /// </summary>
+ /// <param name="input">The stream to decrypt</param>
+ /// <param name="output">The decrypted stream</param>
+ void Decrypt(Stream input, Stream output);
+
+ /// <summary>
+ /// Decrypts the stream to the output stream
+ /// </summary>
+ /// <param name="input">The encrypted stream</param>
+ /// <returns>The unencrypted stream</returns>
+ Stream Decrypt(Stream input);
+
+ /// <summary>
+ /// Encrypts the stream
+ /// </summary>
+ /// <param name="input">The target stream</param>
+ /// <returns>An encrypted stream that can be written to</returns>
+ Stream Encrypt(Stream input);
+
+ /// <summary>
+ /// The extension that the encryption implementation adds to the filename
+ /// </summary>
+ string FilenameExtension { get; }
+
+ /// <summary>
+ /// A localized string describing the encryption module with a friendly name
+ /// </summary>
+ string DisplayName { get; }
+
+ /// <summary>
+ /// A localized description of the encryption module
+ /// </summary>
+ string Description { get; }
+
+ /// <summary>
+ /// Gets a list of supported commandline arguments
+ /// </summary>
+ IList<ICommandLineArgument> SupportedCommands { get; }
+
+ /// <summary>
+ /// Returns the size in bytes of the overhead that will be added to a file of the given size when encrypted
+ /// </summary>
+ /// <param name="filesize">The size of the file to encrypt</param>
+ /// <returns>The size of the overhead in bytes</returns>
+ long SizeOverhead(long filesize);
+ }
+}
|