示例#1
0
        /// <summary>
        /// Get a Vault from the specified database with the
        /// specified name using the specified password to
        /// create it if it doesn't exist.  Will return null
        /// if password is not specified and the vault
        /// doesn't exist in the specified database
        /// </summary>
        /// <param name="database"></param>
        /// <param name="vaultName"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public static Vault Retrieve(Database database, string vaultName, string password = null)
        {
            Vault result = Vault.OneWhere(c => c.Name == vaultName, database);

            if (result == null && !string.IsNullOrEmpty(password))
            {
                result = Create(database, vaultName, password);
            }
            if (result != null)
            {
                result.Decrypt();
            }
            return(result);
        }
示例#2
0
        /// <summary>
        /// Create a Vault in the specified database by the specified
        /// name using the specified password to create it if it
        /// doesn't exist
        /// </summary>
        /// <param name="database"></param>
        /// <param name="name"></param>
        /// <param name="password"></param>
        /// <param name="rsaKeyLength"></param>
        /// <returns></returns>
        public static Vault Create(Database database, string name, string password, RsaKeyLength rsaKeyLength = RsaKeyLength._1024)
        {
            Vault result = Vault.OneWhere(c => c.Name == name, database);

            if (result == null)
            {
                result      = new Vault();
                result.Name = name;
                result.Save(database);
                VaultKey key = result.VaultKeysByVaultId.JustOne(database, false);
                AsymmetricCipherKeyPair keys = RsaKeyGen.GenerateKeyPair(rsaKeyLength);
                key.RsaKey   = keys.ToPem();
                key.Password = password.EncryptWithPublicKey(keys);
                key.Save(database);
            }

            return(result);
        }