Changeset 1868


Ignore:
Timestamp:
Aug 24, 2010, 9:40:17 PM (11 years ago)
Author:
malischewski
Message:

Added combo box in the settings panel for switching between entropy functions (default is the NativeCryptography one)
Both functions produces identical results, NativeCryptography supposedly faster (not yet tested).

Location:
trunk/CrypPlugins/CostFunction
Files:
2 edited

Legend:

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

    r1864 r1868  
    519519        public double calculateEntropy(byte[] text, int bytesToUse)
    520520        {
    521             return NativeCryptography.Crypto.calculateEntropy(text, bytesToUse);
    522             if (bytesToUse > text.Length)
    523            
    524                 bytesToUse = text.Length;
    525            
    526             if (lastUsedSize != bytesToUse)
    527             {
    528                 try
    529                 {
    530                     prepareMutex.WaitOne();
     521            switch (this.settings.entropyselect)
     522            {
     523                case 0:
     524                    return NativeCryptography.Crypto.calculateEntropy(text, bytesToUse);
     525                case 1:
     526                    if (bytesToUse > text.Length)
     527
     528                        bytesToUse = text.Length;
     529
    531530                    if (lastUsedSize != bytesToUse)
    532531                    {
    533                         prepareEntropy(bytesToUse);
    534                         lastUsedSize = bytesToUse;
     532                        try
     533                        {
     534                            prepareMutex.WaitOne();
     535                            if (lastUsedSize != bytesToUse)
     536                            {
     537                                prepareEntropy(bytesToUse);
     538                                lastUsedSize = bytesToUse;
     539                            }
     540                        }
     541                        finally
     542                        {
     543                            prepareMutex.ReleaseMutex();
     544                        }
    535545                    }
    536                 }
    537                 finally
    538                 {
    539                     prepareMutex.ReleaseMutex();
    540                 }
    541             }
    542 
    543             int[] n = new int[256];
    544             //count all ASCII symbols
    545             for (int counter = 0; counter < bytesToUse; counter++)
    546             {
    547                 n[text[counter]]++;
    548             }
    549 
    550             double entropy = 0;
    551             //calculate probabilities and sum entropy
    552             for (int i = 0; i < 256; i++)
    553                 entropy += xlogx[n[i]];
    554 
    555             return entropy / (double)bytesToUse;
    556 
     546
     547                    int[] n = new int[256];
     548                    //count all ASCII symbols
     549                    for (int counter = 0; counter < bytesToUse; counter++)
     550                    {
     551                        n[text[counter]]++;
     552                    }
     553
     554                    double entropy = 0;
     555                    //calculate probabilities and sum entropy
     556                    for (int i = 0; i < 256; i++)
     557                        entropy += xlogx[n[i]];
     558
     559                    return entropy / (double)bytesToUse;
     560                default:
     561                    return NativeCryptography.Crypto.calculateEntropy(text, bytesToUse);
     562            }
    557563        }//end calculateEntropy
    558564
  • trunk/CrypPlugins/CostFunction/CostFunctionSettings.cs

    r1858 r1868  
    110110            }
    111111        }
     112        public int entropyselect;
     113        [TaskPane("Select Entropy function", "Select an Entropy function", null, 9, false, DisplayLevel.Expert, ControlType.ComboBox, new string[] { "External (NativeCryptography, default)", "Internal" })]
     114        public int entropy
     115        {
     116            get
     117            {
     118                return entropyselect;
     119            }
     120
     121            set
     122            {
     123                entropyselect = value;
     124                OnPropertyChanged("entropy");
     125            }
     126        }
     127
    112128        public string customfwtpath;
    113129        public int fwt = 0; //fwt = fitness weight table
     
    184200
    185201            }
    186            
    187 
     202            if (functionType.Equals(1))
     203            {
     204                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("entropyselect", Visibility.Visible)));
     205            }
     206            else
     207            {
     208                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("entropyselect", Visibility.Collapsed)));
     209            }
    188210        }
    189211
Note: See TracChangeset for help on using the changeset viewer.