Use BouncyCastle for handling AES on Mono Framework

Mono Framework does not handle CFB-8 AES encryption mode. So now MCC
will now use borrowed code from the BouncyCastle project for handling
AES when running on Mono framework, instead of using a dirty workaround
to try getting Mono encryption working. Regular .NET framework
encryption module will still be used when not running under Mono (eg on
Windows or using Wine)

Should hopefully fix all the issues encountered on Mono including #41
and finally achieve full compatibility of MCC with Mac and Linux.
This commit is contained in:
ORelio 2015-03-19 22:16:42 +01:00
parent 858ad12783
commit c30d3025f7
17 changed files with 2389 additions and 54 deletions

View file

@ -0,0 +1,44 @@
using System;
namespace Org.BouncyCastle.Crypto
{
/// <remarks>Block cipher engines are expected to conform to this interface.</remarks>
public interface IBufferedCipher
{
/// <summary>The name of the algorithm this cipher implements.</summary>
string AlgorithmName { get; }
/// <summary>Initialise the cipher.</summary>
/// <param name="forEncryption">If true the cipher is initialised for encryption,
/// if false for decryption.</param>
/// <param name="parameters">The key and other data required by the cipher.</param>
void Init(bool forEncryption, ICipherParameters parameters);
int GetBlockSize();
int GetOutputSize(int inputLen);
int GetUpdateOutputSize(int inputLen);
byte[] ProcessByte(byte input);
int ProcessByte(byte input, byte[] output, int outOff);
byte[] ProcessBytes(byte[] input);
byte[] ProcessBytes(byte[] input, int inOff, int length);
int ProcessBytes(byte[] input, byte[] output, int outOff);
int ProcessBytes(byte[] input, int inOff, int length, byte[] output, int outOff);
byte[] DoFinal();
byte[] DoFinal(byte[] input);
byte[] DoFinal(byte[] input, int inOff, int length);
int DoFinal(byte[] output, int outOff);
int DoFinal(byte[] input, byte[] output, int outOff);
int DoFinal(byte[] input, int inOff, int length, byte[] output, int outOff);
/// <summary>
/// Reset the cipher. After resetting the cipher is in the same state
/// as it was after the last init (if there was one).
/// </summary>
void Reset();
}
}