Encryption/Decryption using the windows crypto API.
Inheritance: ICryptoEngine
        public void Constructor(DPAPIKeyType keyType)
        {
            string plainText = GenerateClearText();

            var engine = new DPAPIEngine(keyType);

            string encrypted = engine.Encrypt(plainText);

            string decrypted = engine.Decrypt(encrypted);

            Assert.NotEqual(plainText, encrypted);
            Assert.NotEqual(encrypted, decrypted);
            Assert.Equal(plainText, decrypted);
        }
        public void SetEntropyString(DPAPIKeyType keyType)
        {
            string plainText = GenerateClearText();

            var engine = new DPAPIEngine(keyType)
                .SetEntropy("myEntropy");

            string encrypted = engine.Encrypt(plainText);

            string decrypted = engine.Decrypt(encrypted);

            Assert.NotEqual(plainText, encrypted);
            Assert.NotEqual(encrypted, decrypted);
            Assert.Equal(plainText, decrypted);
        }
        public void SetEntropySecureString(DPAPIKeyType keyType)
        {
            string plainText = GenerateClearText();

            var entropy = new SecureString();
            foreach (char ch in "myEntropy")
            {
                entropy.AppendChar(ch);
            }

            var engine = new DPAPIEngine(keyType)
                .SetEntropy(entropy);

            string encrypted = engine.Encrypt(plainText);

            string decrypted = engine.Decrypt(encrypted);

            Assert.NotEqual(plainText, encrypted);
            Assert.NotEqual(encrypted, decrypted);
            Assert.Equal(plainText, decrypted);
        }
        public void SetEncoding(DPAPIKeyType keyType, Encodings encodingType)
        {
            Encoding encoding = null;

            switch (encodingType)
            {
                    //case Encodings.None:
                case Encodings.ASCII :
                    encoding = Encoding.ASCII;
                    break;
                case Encodings.UTF7 :
                    encoding = Encoding.UTF7;
                    break;
                case Encodings.UTF8 :
                    encoding = Encoding.UTF8;
                    break;
            }

            var engine = new DPAPIEngine(keyType)
                .SetEncoding(encoding);

            byte[] plainText = encoding.GetBytes(GenerateClearText());

            byte[] encrypted = engine.Encrypt(plainText);

            byte[] decrypted = engine.Decrypt(encrypted);

            Assert.NotEqual(plainText, encrypted);
            Assert.NotEqual(encrypted, decrypted);
            Assert.Equal(plainText, decrypted);
        }
        public void Failures(DPAPIKeyType keyType)
        {
            string plainText = GenerateClearText();

            var engine = new DPAPIEngine(keyType);

            string badEncrypt = Convert.ToBase64String(Encoding.UTF8.GetBytes(plainText));

            Assert.Throws<CryptographicException>(() =>
            {
                engine.Decrypt(badEncrypt);
            });
        }