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);
            }
        }
Esempio n. 7
0
 public AesCtrCipher(ReadOnlySpan <byte> key, ReadOnlySpan <byte> iv)
 {
     _baseCipher = new AesCtrMode();
     _baseCipher.Initialize(key, iv);
 }