(NotTransform, XorTransform): derive from ByteTransform abstract class.

This commit is contained in:
morkt 2016-12-26 15:42:02 +04:00
parent e1a0cca0fd
commit fddee82ab6

View File

@ -28,17 +28,40 @@ using System.Security.Cryptography;
namespace GameRes.Formats namespace GameRes.Formats
{ {
public sealed class NotTransform : ICryptoTransform public abstract class ByteTransform : ICryptoTransform
{ {
private const int BlockSize = 1; const int BlockSize = 1;
public bool CanReuseTransform { get { return true; } } public bool CanReuseTransform { get { return true; } }
public bool CanTransformMultipleBlocks { get { return true; } } public bool CanTransformMultipleBlocks { get { return true; } }
public int InputBlockSize { get { return BlockSize; } } public int InputBlockSize { get { return BlockSize; } }
public int OutputBlockSize { get { return BlockSize; } } public int OutputBlockSize { get { return BlockSize; } }
public int TransformBlock (byte[] inputBuffer, int inputOffset, int inputCount, public abstract int TransformBlock (byte[] inputBuffer, int inputOffset, int inputCount,
byte[] outputBuffer, int outputOffset) byte[] outputBuffer, int outputOffset);
public byte[] TransformFinalBlock (byte[] inputBuffer, int inputOffset, int inputCount)
{
byte[] outputBuffer = new byte[inputCount];
TransformBlock (inputBuffer, inputOffset, inputCount, outputBuffer, 0);
return outputBuffer;
}
public void Dispose ()
{
Dispose (true);
System.GC.SuppressFinalize (this);
}
protected virtual void Dispose (bool disposing)
{
}
}
public sealed class NotTransform : ByteTransform
{
public override int TransformBlock (byte[] inputBuffer, int inputOffset, int inputCount,
byte[] outputBuffer, int outputOffset)
{ {
for (int i = 0; i < inputCount; ++i) for (int i = 0; i < inputCount; ++i)
{ {
@ -46,37 +69,19 @@ namespace GameRes.Formats
} }
return inputCount; return inputCount;
} }
public byte[] TransformFinalBlock (byte[] inputBuffer, int inputOffset, int inputCount)
{
byte[] outputBuffer = new byte[inputCount];
TransformBlock (inputBuffer, inputOffset, inputCount, outputBuffer, 0);
return outputBuffer;
}
public void Dispose ()
{
System.GC.SuppressFinalize (this);
}
} }
public sealed class XorTransform : ICryptoTransform public sealed class XorTransform : ByteTransform
{ {
private const int BlockSize = 1;
private byte m_key; private byte m_key;
public bool CanReuseTransform { get { return true; } }
public bool CanTransformMultipleBlocks { get { return true; } }
public int InputBlockSize { get { return BlockSize; } }
public int OutputBlockSize { get { return BlockSize; } }
public XorTransform (byte key) public XorTransform (byte key)
{ {
m_key = key; m_key = key;
} }
public int TransformBlock (byte[] inputBuffer, int inputOffset, int inputCount, public override int TransformBlock (byte[] inputBuffer, int inputOffset, int inputCount,
byte[] outputBuffer, int outputOffset) byte[] outputBuffer, int outputOffset)
{ {
for (int i = 0; i < inputCount; ++i) for (int i = 0; i < inputCount; ++i)
{ {
@ -84,18 +89,6 @@ namespace GameRes.Formats
} }
return inputCount; return inputCount;
} }
public byte[] TransformFinalBlock (byte[] inputBuffer, int inputOffset, int inputCount)
{
byte[] outputBuffer = new byte[inputCount];
TransformBlock (inputBuffer, inputOffset, inputCount, outputBuffer, 0);
return outputBuffer;
}
public void Dispose ()
{
System.GC.SuppressFinalize (this);
}
} }
public class ByteStringEncryptedStream : InputProxyStream public class ByteStringEncryptedStream : InputProxyStream