Ignore:
Timestamp:
Oct 9, 2009, 6:10:42 PM (12 years ago)
Author:
kopal
Message:

interface IControlCost added
brute force sdes with keysearcher implemented

File:
1 edited

Legend:

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

    r692 r702  
    2424using Cryptool.PluginBase.Analysis;
    2525using System.ComponentModel;
     26using Cryptool.PluginBase.Control;
    2627
    2728namespace Cryptool.Plugins.CostFunction
     
    2930    [Author("Nils Kopal", "Nils.Kopal@cryptool.org", "Uni Duisburg-Essen", "http://www.uni-due.de")]
    3031    [PluginInfo(false, "CostFunction", "CostFunction", null, "CostFunction/icon.png")]
    31     class CostFunction : IAnalysisMisc
     32    public class CostFunction : IAnalysisMisc
    3233    {
    3334        #region private variables
     
    3738        private double value = 0;
    3839        private Boolean stopped = true;
     40        private IControlCost controlSlave;
    3941        #endregion
    4042
     
    8284            }
    8385        }
     86               
     87        [PropertyInfo(Direction.ControlSlave, "SDES Slave", "Direct access to SDES.", "", DisplayLevel.Beginner)]
     88        public IControlCost ControlSlave
     89        {
     90            get
     91            {
     92                if (controlSlave == null)
     93                    controlSlave = new CostFunctionControl(this);
     94                return controlSlave;
     95            }
     96        } 
    8497
    8598        #endregion
     
    208221        }
    209222
    210         private void GuiLogMessage(string p, NotificationLevel notificationLevel)
     223        public void GuiLogMessage(string p, NotificationLevel notificationLevel)
    211224        {
    212225            EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(p, this, notificationLevel));
     
    223236        #region private methods
    224237
    225         /*
    226         * Calculates the Index of Coincidence multiplied with 100 of
    227         * a given byte array
    228         *
    229         * for example a German text has about 7.62
    230         *             an English text has about 6.61
    231         */
    232         private static double calculateIndexOfCoincidence(byte[] text)
     238        /// <summary>
     239        /// Calculates the Index of Coincidence multiplied with 100 of
     240        /// a given byte array
     241        ///
     242        /// for example a German text has about 7.62
     243        ///           an English text has about 6.61
     244        /// </summary>
     245        /// <param name="text">text to use</param>
     246        /// <returns>Index of Coincidence</returns>
     247        public double calculateIndexOfCoincidence(byte[] text)
    233248        {
    234249
     
    237252            foreach (byte b in text)
    238253            {
    239                 if (b >= 0 && b <= 255)
    240254                    n[b]++;
    241255            }
     
    245259            for (int i = 0; i < n.Length; i++)
    246260            {
    247                 coindex = coindex + n[i] * (n[i] - 1);
    248             }
    249 
    250             coindex = coindex / (text.Length * (text.Length - 1));
     261                coindex = coindex + n[i] * (n[i] - 1);               
     262            }
     263
     264            coindex = coindex / (text.Length);
     265            coindex = coindex / (text.Length - 1);
     266
    251267            return coindex * 100;
    252268
    253269        }//end calculateIndexOfCoincidence
    254270
    255         /*
    256          * Calculates the Entropy of
    257          * a given byte array
    258          *
    259          * for example a German text has about 4.0629
    260          */
    261         private static double calculateEntropy(byte[] text)
     271        /// <summary>
     272        /// Calculates the Entropy of a given byte array
     273        /// for example a German text has about 4.0629
     274        /// </summary>
     275        /// <param name="text">text to use</param>
     276        /// <returns>Entropy</returns>
     277        public double calculateEntropy(byte[] text)
    262278        {
    263279
     
    266282            foreach (byte b in text)
    267283            {
    268                 if (b >= 0 && b <= 255)
    269284                    n[b]++;
    270285            }
     
    284299
    285300        #endregion
     301
     302     
    286303    }
     304
     305    #region slave
     306
     307    public class CostFunctionControl : IControlCost
     308    {
     309
     310        #region IControlCost Members
     311
     312        private CostFunction plugin;
     313
     314        #endregion
     315
     316        /// <summary>
     317        /// Constructor
     318        /// </summary>
     319        /// <param name="plugin"></param>
     320        public CostFunctionControl(CostFunction plugin)
     321        {
     322            this.plugin = plugin;
     323        }
     324
     325        /// <summary>
     326        /// Returns the relation operator of the cost function which is set by by CostFunctionSettings
     327        /// </summary>
     328        /// <returns>RelationOperator</returns>
     329        public RelationOperator getRelationOperator()
     330        {
     331            switch (((CostFunctionSettings)this.plugin.Settings).FunctionType)
     332            {
     333                case 0: //Index of coincidence
     334                    return RelationOperator.LargerThen;
     335                case 1: //Entropy
     336                    return RelationOperator.LessThen;
     337                default:
     338                    throw new NotImplementedException("The value " + ((CostFunctionSettings)this.plugin.Settings).FunctionType + " is not implemented.");
     339            }//end switch
     340        }//end getRelationOperator
     341
     342        /// <summary>
     343        /// Calculates the cost function of the given text
     344        ///
     345        /// Cost function can be set by CostFunctionSettings
     346        /// This algorithm uses a blocksize which can be set by CostFunctionSettings
     347        /// If blocksize is set to 0 it uses the whole text
     348        ///
     349        /// </summary>
     350        /// <param name="text"></param>
     351        /// <returns>cost</returns>
     352        public double calculateCost(byte[] text)
     353        {
     354            int blocksize = 0;
     355            try
     356            {
     357                blocksize = int.Parse(((CostFunctionSettings)this.plugin.Settings).Blocksize);
     358            }
     359            catch (Exception ex)
     360            {
     361                throw new Exception("Entered blocksize is not an integer: " + ex.Message);
     362            }
     363            byte[] array;
     364
     365            if (blocksize > 0)
     366            {
     367                //Create a new Array of size of Blocksize if needed
     368                array = new byte[blocksize];
     369                for (int i = 0; i < blocksize && i < text.Length; i++)
     370                {
     371                    array[i] = text[i];
     372                }
     373            }
     374            else
     375            {
     376                array = text;
     377            }
     378
     379            switch (((CostFunctionSettings)this.plugin.Settings).FunctionType)
     380            {
     381                case 0: //Index of coincidence
     382                    return plugin.calculateIndexOfCoincidence(array);
     383                case 1: //Entropy
     384                    return plugin.calculateEntropy(array);
     385                default:
     386                    throw new NotImplementedException("The value " + ((CostFunctionSettings)this.plugin.Settings).FunctionType + " is not implemented.");
     387            }//end switch
     388        }
     389
     390        #endregion
     391    }
     392   
    287393}
Note: See TracChangeset for help on using the changeset viewer.