public static byte[] XTS(byte[] Key1, byte[] Key2, int SectorSize, byte[] Data, ulong Sector, bool Encrypt) { byte[] TransformedBytes, BlockData; Xts XTS128 = XtsAes128.Create(Key1, Key2); int Blocks; var MemStrm = new MemoryStream(); var Writer = new BinaryWriter(MemStrm); XtsCryptoTransform CryptoTransform; if (Encrypt) { CryptoTransform = XTS128.CreateEncryptor(); } else { CryptoTransform = XTS128.CreateDecryptor(); } BlockData = new byte[SectorSize]; Blocks = Data.Length / SectorSize; for (int i = 0; i < Blocks; i++) { CryptoTransform.TransformBlock(Data, i * SectorSize, SectorSize, BlockData, 0, Sector++); Writer.Write(BlockData); } TransformedBytes = MemStrm.ToArray(); return(TransformedBytes); }
public unsafe override void Transform(byte[] input) { byte[] buffer = new byte[BlockSize]; for (int i = 0; i < input.Length; i += BlockSize) { CryptoTransform.TransformBlock(x, 0, BlockSize, buffer, 0); input.Xor(i, buffer, 0, BlockSize); x.Increment(); } }
public void Transform(byte[] data, int offset, int length, byte[] output, int outputOffset) { for (var i = 0; i < length; i++) { if (Number == 0) { CryptoTransform.TransformBlock(Iv, 0, Iv.Length, Xor, 0); for (var j = 15; j >= 0; j--) { Iv[j]++; if (Iv[j] != 0) { break; } } } output[i + outputOffset] = (byte)(data[i + offset] ^ Xor[Number]); Number = (Number + 1) & 0xF; } }
/// <summary> /// Encrypt a block of data. /// </summary> /// <param name="buffer"> /// Data to encrypt. NOTE the original contents of the buffer are lost. /// </param> /// <param name="offset"> /// Offset of first byte in buffer to encrypt. /// </param> /// <param name="length"> /// Number of bytes in buffer to encrypt. /// </param> protected void EncryptBlock(byte[] buffer, int offset, int length) { CryptoTransform.TransformBlock(buffer, offset, length, buffer, 0); }
public override void Transform(byte[] input) { CryptoTransform.TransformBlock(input, 0, input.Length, input, 0); }