public void ByteByByteTest() { var r = new Random(); byte[] iv = new byte[16]; byte[] key = new byte[32]; byte[] message = new byte[100]; r.NextBytes(iv); r.NextBytes(key); r.NextBytes(message); Aes a = new Aes(); AesCtrMode c = new AesCtrMode(a, iv); a.Initialize(true, key); var encryptedA = c.Process(message); c = new AesCtrMode(a, iv); var encryptedB = Enumerable.Range(0, message.Length) .Select(i => c.Process(new ArraySegment <byte>(message, i, 1)).AsEnumerable()) .Aggregate((x, y) => (x ?? new byte[0]).Concat(y)) .ToArray(); Assert.Equal(encryptedA, encryptedB); }
public void Offset2Test() { var r = new Random(); byte[] iv = new byte[16]; byte[] key = new byte[32]; byte[] message = new byte[100]; r.NextBytes(iv); r.NextBytes(key); r.NextBytes(message); Aes a = new Aes(); AesCtrMode c = new AesCtrMode(a, iv); a.Initialize(true, key); var encrypted = c.Process(new ArraySegment <byte>(message, 10, 80)); var enc2 = new byte[100]; Array.Copy(encrypted, 0, enc2, 10, 80); a.Initialize(true, key); c = new AesCtrMode(a, iv); var decrypted = c.Process(new ArraySegment <byte>(enc2, 10, 80)); Assert.Equal(message.Skip(10).Take(80).ToArray(), decrypted); }
public void AlterTest() { var r = new Random(); for (int i = 0; i < 100; i++) { byte[] iv = new byte[16]; byte[] key = new byte[32]; byte[] message = new byte[100]; r.NextBytes(iv); r.NextBytes(key); r.NextBytes(message); Aes a = new Aes(); AesCtrMode c = new AesCtrMode(a, iv); a.Initialize(true, key); var encrypted = c.Process(message); encrypted[r.Next(encrypted.Length)]++; a.Initialize(true, key); c = new AesCtrMode(a, iv); var decrypted = c.Process(encrypted); Assert.NotNull(decrypted); Assert.NotEqual(message, decrypted); } }
public void ReferenceTest(byte[] key, byte[] iv, byte[] input, byte[] output) { Aes a = new Aes(); a.Initialize(true, key); AesCtrMode c = new AesCtrMode(a, iv); var encrypted = c.Process(input); Assert.Equal(output, encrypted); }
public void MultiSizeTest(int size) { var r = new Random(); byte[] iv = new byte[16]; byte[] key = new byte[32]; byte[] message = new byte[size]; r.NextBytes(iv); r.NextBytes(key); r.NextBytes(message); Aes a = new Aes(); a.Initialize(true, key); AesCtrMode c = new AesCtrMode(a, iv); var encrypted = c.Process(message); a.Initialize(true, key); c = new AesCtrMode(a, iv); var decrypted = c.Process(encrypted); Assert.Equal(message, decrypted); }
public void RepeatibilityTest() { var r = new Random(); for (int i = 0; i < 100; i++) { byte[] iv = new byte[16]; byte[] key = new byte[32]; byte[] message = new byte[100]; r.NextBytes(iv); r.NextBytes(key); r.NextBytes(message); Aes a = new Aes(); AesCtrMode c = new AesCtrMode(a, iv); a.Initialize(true, key); var encrypted = c.Process(message); a.Initialize(true, key); c = new AesCtrMode(a, iv); var decrypted = c.Process(encrypted); Assert.Equal(message, decrypted); } }
public AesCtrCipher(ReadOnlySpan <byte> key, ReadOnlySpan <byte> iv) { _baseCipher = new AesCtrMode(); _baseCipher.Initialize(key, iv); }