Ignore:
Timestamp:
Nov 17, 2009, 10:07:19 PM (12 years ago)
Author:
Sven Rech
Message:

KeySearcher uses BigIntegers instead of longs now.

File:
1 edited

Legend:

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

    r865 r866  
    1111using System.Threading;
    1212using System.Windows.Threading;
     13using Cryptool.PluginBase.Miscellaneous;
    1314
    1415namespace KeySearcher
     
    223224        }
    224225
    225         public long initKeyIteration(string key)
    226         {
    227             long counter = 1;
     226        public BigInteger initKeyIteration(string key)
     227        {
     228            BigInteger counter = 1;
    228229            this.key = key;
    229230            int pcount = 0;
     
    246247        }
    247248
    248         public long size()
     249        public BigInteger size()
    249250        {
    250251            if (wildcardList == null)
    251252                return 0;
    252             long counter = 1;
     253            BigInteger counter = 1;
    253254            foreach (Wildcard wc in wildcardList)
    254255                    counter *= wc.size();
     
    446447            KeyPattern[] patterns = (KeyPattern[])parameters[0];
    447448            int threadid = (int)parameters[1];
    448             Int64[] doneKeysArray = (Int64[])parameters[2];
    449             Int64[] keycounterArray = (Int64[])parameters[3];
    450             Int64[] keysLeft = (Int64[])parameters[4];
     449            BigInteger[] doneKeysArray = (BigInteger[])parameters[2];
     450            BigInteger[] keycounterArray = (BigInteger[])parameters[3];
     451            BigInteger[] keysLeft = (BigInteger[])parameters[4];
    451452            IControlEncryption sender = (IControlEncryption)parameters[5];           
    452453            int bytesToUse = (int)parameters[6];
     
    461462                while (pattern != null)
    462463                {
    463                     long size = pattern.size();
     464                    BigInteger size = pattern.size();
    464465                    keysLeft[threadid] = size;
    465466                    int nextWildcard;
     
    683684
    684685                KeyPattern[] patterns = new KeyPattern[settings.CoresUsed+1];
    685                 long size = Pattern.initKeyIteration(settings.Key);
     686                BigInteger size = Pattern.initKeyIteration(settings.Key);
    686687               
    687688                if (settings.CoresUsed > 0)
     
    695696                    {
    696697                        int maxPattern = -1;
    697                         long max = 0;
     698                        BigInteger max = 0;
    698699                        for (int i = 0; i <= p; i++)
    699700                            if (patterns[i].size() > max)
     
    713714                valuequeue = Queue.Synchronized(new Queue());
    714715
    715                 Int64[] doneKeysA = new Int64[patterns.Length];
    716                 Int64[] keycounters = new Int64[patterns.Length];
    717                 Int64[] keysleft = new Int64[patterns.Length];
     716                BigInteger[] doneKeysA = new BigInteger[patterns.Length];
     717                BigInteger[] keycounters = new BigInteger[patterns.Length];
     718                BigInteger[] keysleft = new BigInteger[patterns.Length];
    718719                Stack threadStack = Stack.Synchronized(new Stack());
    719720                for (int i = 0; i < patterns.Length; i++)
    720721                {
    721722                    WaitCallback worker = new WaitCallback(KeySearcherJob);
    722                     doneKeysA[i] = new Int64();
    723                     keycounters[i] = new Int64();
     723                    doneKeysA[i] = new BigInteger();
     724                    keycounters[i] = new BigInteger();
    724725                    ThreadPool.QueueUserWorkItem(worker, new object[] { patterns, i, doneKeysA, keycounters, keysleft, sender.clone(), bytesToUse, threadStack });
    725726                }
     
    759760                                while (node != null)
    760761                                {
    761 
    762762                                    if (vk.value < node.Value.value)
    763763                                    {
     
    773773                    }
    774774
    775                     long keycounter = 0;
    776                     long doneKeys = 0;
    777                     foreach (Int64 dk in doneKeysA)
     775                    BigInteger keycounter = 0;
     776                    BigInteger doneKeys = 0;
     777                    foreach (BigInteger dk in doneKeysA)
    778778                        doneKeys += dk;
    779                     foreach (Int64 kc in keycounters)
     779                    foreach (BigInteger kc in keycounters)
    780780                        keycounter += kc;
    781781
     
    787787                    {
    788788                        maxThreadMutex.WaitOne();
    789                         long max = 0;
     789                        BigInteger max = 0;
    790790                        int id = -1;
    791791                        for (int i = 0; i < patterns.Length; i++)
     
    798798                        maxThreadMutex.ReleaseMutex();
    799799                    }
    800 
    801                     ProgressChanged(keycounter, size);
     800                                       
     801                    ProgressChanged(Math.Pow(10, keycounter.log(10) - size.log(10)), 1.0);
    802802
    803803                    if (QuickWatchPresentation.IsVisible && doneKeys != 0 && !stop)
    804804                    {
    805                         double time = ((size - keycounter) / doneKeys);
     805                        double time = (Math.Pow(10, (size - keycounter).log(10) - doneKeys.log(10)));
    806806                        TimeSpan timeleft = new TimeSpan(-1);
    807807
Note: See TracChangeset for help on using the changeset viewer.