/// <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); }
/// <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); }