Changeset 865 for trunk/CrypPlugins/AES


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

some big optimizations to the keypattern mechanism of the keysearcher.
The keysearcher itself should have zero performace overhead now.
But bruteforcing AES and DES is still very slow.
By profiling, we found out that the Microsoft Crypto implementations are to blame, because they aren't optimized for speed.
So the next step would be to replace those implementations....

File:
1 edited

Legend:

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

    r822 r865  
    875875        }
    876876
    877         public byte[] getKeyFromString(string key)
     877        public byte[] getKeyFromString(string key, ref int[] arrayPointers, ref int[] arraySuccessors, ref int[] arrayUppers)
    878878        {
    879879            int bytes = 0;
     
    891891            }
    892892            byte[] bkey = new byte[bytes];
     893            int counter = 0;
     894            bool allocated = false;
    893895            for (int i = 0; i < bytes; i++)
    894896            {
    895897                try
    896898                {
    897                     bkey[i] = Convert.ToByte(key.Substring(i * 3, 2), 16);
     899                    string substr = key.Substring(i * 3, 2);
     900                    if (!allocated && (substr[0] == '*' || substr[1] == '*'))
     901                    {
     902                        arrayPointers = new int[bytes];
     903                        for (int j = 0; j < bytes; j++)
     904                            arrayPointers[j] = -1;
     905                        arraySuccessors = new int[bytes];
     906                        arrayUppers = new int[bytes];
     907                        allocated = true;
     908                    }
     909                    if (substr[0] != '*' && substr[1] != '*')
     910                        bkey[i] = Convert.ToByte(substr, 16);
     911                    else if (substr[0] == '*' && substr[1] == '*')
     912                    {
     913                        bkey[i] = 0;
     914                        arrayPointers[counter] = i;
     915                        arraySuccessors[counter] = 1;
     916                        arrayUppers[counter] = 255;
     917                        counter++;
     918                    }
     919                    else if (substr[0] != '*' && substr[1] == '*')
     920                    {
     921                        bkey[i] = Convert.ToByte(substr[0] + "0", 16);
     922                        arrayPointers[counter] = i;
     923                        arraySuccessors[counter] = 1;
     924                        arrayUppers[counter] = Convert.ToByte(substr[0] + "F", 16);
     925                        counter++;
     926                    }
     927                    else if (substr[0] == '*' && substr[1] != '*')
     928                    {
     929                        bkey[i] = Convert.ToByte("0" + substr[1], 16);
     930                        arrayPointers[counter] = i;
     931                        arraySuccessors[counter] = 16;
     932                        arrayUppers[counter] = Convert.ToByte("F" + substr[1], 16);
     933                        counter++;
     934                    }
    898935                }
    899936                catch (Exception ex)
Note: See TracChangeset for help on using the changeset viewer.