コード例 #1
0
        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");
            }
        }
コード例 #2
0
 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);
 }
コード例 #3
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);
        }
コード例 #4
0
        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();
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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++;
            }
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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;
        }
コード例 #9
0
        //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)
            {
            }
        }
コード例 #10
0
        public void GetKeysPressDurations(out string[] xValues, out double[] yValues)
        {
            PasswordAction passwordAction = PasswordAction;

            GetKeysPressDuration(passwordAction, out xValues, out yValues);
        }
コード例 #11
0
        public double GetOverlaysCount()
        {
            PasswordAction passwordAction = PasswordAction;

            return(passwordAction.OverlaysCount);
        }
コード例 #12
0
 public void AddPasswordAction(PasswordAction passwordAction)
 {
     users.Add(user);
     context.SaveChanges();
 }
コード例 #13
0
        //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();
        }