Exemple #1
0
        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);
        }
Exemple #3
0
        /// <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);
        }