public void KeyUp(KeyEventArgs keyEventArgs, DateTime worldTime) { int symbolActionIndex = PasswordAction.GetPreseedKeyIndex(keyEventArgs.KeyCode, keyEventArgs.Shift); if (symbolActionIndex != -1) { SymbolAction symbolAction = PasswordAction.PressedKeys[symbolActionIndex]; double relativeTime = PasswordAction.GetRelativeTime(worldTime); symbolAction.KeyUpTime = relativeTime; PasswordAction.SetPasswordFunction(PasswordFunctionStates.KeyUp, relativeTime); for (int i = symbolActionIndex + 1; i < PasswordAction.PressedKeys.Count(); i++) { PasswordAction.PressedKeys[i].OverlayEndingTime = relativeTime; //можно сохранять значения клавиш, на которые была наложена текущая обрабатываемая (в цикле) клавиша } if (symbolActionIndex != 0) { symbolAction.OverlayEndingTime = symbolAction.KeyUpTime; } PasswordAction.RemovePressedKeyByIndex(symbolActionIndex); } else { //throw new Exception("Out of index in PressedKeys error"); } }
public void NextPasswordAction(string password, DateTime startTime) { if (InputMode == InputMode.Identify || InputMode == InputMode.Verify) { password = null; } PasswordAction = new PasswordAction(startTime, Settings.UserId, password); PasswordAction.SetPasswordFunction(PasswordFunctionStates.Start, 0); }
public void GetPasswordTypingDinamic(out string[] xValues, out double[] yValues) { PasswordAction passwordAction = PasswordAction; int n = passwordAction.SymbolActions.Count(); //xValues = new string[n]; //yValues = new double[n]; GetTypingDinamic(passwordAction, out xValues, out yValues); }
protected void GetKeysPressDuration(PasswordAction passwordAction, out string[] typedSymbols, out double[] result) { int n = passwordAction.SymbolActions.Count(); result = new double[n]; for (int i = 0; i < n; i++) { result[i] = passwordAction.SymbolActions[i].KeyPressDuration; } typedSymbols = passwordAction.GetTypedSymbols(); }
public PasswordAction ConstructPasswordAction(string validPassword, DateTime startTime, int userId) { PasswordAction passwordAction = new PasswordAction(); if (string.IsNullOrEmpty(validPassword)) { throw new ArgumentException("message", nameof(validPassword)); } passwordAction.ValidPassword = validPassword; passwordAction.StartTime = startTime; passwordAction.EndTime = passwordAction.StartTime; passwordAction.UserId = userId; return(passwordAction); }
public void KeyDown(KeyEventArgs keyEventArgs, DateTime worldTime) { if (keyEventArgs.KeyCode == Keys.ShiftKey || keyEventArgs.KeyCode == Keys.Control) { return; } double relativeTime = PasswordAction.GetRelativeTime(worldTime); SymbolAction symbolAction = new SymbolAction(keyEventArgs.KeyCode, keyEventArgs.Shift, relativeTime); PasswordAction.SymbolActions.Add(symbolAction); PasswordAction.PressedKeys.Add(symbolAction); PasswordAction.SetPasswordFunction(PasswordFunctionStates.KeyDown, relativeTime); if (PasswordAction.PressedKeys.Count > 1) { PasswordAction.OverlaysCount++; } }
public PasswordAction EndPasswordAction(DateTime endTime, string passwordValue) { if (InputMode == InputMode.Identify || InputMode == InputMode.Verify) { PasswordAction.ValidPassword = passwordValue; } if (passwordValue != PasswordAction.ValidPassword) { throw new InvalidPasswordException("Invalid password exception"); } unpressPressedKeys(endTime); PasswordAction.EndTime = endTime; PasswordAction.TypedSymbols = PasswordAction.GetTypedSymbols(); PasswordAction oldPasswordAction = this.PasswordAction; this.PasswordAction = null; return(oldPasswordAction); }
protected void GetTypingDinamic(PasswordAction passwordAction, out string[] typedSymbols, out double[] result) { int n = passwordAction.SymbolActions.Count(); result = new double[n]; for (int i = 0; i < n; i++) { if (i < 1) { result[i] = passwordAction.SymbolActions[i].KeyDownTime; } else { result[i] = passwordAction.SymbolActions[i].KeyDownTime - passwordAction.SymbolActions[i - 1].KeyDownTime; } } typedSymbols = passwordAction.GetTypedSymbols(); //return result; }
//private void UpdateValues() //{ // mathExpectationLabel.Text = Math.Round(statistics.GetPasswordsMathExpectasion(),3).ToString(); // dispersionLabel.Text = Math.Round(statistics.GetPasswordsDispersion(),3).ToString(); // sigmaLabel.Text = Math.Round(statistics.GetPasswordsSigma(),3).ToString(); //} private void AcceptPassword() { try { if (InputController.PasswordAction == null) { MessageBox.Show("Введите пароль!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } PasswordAction passwordAction = InputController.EndPasswordAction(DateTime.Now, passwordTextBox.Text); double m, sigma, duration, different; switch (InputController.InputMode) { case InputMode.Input: Context.PasswordActions.Add(passwordAction); Context.SaveChanges(); PasswordsUpdate?.Invoke(); break; case InputMode.Identify: User user = AuthenticationController.IdentifyUser(passwordAction, out m, out duration, out different); if (user == null) { MessageBox.Show($"Пользователь не идентифицирован\n" + $"Длительность ввода пароля - {duration}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { MessageBox.Show($"Идентифецирован пользователь {user.Login} с id={user.Id}\n" + $"Математическое ожидание длительностей вводов данного пароля у этого пользователя - {m}\n" + $"Длительность ввода пароля - {duration}\n" + $"Разница - {different}", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information); } break; case InputMode.Verify: bool result = AuthenticationController.VerifyUser(passwordAction, out m, out sigma, out duration); if (result) { MessageBox.Show($"Пользователь подтвержден \n" + $"Математическое ожидание паролей - {m} \n" + $"Среднеквадартическое отклонение - {sigma} \n" + $"Длительность введенного пароля - {duration}", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information); } else if (m != 0 && sigma != 0) { MessageBox.Show($"Пользователь не подтвержден \n" + $"Математическое ожидание паролей - {m} \n" + $"Среднеквадартическое отклонение - {sigma} \n" + $"Длительность введенного пароля - {duration}", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { MessageBox.Show("Польльзователь не подтвержден", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Error); } break; default: break; } } catch (InvalidPasswordException) { MessageBox.Show("Пароль неверный!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (BaseException) { } }
public void GetKeysPressDurations(out string[] xValues, out double[] yValues) { PasswordAction passwordAction = PasswordAction; GetKeysPressDuration(passwordAction, out xValues, out yValues); }
public double GetOverlaysCount() { PasswordAction passwordAction = PasswordAction; return(passwordAction.OverlaysCount); }
public void AddPasswordAction(PasswordAction passwordAction) { users.Add(user); context.SaveChanges(); }
//public void UpdatePasswordAtions() //{ // PasswordActions = database.PasswordActions. Include(passAct=> passAct.SymbolActions). // Where(passAct => passAct.UserId == this.Settings.User.Id). // Where(passAct=>passAct.ValidPassword==this.Settings.Password). //} public void InsertPasswordAction(PasswordAction passwordAction) { database.PasswordActions.Add(passwordAction); database.SaveChanges(); //UpdatePasswordAtions(); }