Esempio n. 1
0
        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);
            }
Esempio n. 3
0
            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));
            }