private static byte[] Decrypt(AesSettings aesSettings, byte[] input)
        {
            // Generate a decryptor from the existing key bytes and initialization
            // vector. Key size will be defined based on the number of key bytes.
            var symmetricKey = new RijndaelManaged {
                Mode = CipherMode.CBC
            };

            using (var decryptor = symmetricKey.CreateDecryptor(aesSettings.KeyBytes, aesSettings.InitVectorBytes))
            {
                using (var memoryStream = new MemoryStream(input, 0, input.Length))
                {
                    using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
                    {
                        // Since at this point we don't know what the size of decrypted data
                        // will be, allocate the buffer long enough to hold the source bytes.
                        // The source bytes will never be longer than the decrypted bytes.
                        var decryptedBytes     = new byte[input.Length];
                        var decryptedByteCount = cryptoStream.Read(decryptedBytes, 0, decryptedBytes.Length);
                        var result             = new byte[decryptedByteCount];
                        Array.Copy(decryptedBytes, result, decryptedByteCount);
                        return(result);
                    }
                }
            }
        }
        public Crypto()
        {
            var thumbprint = ConfigLoader.Get <CryptographicServiceThumbprintConfig>().ThumbPrint;

            _enabled = !string.IsNullOrWhiteSpace(thumbprint);
            if (!_enabled)
            {
                return;
            }

            var cert = GetCertificate(thumbprint);

            var config = ConfigLoader.Get <CryptographicServiceConfig>();

            var dict = new Dictionary <string, string>(StringComparer.InvariantCultureIgnoreCase)
            {
                { "key", config.AesKey },
                { "initVector", config.AesInitVector },
                { "salt", config.AesSalt }
            };

            dict.Keys.ToList().ForEach(key => { dict[key] = Decrypt(cert, dict[key]); });

            _aesSettings = new AesSettings(dict["key"], dict["initVector"], dict["salt"]);
        }
Esempio n. 3
0
        public IEncryptorFactory CreateFactory(EncryptModeEnum mode, byte[] aad = null)
        {
            var settings = AesSettings.GetEnumerator();

            switch (mode)
            {
            case EncryptModeEnum.ECB:
                return(new EcbEncryptorFactory(settings.FirstOrDefault(s => EncryptModeEnum.ECB.Equals(s.Mode))));

            case EncryptModeEnum.CBC:
                return(new CbcEncryptorFactory(settings.FirstOrDefault(s => EncryptModeEnum.CBC.Equals(s.Mode))));

            case EncryptModeEnum.CTR:
                return(new CtrEncryptorFactory(settings.FirstOrDefault(s => EncryptModeEnum.CTR.Equals(s.Mode))));

            case EncryptModeEnum.GCM:
                return(new GcmEncryptorFactory(settings.FirstOrDefault(s => EncryptModeEnum.GCM.Equals(s.Mode)), aad));

            default:
                throw new ArgumentOutOfRangeException($"Invalid Mode {mode}");
            }
        }
        private static byte[] Encrypt(AesSettings aesSettings, byte[] input)
        {
            // Generate a decryptor from the existing key bytes and initialization
            // vector. Key size will be defined based on the number of key bytes.
            var symmetricKey = new RijndaelManaged {
                Mode = CipherMode.CBC
            };

            using (var encryptor = symmetricKey.CreateEncryptor(aesSettings.KeyBytes, aesSettings.InitVectorBytes))
            {
                using (var memoryStream = new MemoryStream())
                {
                    using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
                    {
                        cryptoStream.Write(input, 0, input.Length);
                        cryptoStream.FlushFinalBlock();
                        var encryptedBytes = memoryStream.ToArray();
                        return(encryptedBytes);
                    }
                }
            }
        }
Esempio n. 5
0
        public Crypto()
        {
            var thumbprint = ConfigLoader.Get<CryptographicServiceThumbprintConfig>().ThumbPrint;
            _enabled = !string.IsNullOrWhiteSpace(thumbprint);
            if (!_enabled)
                return;

            var cert = GetCertificate(thumbprint);

            var config = ConfigLoader.Get<CryptographicServiceConfig>();

            var dict = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase)
            {
                {"key", config.AesKey},
                {"initVector", config.AesInitVector},
                {"salt", config.AesSalt}
            };

            dict.Keys.ToList().ForEach(key => { dict[key] = Decrypt(cert, dict[key]); });

            _aesSettings = new AesSettings(dict["key"], dict["initVector"], dict["salt"]);

        }
Esempio n. 6
0
 public CtrEncryptorFactory(AesSettings settings)
 {
     Settings = settings;
 }
Esempio n. 7
0
 private static byte[] Decrypt(AesSettings aesSettings, byte[] input)
 {
     // Generate a decryptor from the existing key bytes and initialization 
     // vector. Key size will be defined based on the number of key bytes.
     var symmetricKey = new RijndaelManaged {Mode = CipherMode.CBC};
     using (var decryptor = symmetricKey.CreateDecryptor(aesSettings.KeyBytes, aesSettings.InitVectorBytes))
     {
         using (var memoryStream = new MemoryStream(input, 0, input.Length))
         {
             using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
             {
                 // Since at this point we don't know what the size of decrypted data
                 // will be, allocate the buffer long enough to hold the source bytes.
                 // The source bytes will never be longer than the decrypted bytes.
                 var decryptedBytes = new byte[input.Length];
                 var decryptedByteCount = cryptoStream.Read(decryptedBytes, 0, decryptedBytes.Length);
                 var result = new byte[decryptedByteCount];
                 Array.Copy(decryptedBytes, result, decryptedByteCount);
                 return result;
             }
         }
     }
 }
Esempio n. 8
0
 private static byte[] Encrypt(AesSettings aesSettings, byte[] input)
 {
     // Generate a decryptor from the existing key bytes and initialization 
     // vector. Key size will be defined based on the number of key bytes.
     var symmetricKey = new RijndaelManaged {Mode = CipherMode.CBC};
     using (var encryptor = symmetricKey.CreateEncryptor(aesSettings.KeyBytes, aesSettings.InitVectorBytes))
     {
         using (var memoryStream = new MemoryStream())
         {
             using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
             {
                 cryptoStream.Write(input, 0, input.Length);
                 cryptoStream.FlushFinalBlock();
                 var encryptedBytes = memoryStream.ToArray();
                 return encryptedBytes;
             }
         }
     }
 }
Esempio n. 9
0
 public GcmEncryptorFactory(AesSettings settings, byte[] aad)
 {
     Settings = settings;
     Aad      = aad;
 }