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).

File:
1 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
Note: See TracChangeset for help on using the changeset viewer.