Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 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();
     }
 }
Exemplo n.º 3
0
 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;
     }
 }
Exemplo n.º 4
0
 /// <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);
 }
Exemplo n.º 5
0
 public override void Transform(byte[] input)
 {
     CryptoTransform.TransformBlock(input, 0, input.Length, input, 0);
 }