コード例 #1
0
        public int[] RetrieveDistances(string user, int passwordSpeed, int[] keyorder, int[] keylatency, int[] keydowntime, int[] pairedkeys)
        {
            var tryUser = new UserClass(user, "", 1337, 0, passwordSpeed, 0, keyorder, keylatency, keydowntime, pairedkeys);

            int[] newArray = new int[4];

            using (var db = new BioMexDatabaseEntities1())
            {
                User use = (from person in db.Users where ((person.US_USERNAME == user)) select person).FirstOrDefault();

                var regUser = new UserClass(use.US_USERNAME, use.US_PASSWORD, use.Features.FirstOrDefault().FE_PASSWORD_COUNT, use.Features.FirstOrDefault().FE_SHIFT_CLASS,
                                            use.Features.FirstOrDefault().FE_TYPING_SPEED, 0, DeserializeIntegers(use.Features.FirstOrDefault().FE_KEY_ORDER.ToString()).ToArray(), DeserializeIntegers(use.Features.FirstOrDefault().FE_KEY_LATENCIES.ToString()).ToArray(),
                                            DeserializeIntegers(use.Features.FirstOrDefault().FE_KEY_PRESS_DURATION.ToString()).ToArray(), DeserializeIntegers(use.Features.FirstOrDefault().FE_PAIRED_KEYS.ToString()).ToArray());

                if (use != null && use.US_USERNAME.Equals(user))
                {
                    newArray[0] = DetermineDistance(regUser.GetPasswordKeySpeed(), tryUser.GetPasswordKeySpeed());
                    System.Diagnostics.Debug.WriteLine("Speed:  " + newArray[0] + "/300");
                    newArray[1] = DetermineDistance(regUser.GetKeyDownTime(), tryUser.GetKeyDownTime());
                    System.Diagnostics.Debug.WriteLine("Key Down:  " + newArray[1] + "/400");
                    newArray[2] = DetermineDistance(regUser.GetKeyLatency(), tryUser.GetKeyLatency());
                    System.Diagnostics.Debug.WriteLine("Key Latency:  " + newArray[2] + "/500");
                    newArray[3] = DetermineDistance(regUser.GetPairedKeysSpeed(), tryUser.GetPairedKeysSpeed());
                    System.Diagnostics.Debug.WriteLine("Paired Keys:  " + newArray[3] + "/300");
                }
            }

            return(newArray);
        }
