Beispiel #1
0
        private static double ComputePathCost(List <QePatternInstance> l,
                                              char[] vPassword, EntropyEncoder ecPattern, MultiEntropyEncoder mcData)
        {
            ecPattern.Reset();
            for (int i = 0; i < l.Count; ++i)
            {
                ecPattern.Write(l[i].PatternID);
            }
            double dblPatternCost = ecPattern.GetOutputSize();

            mcData.Reset();
            double dblDataCost = 0.0;

            foreach (QePatternInstance pi in l)
            {
                QeCharType tChar = pi.SingleCharType;
                if (tChar != null)
                {
                    char ch = vPassword[pi.Position];
                    if (!mcData.Write(tChar.TypeID, ch))
                    {
                        dblDataCost += pi.Cost;
                    }
                }
                else
                {
                    dblDataCost += pi.Cost;
                }
            }
            dblDataCost += mcData.GetOutputSize();

            return(dblPatternCost + dblDataCost);
        }
Beispiel #2
0
        private static void FindDiffSeqs(char[] vPassword,
                                         List <QePatternInstance>[] vPatterns)
        {
            int n = vPassword.Length;
            int d = int.MaxValue, p = 0;

            for (int i = 1; i <= n; ++i)
            {
                int dCur = ((i == n) ? int.MinValue :
                            ((int)vPassword[i] - (int)vPassword[i - 1]));
                if (dCur != d)
                {
                    if ((i - p) >= 3)                    // At least 3 chars involved
                    {
                        QeCharType ct      = GetCharType(vPassword[p]);
                        double     dblCost = ct.CharSize + Log2(i - p - 1);

                        vPatterns[p].Add(new QePatternInstance(p,
                                                               i - p, PatternID.DiffSeq, dblCost));
                    }

                    d = dCur;
                    p = i - 1;
                }
            }
        }
Beispiel #3
0
        private static void FindDiffSeqs(char[] vPassword,
                                         List <QePatternInstance>[] vPatterns)
        {
            int    d = int.MinValue, p = 0;
            string str = new string(vPassword) + new string(char.MaxValue, 1);

            for (int i = 1; i < str.Length; ++i)
            {
                int dCur = (int)str[i] - (int)str[i - 1];
                if (dCur != d)
                {
                    if ((i - p) >= 3)                    // At least 3 chars involved
                    {
                        QeCharType ct      = GetCharType(str[p]);
                        double     dblCost = ct.CharSize + Log2(i - p - 1);

                        vPatterns[p].Add(new QePatternInstance(p,
                                                               i - p, PatternID.DiffSeq, dblCost));
                    }

                    d = dCur;
                    p = i - 1;
                }
            }
        }
Beispiel #4
0
 public QePatternInstance(int iPosition, int nLength, QeCharType ctSingle)
 {
     m_iPos        = iPosition;
     m_nLen        = nLength;
     m_chPatternID = ctSingle.TypeID;
     m_dblCost     = ctSingle.CharSize;
     m_ctSingle    = ctSingle;
 }
 public QePatternInstance(int position, int length, QeCharType singleCharacter)
 {
     this.position       = position;
     this.length         = length;
     patternId           = singleCharacter.TypeId;
     cost                = singleCharacter.CharSize;
     singleCharacterType = singleCharacter;
 }
 public QePatternInstance(int position, int length, char patternId, double cost)
 {
     this.position       = position;
     this.length         = length;
     this.patternId      = patternId;
     this.cost           = cost;
     singleCharacterType = null;
 }
Beispiel #7
0
 public QePatternInstance(int iPosition, int nLength, char chPatternID,
                          double dblCost)
 {
     m_iPos        = iPosition;
     m_nLen        = nLength;
     m_chPatternID = chPatternID;
     m_dblCost     = dblCost;
     m_ctSingle    = null;
 }
			public QePatternInstance(int iPosition, int nLength, QeCharType ctSingle)
			{
				m_iPos = iPosition;
				m_nLen = nLength;
				m_chPatternID = ctSingle.TypeID;
				m_dblCost = ctSingle.CharSize;
				m_ctSingle = ctSingle;
			}
			public QePatternInstance(int iPosition, int nLength, char chPatternID,
				double dblCost)
			{
				m_iPos = iPosition;
				m_nLen = nLength;
				m_chPatternID = chPatternID;
				m_dblCost = dblCost;
				m_ctSingle = null;
			}