public void EncryptDecryptTest()
        {
            // Arrange.
            var originalData = new byte[200];
            var originalEmpty = new byte[0];
            var rand = new Random();

            rand.NextBytes(originalData);

            var es = new EncryptionService();

            // Act.
            var encryptedData = es.Encrypt(originalData);
            var encryptedEmpty = es.Encrypt(originalEmpty);
            var decryptedData = es.Decrypt(encryptedData);
            var decryptedEmpty = es.Decrypt(encryptedEmpty);

            // Assert.
            Assert.IsTrue(originalData.SequenceEqual(decryptedData));
            Assert.IsTrue(originalEmpty.SequenceEqual(decryptedEmpty));

            // Invalid arguments.
            TestsHelper.VerifyThrow<ArgumentNullException>(() => es.Encrypt(null));
            TestsHelper.VerifyThrow<ArgumentNullException>(() => es.Decrypt(null));
        }
        public void WhenDataIsCorruptedDecryptThrowsError()
        {
            // Arrange.
            var originalData = new byte[200];
            var rand = new Random();
            rand.NextBytes(originalData);

            var es = new EncryptionService();
            var encryptedData = es.Encrypt(originalData);

            // Act / Assert.
            encryptedData[100] = (byte)~encryptedData[100];
            TestsHelper.VerifyThrow<CryptographicException>(() => es.Decrypt(encryptedData));
        }
        public void EncryptDecryptString()
        {
            // Arrange.
            const string OriginalString = "Test String";
            var emptyString = string.Empty;

            var es = new EncryptionService();

            // Act.
            var encryptedString = es.EncryptString(OriginalString);
            var encryptedEmpty = es.EncryptString(emptyString);
            var decryptedString = es.DecryptString(encryptedString);
            var decryptedEmpty = es.DecryptString(encryptedEmpty);

            // Assert.
            Assert.AreEqual(OriginalString, decryptedString);
            Assert.AreEqual(emptyString, decryptedEmpty);

            // Invalid arguments.
            TestsHelper.VerifyThrow<ArgumentNullException>(() => es.EncryptString(null));
            TestsHelper.VerifyThrow<ArgumentNullException>(() => es.DecryptString(null));
        }