コード例 #2
0
        private void CalculateMatch(string username, string keyDescClass)
        {
            try
            {
                string decKeyClass = DecryptText(keyDescClass);

                KeypointsDescriptors kpDescriptors = DeSerializeObject <KeypointsDescriptors>(decKeyClass);

                Matrix <byte>    useDescriptors = kpDescriptors.descriptors;
                VectorOfKeyPoint useKeyPoints   = kpDescriptors.keyPoints;


                using (var db = new BioMexDatabaseEntities1())
                {
                    BFMatcher     matcher = new Emgu.CV.Features2D.BFMatcher(DistanceType.L2);
                    Matrix <byte> mask;

                    User use = (from person in db.Users where ((person.US_USERNAME == username)) select person).FirstOrDefault();

                    var regUser = new UserClass(use.US_USERNAME, use.US_PASSWORD, use.IdealFeatures.FirstOrDefault().IF_PASSWORD_COUNT, use.IdealFeatures.FirstOrDefault().IF_SHIFT_CLASS,
                                                use.IdealFeatures.FirstOrDefault().IF_TYPING_SPEED, 0, DeserializeIntegers(use.IdealFeatures.FirstOrDefault().IF_KEY_ORDER.ToString()).ToArray(), DeserializeIntegers(use.IdealFeatures.FirstOrDefault().IF_KEY_LATENCIES.ToString()).ToArray(),
                                                DeserializeIntegers(use.IdealFeatures.FirstOrDefault().IF_KEY_PRESS_DURATION.ToString()).ToArray(), DeserializeIntegers(use.IdealFeatures.FirstOrDefault().IF_PAIRED_KEYS.ToString()).ToArray());

                    if (use != null && use.US_USERNAME.Equals(username))
                    {
                        matcher.Add(useDescriptors);

                        Matrix <byte>    observedDesc      = DeSerializeObject <Matrix <byte> >(use.Features.FirstOrDefault().FaceFeature.FF_DESCRIPTORS);
                        VectorOfKeyPoint observedKeypoints = DeSerializeObject <VectorOfKeyPoint>(use.Features.FirstOrDefault().FaceFeature.FF_KEY_POINTS);

                        Matrix <int> indices = new Matrix <int>(observedDesc.Rows, 2);

                        VectorOfVectorOfDMatch vectMatch = new VectorOfVectorOfDMatch();

                        using (Matrix <float> Dist = new Matrix <float>(observedDesc.Rows, 2))
                        {
                            matcher.KnnMatch(observedDesc, vectMatch, 2, null);
                            mask = new Matrix <byte>(Dist.Rows, 1);
                            mask.SetValue(255);
                            Features2DToolbox.VoteForUniqueness(vectMatch, 0.8, mask.ToUMat().ToMat(AccessType.Read));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("Error while matching");
                System.Diagnostics.Debug.WriteLine(ex.Message);
            }
        }
コード例 #3
0
        public List <int> RetrievePairedKeyTime(string username)
        {
            using (var db = new BioMexDatabaseEntities1())
            {
                User use = (from person in db.Users where ((person.US_USERNAME == username)) select person).FirstOrDefault();

                if (use != null && use.US_USERNAME.Equals(username))
                {
                    return(DeserializeIntegers(use.Features.FirstOrDefault().FE_PAIRED_KEYS));
                }
            }

            return(null);
        }
コード例 #4
0
        public List <int> RetrieveKeyLatency(string username)
        {
            using (var db = new BioMexDatabaseEntities1())
            {
                User use = (from person in db.Users where ((person.US_USERNAME == username)) select person).FirstOrDefault();

                if (use != null && use.US_USERNAME.Equals(username))
                {
                    return(DeserializeIntegers(use.IdealFeatures.FirstOrDefault().IF_KEY_LATENCIES));
                }
            }

            return(null);
        }
コード例 #5
0
        public bool CheckUsernameAvailability(string username)
        {
            using (var db = new BioMexDatabaseEntities1())
            {
                User use = (from person in db.Users where ((person.US_USERNAME == username)) select person).FirstOrDefault();

                if (use != null && use.US_USERNAME.Equals(username))
                {
                    System.Diagnostics.Debug.WriteLine("Username check: Username taken");
                    return(false);
                }

                System.Diagnostics.Debug.WriteLine("Username check: Username available");
                return(true);
            }
        }
コード例 #6
0
        public string LogUserIn(string user, string pass, int count, int shiftclass, int passwordSpeed, int negOrder, int[] keyorder, int[] keylatency, int[] keydowntime, int[] pairedkeys, string keyDescClass)
        {
            EncryptText("");
            //Remember to set date last logged in to current date
            string decUser = DecryptText(user);

            var tryUser = new UserClass(decUser, pass, count, shiftclass, passwordSpeed, negOrder, keyorder, keylatency, keydowntime, pairedkeys);

            System.Diagnostics.Debug.WriteLine("A user attempted to log in to BioMex");

            using (var db = new BioMexDatabaseEntities1())
            {
                User use = (from person in db.Users where ((person.US_USERNAME == decUser) & (person.US_PASSWORD == pass)) select person).FirstOrDefault();

                var regUser = new UserClass(use.US_USERNAME, use.US_PASSWORD, use.IdealFeatures.FirstOrDefault().IF_PASSWORD_COUNT, use.IdealFeatures.FirstOrDefault().IF_SHIFT_CLASS,
                                            use.IdealFeatures.FirstOrDefault().IF_TYPING_SPEED, 0, DeserializeIntegers(use.IdealFeatures.FirstOrDefault().IF_KEY_ORDER.ToString()).ToArray(), DeserializeIntegers(use.IdealFeatures.FirstOrDefault().IF_KEY_LATENCIES.ToString()).ToArray(),
                                            DeserializeIntegers(use.IdealFeatures.FirstOrDefault().IF_KEY_PRESS_DURATION.ToString()).ToArray(), DeserializeIntegers(use.IdealFeatures.FirstOrDefault().IF_PAIRED_KEYS.ToString()).ToArray());

                if (use != null && use.US_USERNAME.Equals(decUser) && use.US_PASSWORD.Equals(pass))
                {
                    CalculateMatch(decUser, keyDescClass);

                    int[] useThisInt = RetrieveDistances(decUser, passwordSpeed, keyorder, keylatency, keydowntime, pairedkeys);

                    if (useThisInt[0] <= _SPEED_DISTANCE_THRESHOLD && useThisInt[1] <= _KEYDOWN_DISTANCE_THRESHOLD && useThisInt[2] <= _KEYLATENCY_DISTANCE_THRESHOLD && useThisInt[3] <= _PAIREDKEY_DISTANCE_THRESHOLD)
                    {
                        System.Diagnostics.Debug.WriteLine("User successfully logged in.");

                        return(EncryptText("ALLOW"));
                    }
                }

                System.Diagnostics.Debug.WriteLine("User login attempt failed");
                return(EncryptText("DONT"));
            }
        }
コード例 #7
0
        private IdealFeature GetIdealFeature(List <int> passwordSpeed, List <List <int> > keyDowns, List <List <int> > keyLatencies, List <List <int> > pairedKeys, List <List <int> > keyOrder)
        {
            var newFeat         = new IdealFeature();
            var avgPwSpeed      = 0;
            var keyDownAvg      = new List <int>();
            var keyLatenciesAvg = new List <int>();
            var pairedKeyAvg    = new List <int>();
            var keyOrderAvg     = new List <int>();

            using (var db = new BioMexDatabaseEntities1())
            {
                try
                {
                    for (int i = 0; i < passwordSpeed.Count; i++)
                    {
                        avgPwSpeed += passwordSpeed[i];
                    }
                    avgPwSpeed = avgPwSpeed / passwordSpeed.Count;

                    for (int i = 0; i < keyDowns.Count; i++)
                    {
                        for (int k = 0; k < keyDowns[i].Count; k++)
                        {
                            //INITIAL VALUE MUST BE PLACED (ADDED) BEFORE ADDITION CAN OCCUR    <<=== FIX!!!
                            if (i == 0)
                            {
                                keyDownAvg.Add(keyDowns[i][k]);
                            }
                            else
                            {
                                keyDownAvg[k] += keyDowns[i][k];
                            }
                        }
                    }

                    for (int i = 0; i < keyDownAvg.Count; i++)
                    {
                        keyDownAvg[i] = keyDownAvg[i] / 5;
                    }

                    for (int i = 0; i < keyLatencies.Count; i++)
                    {
                        for (int k = 0; k < keyLatencies[i].Count; k++)
                        {
                            if (i == 0)
                            {
                                keyLatenciesAvg.Add(keyLatencies[i][k]);
                            }
                            else
                            {
                                keyLatenciesAvg[k] += keyLatencies[i][k];
                            }
                        }
                    }

                    for (int i = 0; i < keyLatenciesAvg.Count; i++)
                    {
                        keyLatenciesAvg[i] = keyLatenciesAvg[i] / 5;
                    }

                    for (int i = 0; i < pairedKeys.Count; i++)
                    {
                        for (int k = 0; k < pairedKeys[i].Count; k++)
                        {
                            if (i == 0)
                            {
                                pairedKeyAvg.Add(pairedKeys[i][k]);
                            }
                            else
                            {
                                pairedKeyAvg[k] += pairedKeys[i][k];
                            }
                        }
                    }

                    for (int i = 0; i < pairedKeyAvg.Count; i++)
                    {
                        pairedKeyAvg[i] = pairedKeyAvg[i] / 5;
                    }

                    for (int i = 0; i < keyOrder.Count; i++)
                    {
                        for (int k = 0; k < keyOrder[i].Count; k++)
                        {
                            if (i == 0)
                            {
                                keyOrderAvg.Add(keyOrder[i][k]);
                            }
                            else
                            {
                                keyOrderAvg[k] += keyOrder[i][k];
                            }
                        }
                    }

                    for (int i = 0; i < keyOrderAvg.Count; i++)
                    {
                        keyOrderAvg[i] = keyOrderAvg[i] / 5;
                    }

                    newFeat = new IdealFeature
                    {
                        IF_KEY_LATENCIES      = SerializeIntegers(keyLatenciesAvg),
                        IF_KEY_ORDER          = SerializeIntegers(keyOrderAvg),
                        IF_PAIRED_KEYS        = SerializeIntegers(pairedKeyAvg),
                        IF_TYPING_SPEED       = avgPwSpeed,
                        IF_KEY_PRESS_DURATION = SerializeIntegers(keyDownAvg)
                    };
                }
                catch (Exception ex)
                {
                    //System.Diagnostics.Debug.WriteLine("Exception caught while calculating the ideal feature");
                    System.Diagnostics.Debug.WriteLine(ex.InnerException);
                }
            }

            return(newFeat);
        }
コード例 #8
0
        public void RegisterNewUser(string name, string surname, string username, int age, string password, int passwordCount, int shiftClassification, List <int> passwordSpeed, List <List <int> > keyDowns, List <List <int> > keyLatencies, List <List <int> > pairedKeys, List <List <int> > keyOrder, string keyDescClass)
        {
            EncryptText("");
            using (var db = new BioMexDatabaseEntities1())
            {
                try
                {
                    var newUser = new User
                    {
                        US_NAME           = name,
                        US_SURNAME        = surname,
                        US_PASSWORD       = password,
                        US_USERNAME       = DecryptText(username),
                        US_AGE            = age,
                        US_LAST_LOGGED_IN = DateTime.Now,
                        US_UP_TO_DATE     = true,
                        US_IS_ADMIN       = false,
                    };

                    for (int i = 0; i < 5; i++)
                    {
                        var newFeat = new Feature
                        {
                            FE_PASSWORD_COUNT     = passwordCount,
                            FE_SHIFT_CLASS        = shiftClassification,
                            FE_TIME_TAKEN         = DateTime.Now,
                            FE_TYPING_SPEED       = passwordSpeed[i],
                            FE_KEY_PRESS_DURATION = SerializeIntegers(keyDowns[i]),
                            FE_KEY_LATENCIES      = SerializeIntegers(keyLatencies[i]),
                            FE_KEY_ORDER          = SerializeIntegers(keyOrder[i]),
                            FE_PAIRED_KEYS        = SerializeIntegers(pairedKeys[i]),
                        };

                        newUser.Features.Add(newFeat);
                    }

                    var idealFeat = GetIdealFeature(passwordSpeed, keyDowns, keyLatencies, pairedKeys, keyOrder);

                    idealFeat.IF_PASSWORD_COUNT = passwordCount;
                    idealFeat.IF_SHIFT_CLASS    = shiftClassification;
                    idealFeat.IF_TIME_TAKEN     = DateTime.Now;

                    newUser.IdealFeatures.Add(idealFeat);

                    FaceFeature newFaceFeat = new FaceFeature();

                    //newFaceFeat.FF_DESCRIPTORS = DecryptText(descriptors);
                    //newFaceFeat.FF_KEY_POINTS = DecryptText(keypoints);

                    KeypointsDescriptors builtUpClass = DeSerializeObject <KeypointsDescriptors>(DecryptText(keyDescClass));

                    newFaceFeat.FF_DESCRIPTORS = SerializeObject(builtUpClass.descriptors.ToString());
                    newFaceFeat.FF_KEY_POINTS  = SerializeObject(builtUpClass.keyPoints.ToArray());

                    newUser.Features.FirstOrDefault().FaceFeature = newFaceFeat;



                    db.Users.Add(newUser);
                    db.SaveChanges();
                    System.Diagnostics.Debug.WriteLine("New user successfully added");
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.WriteLine("Exception caught while registering new user");
                    System.Diagnostics.Debug.WriteLine(ex.Message);
                }
            }
        }