public async Task <string> GetNewPassword(PasswordRuleMatcher matcher) { string password1 = null; while (string.IsNullOrEmpty(password1)) { Console.Write("New Master Password: "******"Password Again: "); password2 = await InputManager.ReadLine(new ReadLineParameters { IsSecured = true }); if (string.CompareOrdinal(password1, password2) == 0) { continue; } Console.WriteLine("Passwords do not match."); password2 = null; } return(password1); }
public static async Task <string> ChangeMasterPassword(this IAuthentication auth) { if (auth.AuthCallback is IPostLoginTaskUI postUi) { var userParams = await auth.Endpoint.GetNewUserParams(auth.Username); var rules = userParams.PasswordMatchDescription .Zip(userParams.PasswordMatchRegex, (description, pattern) => new PasswordRule { description = description, match = true, pattern = pattern }) .ToArray(); var ruleMatcher = new PasswordRuleMatcher(rules); var newPassword = await postUi.GetNewPassword(ruleMatcher); var failedRules = ruleMatcher.MatchFailedRules(newPassword); if (failedRules.Length != 0) { throw new KeeperApiException("password_rule_failed", failedRules[0]); } var iterations = 100000; var authSalt = CryptoUtils.GetRandomBytes(16); var authVerifier = CryptoUtils.CreateAuthVerifier(newPassword, authSalt, iterations); var keySalt = CryptoUtils.GetRandomBytes(16); var encryptionParameters = CryptoUtils.CreateEncryptionParams(newPassword, keySalt, iterations, auth.AuthContext.DataKey); var command = new ChangeMasterPasswordCommand { AuthVerifier = authVerifier.Base64UrlEncode(), EncryptionParams = encryptionParameters.Base64UrlEncode() }; await auth.ExecuteAuthCommand(command); return(newPassword); } return(null); }
public Task <string> GetNewPassword(PasswordRuleMatcher matcher) { string password1 = null; while (string.IsNullOrEmpty(password1)) { Console.Write("New Master Password: "******"Password Again: "); password2 = HelperUtils.ReadLineMasked(); if (string.Compare(password1, password2, false) != 0) { Console.WriteLine("Passwords do not match."); password2 = null; } } return(Task.FromResult(password1)); }