Changeset 838


Ignore:
Timestamp:
Nov 10, 2009, 3:34:58 PM (12 years ago)
Author:
Sven Rech
Message:

some small keysearcher changes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/KeySearcher/KeySearcher.cs

    r837 r838  
    4444            {
    4545                length = wc.length;
    46                 counter = 0;
     46                counter = wc.counter;
    4747                for (int i = 0; i < 256; i++)
    4848                    values[i] = wc.values[i];
     
    5555            public Wildcard[] split()
    5656            {
     57                int length = this.length - this.counter;
    5758                Wildcard[] wcs = new Wildcard[2];
    5859                wcs[0] = new Wildcard();
     
    6364                wcs[1].length = length - wcs[0].length;
    6465                for (int i = 0; i < wcs[0].length; i++)
    65                     wcs[0].values[i] = values[i];
     66                    wcs[0].values[i] = values[this.counter + i];
    6667                for (int i = 0; i < wcs[1].length; i++)
    67                     wcs[1].values[i] = values[i + wcs[0].length];
     68                    wcs[1].values[i] = values[i + this.counter + wcs[0].length];
    6869                return wcs;
    6970            }
     
    9091            }
    9192
     93
     94            public int count()
     95            {
     96                return counter;
     97            }
     98
     99            public void resetCounter()
     100            {
     101                counter = 0;
     102            }
    92103        }
    93104
     
    113124            for (int i = 0; i < wildcardList.Count; i++)
    114125            {
    115                 if (!s && ((Wildcard)wildcardList[i]).size() > 1)
    116                 {
    117                     Wildcard[] wc = ((Wildcard)wildcardList[i]).split();
    118                     patterns[0].wildcardList.Add(wc[0]);
    119                     patterns[1].wildcardList.Add(wc[1]);
     126                Wildcard wc = ((Wildcard)wildcardList[i]);
     127                if (!s && (wc.size() - wc.count()) > 1)
     128                {
     129                    Wildcard[] wcs = wc.split();
     130                    patterns[0].wildcardList.Add(wcs[0]);
     131                    patterns[1].wildcardList.Add(wcs[1]);
    120132                    s = true;
    121133                }
    122134                else
    123135                {
    124                     patterns[0].wildcardList.Add(new Wildcard((Wildcard)wildcardList[i]));
    125                     patterns[1].wildcardList.Add(new Wildcard((Wildcard)wildcardList[i]));
     136                    patterns[0].wildcardList.Add(new Wildcard(wc));
     137                    Wildcard copy = new Wildcard(wc);
     138                    copy.resetCounter();
     139                    patterns[1].wildcardList.Add(copy);
    126140                }
    127141            }
     
    258272        private Queue valuequeue;
    259273        private double value_threshold;
     274        private int maxThread;  //the thread with the most keys left
    260275
    261276        private KeyPattern pattern = null;
     
    322337            int threadid = (int)parameters[1];
    323338            Int64[] doneKeysArray = (Int64[])parameters[2];
    324             Int64[] keycounterArray = (Int64[])parameters[3];           
    325             IControlEncryption sender = (IControlEncryption)parameters[4];
    326             int bytesToUse = (int)parameters[5];
     339            Int64[] keycounterArray = (Int64[])parameters[3];
     340            Int64[] keysLeft = (Int64[])parameters[4];
     341            IControlEncryption sender = (IControlEncryption)parameters[5];
     342            int bytesToUse = (int)parameters[6];
    327343
    328344            try
    329345            {
    330 
    331346                long size = pattern.size();
     347                keysLeft[threadid] = size;
    332348
    333349                do
     
    378394                    doneKeysArray[threadid]++;
    379395                    keycounterArray[threadid]++;
     396                    keysLeft[threadid]--;
     397
     398                    //if (maxThread == threadid)
     399                   
    380400                } while (pattern.nextKey() && !stop);
     401
    381402            }
    382403            finally
     
    442463                Int64[] doneKeysA = new Int64[patterns.Length];
    443464                Int64[] keycounters = new Int64[patterns.Length];
     465                Int64[] keysleft = new Int64[patterns.Length];
    444466                for (int i = 0; i < patterns.Length; i++)
    445467                {
     
    447469                    doneKeysA[i] = new Int64();
    448470                    keycounters[i] = new Int64();
    449                     ThreadPool.QueueUserWorkItem(worker, new object[] { patterns[i], i, doneKeysA, keycounters, sender.clone(), bytesToUse });
     471                    ThreadPool.QueueUserWorkItem(worker, new object[] { patterns[i], i, doneKeysA, keycounters, keysleft, sender.clone(), bytesToUse });
    450472                }
    451473               
     
    454476                {
    455477                    Thread.Sleep(1000);
     478
     479                    long max = 0;
     480                    int id = -1;
     481                    for (int i = 0; i < patterns.Length; i++)
     482                        if (keysleft[i] > max)
     483                        {
     484                            max = keysleft[i];
     485                            id = i;
     486                        }
     487                    maxThread = id;
    456488
    457489                    //update toplist:
Note: See TracChangeset for help on using the changeset viewer.