public frmCryptoInput(CryptoMode Modes, IEnumerable <RSAKey> Keys) { InitializeComponent(); RsaKeys = Keys == null ? null : Keys.ToArray(); if (!Modes.HasFlag(CryptoMode.Keyfile)) { cbKeyfile.Enabled = tbKeyfile.Enabled = btnKeyfile.Enabled = false; } if (!Modes.HasFlag(CryptoMode.Password)) { cbPassword.Enabled = tbPassword.Enabled = false; } if (!Modes.HasFlag(CryptoMode.RSA) || Keys == null) { cbRSA.Enabled = lblRSAName.Enabled = btnRSA.Enabled = false; } }
public frmCryptoModeSelect(AppSettings Settings, CryptoMode AllowedModes = CryptoMode._ALL, CryptoMode PreselectedModes = 0) { InitializeComponent(); this.Settings = Settings; //Set enabled controls cbUserAccount.Enabled = AllowedModes.HasFlag(CryptoMode.CryptUser); cbComputerAccount.Enabled = AllowedModes.HasFlag(CryptoMode.CryptMachine); cbKeyfile.Enabled = AllowedModes.HasFlag(CryptoMode.Keyfile); cbPassword.Enabled = AllowedModes.HasFlag(CryptoMode.Password); cbRSA.Enabled = AllowedModes.HasFlag(CryptoMode.RSA); //Set checked controls cbUserAccount.Checked = cbUserAccount.Enabled && PreselectedModes.HasFlag(CryptoMode.CryptUser); cbComputerAccount.Checked = cbComputerAccount.Enabled && PreselectedModes.HasFlag(CryptoMode.CryptMachine); cbKeyfile.Checked = cbKeyfile.Enabled && PreselectedModes.HasFlag(CryptoMode.Keyfile); cbPassword.Checked = cbPassword.Enabled && PreselectedModes.HasFlag(CryptoMode.Password); cbRSA.Checked = cbRSA.Enabled && PreselectedModes.HasFlag(CryptoMode.RSA); }
/// <summary> /// Encrypts the given data using the given methods /// </summary> /// <param name="Modes">Encryption modes</param> /// <param name="Content">Data to encrypt</param> /// <param name="ModeParams">Parameter for the supplied modes (for those that require parameters)</param> /// <returns>Encrypted and serializable data</returns> /// <remarks>See the <see cref="CryptoMode"/> enumeration for required arguments</remarks> public static EncryptedData Encrypt(CryptoMode Modes, byte[] Content, IDictionary <CryptoMode, object> ModeParams = null) { var ED = new EncryptedData(); var AesKey = ED.AesKey = GetRandomKey(); var MacKey = ED.MacKey = GetRandomKey(); var KeyBlob = Encoding.ASCII.GetBytes(Convert.ToBase64String(AesKey) + ":" + Convert.ToBase64String(MacKey)); //var EncModes = Tools.FlagsToArray(Modes); ED.Data = EncryptWithKey(Content, AesKey, MacKey); var Providers = new List <KeyProvider>(); foreach (var ModeParam in ModeParams.Where(m => Modes.HasFlag(m.Key))) { switch (ModeParam.Key) { case CryptoMode.CryptUser: Providers.Add(new KeyProvider() { Mode = ModeParam.Key, KeyData = new AesCryptoData() { Salt = null, IV = null, Data = ProtectData(false, KeyBlob) } }); break; case CryptoMode.CryptMachine: Providers.Add(new KeyProvider() { Mode = ModeParam.Key, KeyData = new AesCryptoData() { Salt = null, IV = null, Data = ProtectData(true, KeyBlob) } }); break; case CryptoMode.RSA: if (ModeParam.Value == null || !(ModeParam.Value is IEnumerable <RSAParameters>)) { throw new ArgumentException("RSA mode requires an RSAParameters structure as argument"); } foreach (var key in (IEnumerable <RSAParameters>)ModeParam.Value) { Providers.Add(new KeyProvider() { Mode = ModeParam.Key, KeyData = EncryptWithRSAKey(KeyBlob, key) }); } break; case CryptoMode.Keyfile: if (ModeParam.Value == null || ModeParam.Value.GetType() != typeof(string)) { throw new ArgumentException("Keyfile mode requires a file name argument"); } Providers.Add(new KeyProvider() { Mode = ModeParam.Key, KeyData = EncryptWithKeyfile(KeyBlob, ModeParam.Value.ToString()) }); break; case CryptoMode.Password: if (ModeParam.Value == null || ModeParam.Value.GetType() != typeof(string)) { throw new ArgumentException("Password mode requires a password argument"); } Providers.Add(new KeyProvider() { Mode = ModeParam.Key, KeyData = EncryptWithPassword(KeyBlob, ModeParam.Value.ToString()) }); break; default: throw new NotImplementedException($"Algorithm {ModeParam.Key} is not implemented"); } } ED.Providers = Providers.ToArray(); return(ED); }