Changeset 5955


Ignore:
Timestamp:
Apr 9, 2014, 5:37:25 PM (8 years ago)
Author:
weyers
Message:

SIGABA KnownPlaintext fast deciphermethod doppelclick feature added. Resource files added.

Location:
trunk/CrypPluginsExperimental
Files:
2 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPluginsExperimental/CrypPluginTemplate/CrypPluginTemplate.csproj

    r4098 r5955  
    6464      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    6565    </Reference>
     66    <Reference Include="System.Numerics" />
    6667    <Reference Include="System.Xaml" />
    6768    <Reference Include="System.Xml.Linq">
     
    7879  </ItemGroup>
    7980  <ItemGroup>
     81    <Compile Include="ConstantsByte.cs" />
    8082    <Compile Include="ExamplePluginCT2.cs" />
    8183    <Compile Include="ExamplePluginCT2Settings.cs" />
    8284    <Compile Include="Properties\AssemblyInfo.cs" />
     85    <Compile Include="RotorByte.cs" />
     86    <Compile Include="SigabaCoreFast.cs" />
     87    <Compile Include="StampChallenge2Presentation.xaml.cs">
     88      <DependentUpon>StampChallenge2Presentation.xaml</DependentUpon>
     89    </Compile>
    8390  </ItemGroup>
    8491  <ItemGroup>
     
    109116    <Resource Include="userdoc.xml" />
    110117  </ItemGroup>
     118  <ItemGroup>
     119    <Page Include="StampChallenge2Presentation.xaml">
     120      <SubType>Designer</SubType>
     121      <Generator>MSBuild:Compile</Generator>
     122    </Page>
     123  </ItemGroup>
    111124  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
    112125  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
  • trunk/CrypPluginsExperimental/CrypPluginTemplate/ExamplePluginCT2.cs

    r4179 r5955  
    1414   limitations under the License.
    1515*/
     16
     17using System;
     18using System.Collections;
     19using System.Collections.Generic;
    1620using System.ComponentModel;
     21using System.Diagnostics;
     22using System.Globalization;
     23using System.Linq;
     24using System.Numerics;
     25using System.Text;
     26using System.Threading;
    1727using System.Windows.Controls;
     28using System.Windows.Threading;
    1829using Cryptool.PluginBase;
     30using Cryptool.PluginBase.Control;
    1931using Cryptool.PluginBase.Miscellaneous;
    20 
    21 namespace Cryptool.Plugins.ExamplePluginCT2
     32using ExamplePluginCT2;
     33
     34namespace StampChallenge2
    2235{
    2336    // HOWTO: Change author name, email address, organization and URL.
     
    2538    // HOWTO: Change plugin caption (title to appear in CT2) and tooltip.
    2639    // You can (and should) provide a user documentation as XML file and an own icon.
    27     [PluginInfo("Example Plugin", "Subtract one number from another", "ExamplePluginCT2/userdoc.xml", new[] { "CrypWin/images/default.png" })]
     40    [PluginInfo("Stamp Challenge(old)", "Subtract one number from another", "ExamplePluginCT2/userdoc.xml", new[] { "CrypWin/images/default.png" })]
    2841    // HOWTO: Change category to one that fits to your plugin. Multiple categories are allowed.
    2942    [ComponentCategory(ComponentCategory.ToolsMisc)]
     
    3447        // HOWTO: You need to adapt the settings class as well, see the corresponding file.
    3548        private readonly ExamplePluginCT2Settings settings = new ExamplePluginCT2Settings();
     49        private SigabaCoreFast _core;
     50        private StampChallenge2Presentation _presentation = new StampChallenge2Presentation();
     51        private IControlCost costMaster;
     52        private LinkedList<ValueKey> list1;
     53        private Queue valuequeue;
     54        List<double> bestlist = new List<double>();
     55        DateTime lastUpdate = DateTime.Now;
     56        DateTime starttime = DateTime.Now;
     57
     58        public ExamplePluginCT2()
     59        {
     60            Presentation = _presentation;
     61            _core = new SigabaCoreFast(this);
     62        }
    3663
    3764        #endregion
     
    4370        /// You can add more input properties of other type if needed.
    4471        /// </summary>
    45         [PropertyInfo(Direction.InputData, "Input name", "Input tooltip description")]
    46         public int SomeInput
     72        [PropertyInfo(Direction.InputData, "Cipher", "Input tooltip description")]
     73        public String Cipher
    4774        {
    4875            get;
     
    5077        }
    5178
     79        [PropertyInfo(Direction.InputData, "Crib", "Input tooltip description")]
     80        public String Crib
     81        {
     82            get;
     83            set;
     84        }
     85
     86        [PropertyInfo(Direction.ControlMaster, "CostMasterCaption", "CostMasterTooltip", false)]
     87        public IControlCost CostMaster
     88        {
     89            get { return costMaster; }
     90            set { costMaster = value; }
     91        }
     92
     93
    5294        /// <summary>
    5395        /// HOWTO: Output interface to write the output data.
     
    5597        /// </summary>
    5698        [PropertyInfo(Direction.OutputData, "Output name", "Output tooltip description")]
    57         public int SomeOutput
     99        public string Output
    58100        {
    59101            get;
     
    76118        /// Provide custom presentation to visualize the execution or return null.
    77119        /// </summary>
    78         public UserControl Presentation
    79         {
    80             get { return null; }
    81         }
     120        public UserControl Presentation { get; private set; }
    82121
    83122        /// <summary>
     
    93132        public void Execute()
    94133        {
     134
     135           
     136
     137            double best = Double.MinValue;
     138            bestlist.Add(Double.MinValue);
     139
     140            if (costMaster.GetRelationOperator() == RelationOperator.LessThen)
     141            {
     142                best = Double.MaxValue;
     143                bestlist.Add(Double.MaxValue);
     144            }
     145            starttime = DateTime.Now;
     146            list1 = getDummyLinkedList(best);
     147            valuequeue = Queue.Synchronized(new Queue());
     148
    95149            // HOWTO: Use this to show the progress of a plugin algorithm execution in the editor.
    96150            ProgressChanged(0, 1);
    97151
    98152            // HOWTO: After you have changed an output property, make sure you announce the name of the changed property to the CT2 core.
    99             SomeOutput = SomeInput - settings.SomeParameter;
     153            //SomeOutput = SomeInput - settings.SomeParameter;
     154            /*Thread t1 = new Thread(bruteforceAlphabetMaze);
     155            Thread t2 = new Thread(bruteforceAlphabetMaze);
     156
     157            t1.Start(0);
     158            t2.Start(1);
     159           
     160           /*while(true)
     161            {
     162                if (scape != "")
     163                {
     164                    Console.WriteLine(scape);
     165
     166                    scape = "";
     167                }
     168           
     169            Thread.Sleep(30000);
     170            }*/
     171
     172            bruteforceAlphabetMaze();
     173
    100174            OnPropertyChanged("SomeOutput");
    101175
     
    107181            ProgressChanged(1, 1);
    108182        }
     183        public static string GetIntBinaryString(int n)
     184        {
     185            var b = new char[5];
     186            int pos = 4;
     187            int i = 0;
     188
     189            while (i < 5)
     190            {
     191                if ((n & (1 << i)) != 0)
     192                {
     193                    b[pos] = '1';
     194                }
     195                else
     196                {
     197                    b[pos] = '0';
     198                }
     199                pos--;
     200                i++;
     201            }
     202            return new string(b);
     203        }
     204       
     205
     206
     207        private void bruteforceAlphabetMaze()
     208        {
     209           
     210           
     211
     212            int[] foo = new int[10] {  1, 2, 3, 4 ,5,6,7,8,9,10};
     213            IEnumerable<IEnumerable<int>> combis = Blupp.Combinations(foo, 5);
     214            byte[] positions  = new byte[5]{0,1,2,3,4};
     215
     216            int counter = 0;
     217
     218           
     219           
     220            _core.InitializeRotors();
     221
     222            for (int enumi = 0; enumi < combis.Count();enumi++ )
     223            {
     224                int[] arr = combis.ElementAt(enumi).ToArray();
     225
     226                int[] f = foo.Except(arr).ToArray();
     227                do
     228                {
     229                    for (int y = 0; y < 5; y++)
     230                    {
     231                        _core.setCipherRotors(y, (byte)arr[y]);
     232
     233                    }
     234                    for (int ix = 0; ix < 32; ix++)
     235                    {
     236                        String s = GetIntBinaryString(ix);
     237                        _core.setBool((byte)arr[0], 0, s[0] == '1');
     238                        _core.setBool((byte)arr[1], 1, s[1] == '1');
     239                        _core.setBool((byte)arr[2], 2, s[2] == '1');
     240                        _core.setBool((byte)arr[3], 3, s[3] == '1');
     241                        _core.setBool((byte)arr[4], 4, s[4] == '1');
     242
     243                        _core.CipherRotors[0].Reverse = s[0] == '1';
     244                        _core.CipherRotors[1].Reverse = s[1] == '1';
     245                        _core.CipherRotors[2].Reverse = s[2] == '1';
     246                        _core.CipherRotors[3].Reverse = s[3] == '1';
     247                        _core.CipherRotors[4].Reverse = s[4] == '1';
     248
     249                        /*
     250                        _core.CipherRotors[0].Reverse = true;
     251                        _core.setBool((byte) arr[0], 0, true);
     252                        _core.setBool((byte) arr[1], 1, true);
     253                        _core.setBool((byte) arr[2], 2, true);
     254                        _core.setBool((byte) arr[3], 3, true);
     255                        _core.setBool((byte) arr[4], 4, true);
     256
     257                        /*_core.CipherRotors[0].Reverse = true;
     258                        _core.CipherRotors[1].Reverse = true;
     259                        _core.CipherRotors[2].Reverse = true;
     260                        _core.CipherRotors[3].Reverse = true;
     261                        _core.CipherRotors[4].Reverse = true;
     262                        */
     263
     264                        List<int[][]> retlst = new List<int[][]>();
     265                        System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
     266
     267                        retlst = _core.PhaseI3(enc.GetBytes(Cipher), enc.GetBytes(Crib), arr, positions);
     268
     269                        _core.setCodeWheels(arr, new[] { "" });
     270
     271                        foreach (int[][] intse in retlst)
     272                        {
     273                            int x = 0;
     274                            foreach (int i in arr)
     275                            {
     276                                Console.Write(i + "  " + _core.CipherRotors[4 - x].Reverse + "  ");
     277                                x++;
     278                            }
     279                            Console.WriteLine("");
     280                            Stopwatch sw = new Stopwatch();
     281                            sw.Start();
     282                            if (_core.stepOneCompact(intse, enc.GetBytes(Cipher), arr))
     283                            {
     284                                sw.Stop();
     285                            }
     286
     287                            Console.WriteLine("Elapsed={0}", sw.Elapsed);
     288                        }
     289
     290
     291
     292                    }
     293
     294                } while (NextPermutation(arr));
     295
     296                // break;
     297            }
     298
     299            Console.WriteLine(counter);
     300
     301        }
     302
     303        public void addEntry(byte[] plain)
     304        {
     305            double val = costMaster.CalculateCost(plain);
     306            if (costMaster.GetRelationOperator() == RelationOperator.LessThen)
     307            {
     308
     309                if (val <= bestlist.Last())
     310                {
     311                    bestlist.Add(val);
     312                    bestlist.Sort();
     313                    bestlist.Reverse();
     314
     315                    if (bestlist.Count > 10)
     316                        bestlist.RemoveAt(10);
     317                    var valkey = new ValueKey();
     318                    valkey.decryption = plain;
     319                    valkey.value = val;
     320                    valuequeue.Enqueue(
     321                        valkey);
     322                }
     323            }
     324            else
     325                {
     326                    if (val >= bestlist.Last())
     327                    {
     328                        bestlist.Add(val);
     329                        bestlist.Sort();
     330                        bestlist.Reverse();
     331
     332                        if (bestlist.Count > 10)
     333                            bestlist.RemoveAt(10);
     334                        var valkey = new ValueKey();
     335                        valkey.decryption = plain;
     336                        valkey.value = val;
     337                        valuequeue.Enqueue(valkey);
     338                    }
     339                }
     340            if (lastUpdate.AddMilliseconds(500) <DateTime.Now)
     341            {
     342                UpdatePresentationList(0,0,starttime);
     343                lastUpdate = DateTime.Now;
     344            }
     345
     346               
     347           
     348        }
     349
     350        private DateTime UpdatePresentationList(BigInteger size, BigInteger sum, DateTime starttime)
     351        {
     352            DateTime lastUpdate;
     353            updateToplist(list1);
     354            showProgress(starttime, size, sum);
     355
     356            double d = (((double)sum / (double)size) * 100);
     357
     358            ProgressChanged(d, 100);
     359            lastUpdate = DateTime.Now;
     360            return lastUpdate;
     361        }
     362
     363        private void showProgress(DateTime startTime, BigInteger size, BigInteger sum)
     364        {
     365            LinkedListNode<ValueKey> linkedListNode;
     366            if (Presentation.IsVisible)
     367            {
     368                DateTime currentTime = DateTime.Now;
     369
     370                TimeSpan elapsedtime = DateTime.Now.Subtract(startTime);
     371                ;
     372                var elapsedspan = new TimeSpan(elapsedtime.Days, elapsedtime.Hours, elapsedtime.Minutes,
     373                                               elapsedtime.Seconds, 0);
     374
     375
     376                TimeSpan span = currentTime.Subtract(startTime);
     377                int seconds = span.Seconds;
     378                int minutes = span.Minutes;
     379                int hours = span.Hours;
     380                int days = span.Days;
     381
     382                long allseconds = seconds + 60 * minutes + 60 * 60 * hours + 24 * 60 * 60 * days;
     383                if (allseconds == 0) allseconds = 1;
     384
     385                if (allseconds == 0)
     386                    allseconds = 1;
     387
     388                double keysPerSec = Math.Round((double)sum / allseconds, 2);
     389
     390                BigInteger keystodo = (size - sum);
     391
     392
     393                if (keysPerSec == 0)
     394                    keysPerSec = 1;
     395
     396                double secstodo = ((double)keystodo / keysPerSec);
     397
     398                //dummy Time
     399                var endTime = new DateTime(1970, 1, 1);
     400                try
     401                {
     402                    endTime = DateTime.Now.AddSeconds(secstodo);
     403                }
     404                catch
     405                {
     406                }
     407
     408
     409                (Presentation).Dispatcher.BeginInvoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
     410                {
     411                    ((
     412                     StampChallenge2Presentation
     413                     )
     414                     Presentation)
     415                        .
     416                        startTime
     417                        .
     418                        Content
     419                        = "" +
     420                          startTime;
     421                    ((
     422                     StampChallenge2Presentation
     423                     )
     424                     Presentation)
     425                        .
     426                        keysPerSecond
     427                        .
     428                        Content
     429                        = "" +
     430                          keysPerSec;
     431
     432
     433                    if (
     434                        endTime !=
     435                        (new DateTime
     436                            (1970,
     437                             1,
     438                             1)))
     439                    {
     440                        ((
     441                         StampChallenge2Presentation
     442                         )
     443                         Presentation).timeLeft.Content = "" + endTime.Subtract(DateTime.Now).ToString(@"dd\.hh\:mm\:ss");
     444                        ((
     445                         StampChallenge2Presentation
     446                         )
     447                         Presentation)
     448                            .
     449                            elapsedTime
     450                            .
     451                            Content
     452                            =
     453                            "" +
     454                            elapsedspan;
     455                        ((
     456                         StampChallenge2Presentation
     457                         )
     458                         Presentation)
     459                            .
     460                            endTime
     461                            .
     462                            Content
     463                            =
     464                            "" +
     465                            endTime;
     466                    }
     467                    else
     468                    {
     469                        ((
     470                         StampChallenge2Presentation
     471                         )
     472                         Presentation)
     473                            .
     474                            timeLeft
     475                            .
     476                            Content
     477                            =
     478                            "incalculable";
     479
     480                        ((
     481                         StampChallenge2Presentation
     482                         )
     483                         Presentation)
     484                            .
     485                            endTime
     486                            .
     487                            Content
     488                            =
     489                            "in a galaxy far, far away...";
     490                    }
     491                    if (
     492                        list1 !=
     493                        null)
     494                    {
     495                        linkedListNode
     496                            =
     497                            list1
     498                                .
     499                                First;
     500                        ((
     501                         StampChallenge2Presentation
     502                         )
     503                         Presentation)
     504                            .
     505                            entries
     506                            .
     507                            Clear
     508                            ();
     509                        int i
     510                            =
     511                            0;
     512                        while
     513                            (
     514                            linkedListNode !=
     515                            null)
     516                        {
     517                            i
     518                                ++;
     519                            var
     520                                entry
     521                                    =
     522                                    new ResultEntry
     523                                        ();
     524                            entry.Ranking = i.ToString(CultureInfo.InvariantCulture);
     525
     526
     527                            String
     528                                dec
     529                                    =
     530                                    Encoding
     531                                        .
     532                                        ASCII
     533                                        .
     534                                        GetString
     535                                        (linkedListNode
     536                                             .
     537                                             Value
     538                                             .
     539                                             decryption);
     540                            if
     541                                (
     542                                dec
     543                                    .
     544                                    Length >
     545                                2500)
     546                            // Short strings need not to be cut off
     547                            {
     548                                dec
     549                                    =
     550                                    dec
     551                                        .
     552                                        Substring
     553                                        (0,
     554                                         2500);
     555                            }
     556                            entry
     557                                .
     558                                Text
     559                                =
     560                                dec;
     561                            entry
     562                                .
     563                                CipherKey
     564                                =
     565                                linkedListNode
     566                                    .
     567                                    Value
     568                                    .
     569                                    cipherKey;
     570                            entry
     571                                .
     572                                IndexKey
     573                                =
     574                                linkedListNode
     575                                    .
     576                                    Value
     577                                    .
     578                                    indexKey;
     579                            entry
     580                                .
     581                                ControlKey
     582                                =
     583                                linkedListNode
     584                                    .
     585                                    Value
     586                                    .
     587                                    controlKey;
     588                            entry
     589                                .
     590                                CipherRotors
     591                                =
     592                                linkedListNode
     593                                    .
     594                                    Value
     595                                    .
     596                                    cipherRotors;
     597                            entry
     598                                .
     599                                ControlRotors
     600                                =
     601                                linkedListNode
     602                                    .
     603                                    Value
     604                                    .
     605                                    controlRotors;
     606                            entry
     607                                .
     608                                IndexRotors
     609                                =
     610                                linkedListNode
     611                                    .
     612                                    Value
     613                                    .
     614                                    indexRotors;
     615                            entry
     616                                .
     617                                Value
     618                                =
     619                                Math
     620                                    .
     621                                    Round
     622                                    (linkedListNode
     623                                         .
     624                                         Value
     625                                         .
     626                                         value,
     627                                     2) +
     628                                "";
     629
     630
     631                            ((
     632                             StampChallenge2Presentation
     633                             )
     634                             Presentation)
     635                                .
     636                                entries
     637                                .
     638                                Add
     639                                (entry);
     640
     641                            linkedListNode
     642                                =
     643                                linkedListNode
     644                                    .
     645                                    Next;
     646                        }
     647                    }
     648                }
     649                                                      , null);
     650            }
     651        }
     652
     653        private void updateToplist(LinkedList<ValueKey> costList)
     654        {
     655            LinkedListNode<ValueKey> node;
     656
     657            var enc = new ASCIIEncoding();
     658
     659            while (valuequeue.Count != 0)
     660            {
     661                var vk = (ValueKey)valuequeue.Dequeue();
     662                if (costMaster.GetRelationOperator() == RelationOperator.LargerThen)
     663                {
     664                    if (vk.value > costList.Last().value)
     665                    {
     666                        node = costList.First;
     667                        int i = 0;
     668                        while (node != null)
     669                        {
     670                            if (vk.value > node.Value.value)
     671                            {
     672                                costList.AddBefore(node, vk);
     673                                costList.RemoveLast();
     674                                if (i == 0)
     675                                {
     676                                    Output = enc.GetString(vk.decryption);
     677                                }
     678                                // value_threshold = costList.Last.Value.value;
     679                                break;
     680                            }
     681                            node = node.Next;
     682                            i++;
     683                        } //end while
     684                    } //end if
     685                }
     686                else
     687                {
     688                    if (vk.value < costList.Last().value)
     689                    {
     690                        node = costList.First;
     691                        int i = 0;
     692                        while (node != null)
     693                        {
     694                            if (vk.value < node.Value.value)
     695                            {
     696                                costList.AddBefore(node, vk);
     697                                costList.RemoveLast();
     698                                if (i == 0)
     699                                {
     700                                    Output = enc.GetString(vk.decryption);
     701                                }
     702
     703                                // value_threshold = costList.Last.Value.value;
     704                                break;
     705                            }
     706                            node = node.Next;
     707                            i++;
     708                        } //end while
     709                    } //end if
     710                }
     711            }
     712            OnPropertyChanged("Output");
     713        }
     714
     715        private static bool NextPermutation(int[] numList)
     716        {
     717            /*
     718             Knuths
     719             1. Find the largest index j such that a[j] < a[j + 1]. If no such index exists, the permutation is the last permutation.
     720             2. Find the largest index l such that a[j] < a[l]. Since j + 1 is such an index, l is well defined and satisfies j < l.
     721             3. Swap a[j] with a[l].
     722             4. Reverse the sequence from a[j + 1] up to and including the final element a[n].
     723
     724             */
     725            var largestIndex = -1;
     726            for (var i = numList.Length - 2; i >= 0; i--)
     727            {
     728                if (numList[i] < numList[i + 1])
     729                {
     730                    largestIndex = i;
     731                    break;
     732                }
     733            }
     734
     735            if (largestIndex < 0) return false;
     736
     737            var largestIndex2 = -1;
     738            for (var i = numList.Length - 1; i >= 0; i--)
     739            {
     740                if (numList[largestIndex] < numList[i])
     741                {
     742                    largestIndex2 = i;
     743                    break;
     744                }
     745            }
     746
     747            var tmp = numList[largestIndex];
     748            numList[largestIndex] = numList[largestIndex2];
     749            numList[largestIndex2] = tmp;
     750
     751            for (int i = largestIndex + 1, j = numList.Length - 1; i < j; i++, j--)
     752            {
     753                tmp = numList[i];
     754                numList[i] = numList[j];
     755                numList[j] = tmp;
     756            }
     757
     758            return true;
     759        }
    109760
    110761        /// <summary>
     
    137788        }
    138789
     790
     791
    139792        #endregion
    140793
     
    149802        public event PropertyChangedEventHandler PropertyChanged;
    150803
    151         private void GuiLogMessage(string message, NotificationLevel logLevel)
     804        public void GuiLogMessage(string message, NotificationLevel logLevel)
    152805        {
    153806            EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(message, this, logLevel));
     
    165818
    166819        #endregion
     820       
     821        private LinkedList<ValueKey> getDummyLinkedList(double best)
     822        {
     823            var valueKey = new ValueKey();
     824            valueKey.value = best;
     825            valueKey.cipherKey = "dummykey";
     826            valueKey.controlKey = "dummykey";
     827            valueKey.indexKey = "dummykey";
     828            valueKey.cipherRotors = "dummykey";
     829            valueKey.controlRotors = "dummykey";
     830
     831            valueKey.decryption = new byte[0];
     832            var list = new LinkedList<ValueKey>();
     833            LinkedListNode<ValueKey> node = list.AddFirst(valueKey);
     834            for (int i = 0; i < 9; i++)
     835            {
     836                node = list.AddAfter(node, valueKey);
     837            }
     838            return list;
     839        }
     840
     841    }
     842
     843   
     844    public struct ValueKey
     845    {
     846        public String cipherKey;
     847        public String cipherRotors;
     848        public String controlKey;
     849        public String controlRotors;
     850        public byte[] decryption;
     851        public String indexKey;
     852        public String indexRotors;
     853        public byte[] keyArray;
     854        public double value;
     855    };
     856
     857    public class ResultEntry
     858    {
     859        public string Ranking { get; set; }
     860        public string Value { get; set; }
     861        public string CipherKey { get; set; }
     862        public string ControlKey { get; set; }
     863        public string IndexKey { get; set; }
     864        public string CipherRotors { get; set; }
     865        public string ControlRotors { get; set; }
     866        public string IndexRotors { get; set; }
     867        public string Text { get; set; }
    167868    }
    168869}
  • trunk/CrypPluginsExperimental/CrypPluginTemplate/ExamplePluginCT2Settings.cs

    r5787 r5955  
    1919using Cryptool.PluginBase.Miscellaneous;
    2020
    21 namespace Cryptool.Plugins.ExamplePluginCT2
     21namespace StampChallenge2
    2222{
    2323    // HOWTO: rename class (click name, press F2)
  • trunk/CrypPluginsExperimental/SIgabaKnownPlaintext/SIgabaKnownPlaintext.csproj

    r5912 r5955  
    8181    <Compile Include="ConstantsByte.cs" />
    8282    <Compile Include="Properties\AssemblyInfo.cs" />
     83    <Compile Include="Properties\Resources.de.Designer.cs">
     84      <DependentUpon>Resources.de.resx</DependentUpon>
     85      <AutoGen>True</AutoGen>
     86      <DesignTime>True</DesignTime>
     87    </Compile>
     88    <Compile Include="Properties\Resources.Designer.cs">
     89      <DependentUpon>Resources.resx</DependentUpon>
     90      <AutoGen>True</AutoGen>
     91      <DesignTime>True</DesignTime>
     92    </Compile>
    8393    <Compile Include="RotorByte.cs" />
    8494    <Compile Include="SigabaCoreFastPhaseI.cs" />
     
    126136    </Page>
    127137  </ItemGroup>
     138  <ItemGroup>
     139    <EmbeddedResource Include="Properties\Resources.de.resx">
     140      <Generator>PublicResXFileCodeGenerator</Generator>
     141      <LastGenOutput>Resources.de.Designer.cs</LastGenOutput>
     142    </EmbeddedResource>
     143    <EmbeddedResource Include="Properties\Resources.resx">
     144      <Generator>PublicResXFileCodeGenerator</Generator>
     145      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
     146      <SubType>Designer</SubType>
     147    </EmbeddedResource>
     148  </ItemGroup>
    128149  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
    129150  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
  • trunk/CrypPluginsExperimental/SIgabaKnownPlaintext/SigabaCoreFastKnownPlaintext.cs

    r5926 r5955  
    962962        }
    963963
     964        public String[] FindSteppingMazeCompletionCompact2(int[][] input2, Candidate winner, int[][] temp, int[] pseudo)
     965        {
     966            String[] returnString;
     967            List<int[]> alreadyTested = new List<int[]>();
     968            int[] test = new int[26];
     969            int[][] test2 = new int[26][];
     970
     971            test2 = winner.Pseudo;
     972            int[] loopvars = new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
     973
     974            do
     975            {
     976                test[0] = test2[0][loopvars[0]];
     977                test[1] = test2[1][loopvars[1]];
     978                test[2] = test2[2][loopvars[2]];
     979                test[3] = test2[3][loopvars[3]];
     980                test[4] = test2[4][loopvars[4]];
     981                test[5] = test2[5][loopvars[5]];
     982                test[6] = test2[6][loopvars[6]];
     983                test[7] = test2[7][loopvars[7]];
     984                test[8] = test2[8][loopvars[8]];
     985                test[9] = test2[9][loopvars[9]];
     986                test[10] = test2[10][loopvars[10]];
     987                test[11] = test2[11][loopvars[11]];
     988                test[12] = test2[12][loopvars[12]];
     989                test[13] = test2[13][loopvars[13]];
     990                test[14] = test2[14][loopvars[14]];
     991                test[15] = test2[15][loopvars[15]];
     992                test[16] = test2[16][loopvars[16]];
     993                test[17] = test2[17][loopvars[17]];
     994                test[18] = test2[18][loopvars[18]];
     995                test[19] = test2[19][loopvars[19]];
     996                test[20] = test2[20][loopvars[20]];
     997                test[21] = test2[21][loopvars[21]];
     998                test[22] = test2[22][loopvars[22]];
     999                test[23] = test2[23][loopvars[23]];
     1000                test[24] = test2[24][loopvars[24]];
     1001                test[25] = test2[25][loopvars[25]];
     1002
     1003
     1004                int counter1 = 0;
     1005                int counter2 = 0;
     1006                int counter3 = 0;
     1007                int counter4 = 0;
     1008                int counter5 = 0;
     1009
     1010
     1011
     1012                foreach (int ix1 in test)
     1013                {
     1014                    if (ix1 == 0)
     1015                        counter1++;
     1016                    if (ix1 == 1)
     1017                        counter2++;
     1018                    if (ix1 == 2)
     1019                        counter3++;
     1020                    if (ix1 == 3)
     1021                        counter4++;
     1022                    if (ix1 == 4)
     1023                        counter5++;
     1024                }
     1025
     1026                int[] countarr = new int[5] { counter1, counter2, counter3, counter4, counter5 };
     1027
     1028                if (counter1 < 1 || counter2 < 1 || counter3 < 1 || counter4 < 1 || counter5 < 1 || counter1 > 11 ||
     1029                    counter2 > 11 || counter3 > 11 || counter4 > 11 || counter5 > 11)
     1030                {
     1031                    //increment2(loopvars, test2);
     1032                    goto RESTART;
     1033                }
     1034
     1035                /* if (counter1 + counter2 + counter3 + counter4 + counter5 != 26) //Wegen der Schleife über temp immer ==26 außer im error case
     1036                  {
     1037                      //increment2(loopvars, test2);
     1038                      goto RESTART;
     1039                  }*/
     1040
     1041
     1042                Array.Sort(countarr);
     1043
     1044
     1045                Boolean brB = false;
     1046                for (int cm = 0; cm < alreadyTested.Count; cm++)
     1047                {
     1048                    Boolean bev = false;
     1049                    for (int cn = 0; cn < alreadyTested[cm].Length; cn++)
     1050                    {
     1051                        if (alreadyTested[cm][cn] != countarr[4 - cn])
     1052                        {
     1053                            bev = true;
     1054                        }
     1055                    }
     1056                    if (!bev)
     1057                    {
     1058                        brB = true;
     1059                        break;
     1060                    }
     1061                }
     1062
     1063                if (brB)
     1064                {
     1065                    goto RESTART;
     1066                }
     1067
     1068                alreadyTested.Add(countarr);
     1069
     1070
     1071                List<int[][]> l3 = IndexPermutations(countarr);
     1072
     1073                int[] rest = new int[2];
     1074
     1075                bool b = true;
     1076                for (int i = 0; i < 5; i++)
     1077                {
     1078                    if (!winner.RotorType.Contains(i))
     1079                    {
     1080                        if (b)
     1081                        {
     1082                            rest[0] = i;
     1083                            b = false;
     1084                        }
     1085                        else
     1086                        {
     1087                            rest[1] = i;
     1088                        }
     1089
     1090                    }
     1091                }
     1092
     1093
     1094
     1095                for (int re = 0; re < 2; re++)
     1096                {
     1097                    RotorByte[] testRotor = new RotorByte[2];
     1098                    testRotor[0] = CodeWheels2[rest[re]];
     1099                    // Console.WriteLine("");
     1100                    if (re == 1)
     1101                    {
     1102                        testRotor[1] = CodeWheels2[rest[0]];
     1103                        // Console.Write(rest[0]);
     1104                        // Console.Write(rest[1]);
     1105                    }
     1106                    else
     1107                    {
     1108                        testRotor[1] = CodeWheels2[rest[1]];
     1109                        //Console.Write(rest[1]);
     1110                        //Console.Write(rest[0]);
     1111                    }
     1112
     1113
     1114                    for (int indpo = 0; indpo < l3.Count; indpo++)
     1115                    {
     1116                        int[] steppingmaze = new int[10];
     1117
     1118                        for (int i = 0; i < 10; i++)
     1119                        {
     1120                            for (int ix = 0; ix < 5; ix++)
     1121                            {
     1122                                if (l3[indpo][ix].Contains(i))
     1123                                {
     1124                                    steppingmaze[i] = ix;
     1125                                }
     1126                            }
     1127
     1128                        }
     1129                        for (int rev1 = 0; rev1 < 2; rev1++)
     1130                        {
     1131                            testRotor[0].Reverse = (rev1 == 1);
     1132                            for (int rev2 = 0; rev2 < 2; rev2++)
     1133                            {
     1134                                testRotor[1].Reverse = (rev2 == 1);
     1135                                for (int pos = 0; pos < 26; pos++)
     1136                                {
     1137                                    for (int pos2 = 0; pos2 < 26; pos2++)
     1138                                    {
     1139
     1140                                        testRotor[0].Position = pos;
     1141                                        testRotor[1].Position = pos2;
     1142
     1143
     1144
     1145                                        for (int letters = 0; letters < input2.Length - 1; letters++)
     1146                                        {
     1147                                            int tempf = temp[letters][0];
     1148                                            int tempg = temp[letters][1];
     1149                                            int temph = temp[letters][2];
     1150                                            int tempi = temp[letters][3];
     1151
     1152                                            for (int i = 0; i < 2; i++)
     1153                                            {
     1154                                                if (testRotor[i].Reverse)
     1155                                                {
     1156                                                    tempf =
     1157                                                        testRotor[i].RotSubMatRevBack[
     1158                                                            testRotor[i].Position, tempf];
     1159                                                    tempg =
     1160                                                        testRotor[i].RotSubMatRevBack[
     1161                                                            testRotor[i].Position, tempg];
     1162                                                    temph =
     1163                                                        testRotor[i].RotSubMatRevBack[
     1164                                                            testRotor[i].Position, temph];
     1165                                                    tempi =
     1166                                                        testRotor[i].RotSubMatRevBack[
     1167                                                            testRotor[i].Position, tempi];
     1168                                                }
     1169                                                else
     1170                                                {
     1171                                                    tempf =
     1172                                                        testRotor[i].RotSubMatBack[testRotor[i].Position, tempf];
     1173                                                    tempg =
     1174                                                        testRotor[i].RotSubMatBack[testRotor[i].Position, tempg];
     1175                                                    temph =
     1176                                                        testRotor[i].RotSubMatBack[testRotor[i].Position, temph];
     1177                                                    tempi =
     1178                                                        testRotor[i].RotSubMatBack[testRotor[i].Position, tempi];
     1179                                                }
     1180                                            }
     1181
     1182                                            /*Console.Write((char)(tempf + 65) + "");
     1183                                                Console.Write((char)(tempg + 65) + "");
     1184                                                Console.Write((char)(temph + 65) + "");
     1185                                                Console.Write((char)(tempi + 65) + "" + letters);
     1186                                                Console.WriteLine();
     1187                                                Console.ReadKey();*/
     1188
     1189
     1190
     1191                                            tempf = ConstantsByte.Transform[0][tempf];
     1192                                            tempg = ConstantsByte.Transform[0][tempg];
     1193                                            temph = ConstantsByte.Transform[0][temph];
     1194                                            tempi = ConstantsByte.Transform[0][tempi];
     1195
     1196                                            tempf = steppingmaze[tempf];
     1197                                            tempg = steppingmaze[tempg];
     1198                                            temph = steppingmaze[temph];
     1199                                            tempi = steppingmaze[tempi];
     1200
     1201                                            if (!input2[letters].Contains(tempf) ||
     1202                                                !input2[letters].Contains(tempg) ||
     1203                                                !input2[letters].Contains(temph) ||
     1204                                                !input2[letters].Contains(tempi))
     1205                                                break;
     1206
     1207                                            if (letters == input2.Length - 2)
     1208                                            {
     1209                                                Console.WriteLine("we have got a winner");
     1210                                                //Console.WriteLine("Rotor 4: " + pos + testRotor.Reverse + rest[re] + wi);
     1211                                                Console.WriteLine("Rotor1: " + realWheels[winner.RotorType[0]] +
     1212                                                                  " REverse: " +
     1213                                                                  winner.Reverse[0] + " POsition: " +
     1214                                                                  winner.Positions[0] +
     1215                                                                  " Rotor2: " + realWheels[winner.RotorType[1]] +
     1216                                                                  " REverse: " +
     1217                                                                  winner.Reverse[1] + " POsition: " +
     1218                                                                  winner.Positions[1] +
     1219                                                                  " Rotor3: " + realWheels[winner.RotorType[2]] +
     1220                                                                  " REverse: " +
     1221                                                                  winner.Reverse[2] + " POsition: " +
     1222                                                                  winner.Positions[2] +
     1223                                                                  " Rotor4: " + realWheels[rest[0]] + " REverse: " +
     1224                                                                  testRotor[0].Reverse + " POsition: " + pos +
     1225                                                                  " Rotor5: " + realWheels[rest[1]] + " REverse: " +
     1226                                                                  testRotor[1].Reverse + " POsition: " + pos2
     1227                                                    );
     1228                                                List<int[]> indexKey = findIndexMaze(steppingmaze);
     1229                                                /*facade.AddEntryComplete(winner, steppingmaze, pos, pos2,
     1230                                                                        realWheels[rest[re]],
     1231                                                                        realWheels[rest[re == 0 ? 1 : 0]], rev1 == 1,
     1232                                                                        rev2 == 1, indexKey);*/
     1233                                                returnString = new string[5];
     1234                                                returnString[0] = "" + realWheels[rest[0]] + "" +realWheels[rest[1]];
     1235                                                returnString[1] = "" + (char)(pos + 65) + "" + (char)(pos2 + 65);
     1236                                                returnString[2] = (testRotor[0].Reverse ? "R" : " ") + (testRotor[0].Reverse ? "R" : " ");
     1237                                                List<int[]> indma =  findIndexMaze(steppingmaze);
     1238
     1239                                                returnString[3] = indma[0][0] + " " +indma[0][1] + " "+indma[0][2] + " "+indma[0][3] + " "+indma[0][4] ;
     1240                                                returnString[4] = (indma[1][0] + 1) + " " + (indma[1][1] + 1) + " " + (indma[1][2] + 1) + " " + (indma[1][3] + 1) + " " + (indma[1][4] + 1);
     1241
     1242                                                return returnString;
     1243
     1244
     1245                                                break;
     1246                                            }
     1247
     1248                                            if (temp[letters][4] == 1)
     1249                                            {
     1250                                                testRotor[0].IncrementPosition();
     1251                                            }
     1252
     1253                                        }
     1254                                    }
     1255                                }
     1256                            }
     1257                        }
     1258                    }
     1259                }
     1260            RESTART:
     1261                ;
     1262            } while (increment2(loopvars, test2));
     1263
     1264
     1265
     1266            return null;
     1267        }
     1268
    9641269        public Boolean WinnerfastDeciph(int[][] input2, Candidate winner, int[][] temp)
    9651270        {
     
    11191424                                    test[25] = pseudo[25][loopvars[25]];
    11201425
    1121                                    
    1122                                     facade.AddEntryComplete2(winner,pos,realWheels[rest[re]],(rev!=0), test);
     1426                                    int counter1 = 0;
     1427                                    int counter2 = 0;
     1428                                    int counter3 = 0;
     1429                                    int counter4 = 0;
     1430                                    int counter5 = 0;
     1431
     1432
     1433
     1434                                    foreach (int ix1 in test)
     1435                                    {
     1436                                        if (ix1 == 0)
     1437                                            counter1++;
     1438                                        if (ix1 == 1)
     1439                                            counter2++;
     1440                                        if (ix1 == 2)
     1441                                            counter3++;
     1442                                        if (ix1 == 3)
     1443                                            counter4++;
     1444                                        if (ix1 == 4)
     1445                                            counter5++;
     1446                                    }
     1447
     1448                                    int[] countarr = new int[5] { counter1, counter2, counter3, counter4, counter5 };
     1449
     1450
     1451                                    if (counter1 > 0 && counter2 > 0 && counter3 > 0 && counter4 > 0 && counter5 > 0 && counter1 < 12 && counter2 < 12 && counter3 < 12 && counter4 < 12 && counter5 < 12)
     1452                                    {
     1453                                        facade.AddEntryComplete2(winner, pos, realWheels[rest[re]], (rev != 0), test,
     1454                                                                 temp, input2);
     1455                                    }
    11231456
    11241457                                } while (increment2(loopvars, pseudo));
     
    11471480        }
    11481481
     1482        public String[] FindSteppingMazeCompletionCompact(int[][] input2, Candidate winner, int[][] temp, int[] pseudo)
     1483        {
     1484
     1485            String[] returnString ;
     1486
     1487            List<int[]> alreadyTested = new List<int[]>();
     1488            int[] test = pseudo;
     1489           
     1490           
     1491                int counter1 = 0;
     1492                int counter2 = 0;
     1493                int counter3 = 0;
     1494                int counter4 = 0;
     1495                int counter5 = 0;
     1496
     1497
     1498
     1499                foreach (int ix1 in test)
     1500                {
     1501                    if (ix1 == 0)
     1502                        counter1++;
     1503                    if (ix1 == 1)
     1504                        counter2++;
     1505                    if (ix1 == 2)
     1506                        counter3++;
     1507                    if (ix1 == 3)
     1508                        counter4++;
     1509                    if (ix1 == 4)
     1510                        counter5++;
     1511                }
     1512
     1513                int[] countarr = new int[5] { counter1, counter2, counter3, counter4, counter5 };
     1514
     1515                if (counter1 < 1 || counter2 < 1 || counter3 < 1 || counter4 < 1 || counter5 < 1 || counter1 > 11 ||
     1516                    counter2 > 11 || counter3 > 11 || counter4 > 11 || counter5 > 11)
     1517                {
     1518                    //increment2(loopvars, test2);
     1519                    goto RESTART;
     1520                }
     1521
     1522                /* if (counter1 + counter2 + counter3 + counter4 + counter5 != 26) //Wegen der Schleife über temp immer ==26 außer im error case
     1523                  {
     1524                      //increment2(loopvars, test2);
     1525                      goto RESTART;
     1526                  }*/
     1527
     1528
     1529                Array.Sort(countarr);
     1530
     1531
     1532                Boolean brB = false;
     1533                for (int cm = 0; cm < alreadyTested.Count; cm++)
     1534                {
     1535                    Boolean bev = false;
     1536                    for (int cn = 0; cn < alreadyTested[cm].Length; cn++)
     1537                    {
     1538                        if (alreadyTested[cm][cn] != countarr[4 - cn])
     1539                        {
     1540                            bev = true;
     1541                        }
     1542                    }
     1543                    if (!bev)
     1544                    {
     1545                        brB = true;
     1546                        break;
     1547                    }
     1548                }
     1549
     1550                if (brB)
     1551                {
     1552                    goto RESTART;
     1553                }
     1554
     1555                alreadyTested.Add(countarr);
     1556
     1557
     1558                List<int[][]> l3 = IndexPermutations(countarr);
     1559
     1560                int rest = new int();
     1561
     1562                bool b = true;
     1563                for (int i = 0; i < 5; i++)
     1564                {
     1565                    if (!winner.RotorType.Contains(i))
     1566                    {
     1567                        rest = i;
     1568                    }
     1569                }
     1570
     1571
     1572
     1573                for (int re = 0; re < 2; re++)
     1574                {
     1575                    RotorByte testRotor;
     1576                    testRotor = CodeWheels2[rest];
     1577                   
     1578
     1579                    for (int indpo = 0; indpo < l3.Count; indpo++)
     1580                    {
     1581                        int[] steppingmaze = new int[10];
     1582
     1583                        for (int i = 0; i < 10; i++)
     1584                        {
     1585                            for (int ix = 0; ix < 5; ix++)
     1586                            {
     1587                                if (l3[indpo][ix].Contains(i))
     1588                                {
     1589                                    steppingmaze[i] = ix;
     1590                                }
     1591                            }
     1592
     1593                        }
     1594                        for (int rev1 = 0; rev1 < 2; rev1++)
     1595                        {
     1596                            testRotor.Reverse = (rev1 == 1);
     1597                                for (int pos = 0; pos < 26; pos++)
     1598                                {
     1599                   
     1600                                    testRotor.Position = pos;
     1601                   
     1602
     1603
     1604
     1605                                        for (int letters = 0; letters < input2.Length - 1; letters++)
     1606                                        {
     1607                                            int tempf = temp[letters][0];
     1608                                            int tempg = temp[letters][1];
     1609                                            int temph = temp[letters][2];
     1610                                            int tempi = temp[letters][3];
     1611
     1612                                           
     1613                                                if (testRotor.Reverse)
     1614                                                {
     1615                                                    tempf =
     1616                                                        testRotor.RotSubMatRevBack[
     1617                                                            testRotor.Position, tempf];
     1618                                                    tempg =
     1619                                                        testRotor.RotSubMatRevBack[
     1620                                                            testRotor.Position, tempg];
     1621                                                    temph =
     1622                                                        testRotor.RotSubMatRevBack[
     1623                                                            testRotor.Position, temph];
     1624                                                    tempi =
     1625                                                        testRotor.RotSubMatRevBack[
     1626                                                            testRotor.Position, tempi];
     1627                                                }
     1628                                                else
     1629                                                {
     1630                                                    tempf =
     1631                                                        testRotor.RotSubMatBack[testRotor.Position, tempf];
     1632                                                    tempg =
     1633                                                        testRotor.RotSubMatBack[testRotor.Position, tempg];
     1634                                                    temph =
     1635                                                        testRotor.RotSubMatBack[testRotor.Position, temph];
     1636                                                    tempi =
     1637                                                        testRotor.RotSubMatBack[testRotor.Position, tempi];
     1638                                                }
     1639                                           
     1640
     1641                                            /*Console.Write((char)(tempf + 65) + "");
     1642                                                Console.Write((char)(tempg + 65) + "");
     1643                                                Console.Write((char)(temph + 65) + "");
     1644                                                Console.Write((char)(tempi + 65) + "" + letters);
     1645                                                Console.WriteLine();
     1646                                                Console.ReadKey();*/
     1647
     1648
     1649
     1650                                            tempf = ConstantsByte.Transform[0][tempf];
     1651                                            tempg = ConstantsByte.Transform[0][tempg];
     1652                                            temph = ConstantsByte.Transform[0][temph];
     1653                                            tempi = ConstantsByte.Transform[0][tempi];
     1654
     1655                                            tempf = steppingmaze[tempf];
     1656                                            tempg = steppingmaze[tempg];
     1657                                            temph = steppingmaze[temph];
     1658                                            tempi = steppingmaze[tempi];
     1659
     1660                                            if (!input2[letters].Contains(tempf) ||
     1661                                                !input2[letters].Contains(tempg) ||
     1662                                                !input2[letters].Contains(temph) ||
     1663                                                !input2[letters].Contains(tempi))
     1664                                                break;
     1665
     1666                                            if (letters == input2.Length - 2)
     1667                                            {
     1668                                                Console.WriteLine("we have got a winner");
     1669                                                //Console.WriteLine("Rotor 4: " + pos + testRotor.Reverse + rest[re] + wi);
     1670                                                Console.WriteLine("Rotor1: " + realWheels[winner.RotorType[0]] +
     1671                                                                  " REverse: " +
     1672                                                                  winner.Reverse[0] + " POsition: " +
     1673                                                                  winner.Positions[0] +
     1674                                                                  " Rotor2: " + realWheels[winner.RotorType[1]] +
     1675                                                                  " REverse: " +
     1676                                                                  winner.Reverse[1] + " POsition: " +
     1677                                                                  winner.Positions[1] +
     1678                                                                  " Rotor3: " + realWheels[winner.RotorType[2]] +
     1679                                                                  " REverse: " +
     1680                                                                  winner.Reverse[2] + " POsition: " +
     1681                                                                  winner.Positions[2] +
     1682                                                                  " Rotor5: " + realWheels[rest] + " REverse: " +
     1683                                                                  testRotor.Reverse + " POsition: " + pos
     1684                                                    );
     1685                                                returnString = new string[3];
     1686                                                returnString[0] = "" + realWheels[rest];
     1687                                                returnString[1] = "" + (char)(pos+65);
     1688                                                returnString[2] = testRotor.Reverse? "R": " ";
     1689                                               
     1690                                               
     1691                                                List<int[]> indexKey = findIndexMaze(steppingmaze);
     1692                                                /*facade.AddEntryComplete(winner, steppingmaze, pos, pos2,
     1693                                                                        realWheels[rest[re]],
     1694                                                                        realWheels[rest[re == 0 ? 1 : 0]], rev1 == 1,
     1695                                                                        rev2 == 1, indexKey);*/
     1696
     1697                                                return returnString;
     1698                                                break;
     1699                                            }
     1700
     1701                                           
     1702
     1703                                        }
     1704                                   
     1705                               
     1706                            }
     1707                        }
     1708                    }
     1709                }
     1710            RESTART:
     1711                ;
     1712           
     1713
     1714
     1715
     1716            return null;
     1717        }
     1718       
    11491719        private List<int[]> findIndexMaze(int[] steppingmaze)
    11501720        {
  • trunk/CrypPluginsExperimental/SIgabaKnownPlaintext/SigabaKnownPlaintext.cs

    r5926 r5955  
    6565            _core = new SigabaCoreFastKnownPlaintext(this);
    6666            this.Presentation= _sigpa;
     67            _sigpa.doppelClick += doppelClick;
    6768            //         _coreP2 = new SigabaCoreFastPhaseII(this);
    6869        }
     
    152153            // HOWTO: Use this to show the progress of a plugin algorithm execution in the editor.
    153154            ProgressChanged(0, 1);
    154             List<double> bestlist = new List<double>();
     155            bestlist= new List<ValueKey>();
    155156            double best = Double.MinValue;
    156             bestlist.Add(Double.MinValue);
     157            bestlist.Add(new ValueKey(){value = Double.MinValue});
     158
     159            startime = DateTime.Now;
    157160
    158161            if (costMaster.GetRelationOperator() == RelationOperator.LessThen)
    159162            {
    160163                best = Double.MaxValue;
    161                 bestlist.Add(Double.MaxValue);
     164                bestlist.Add(new ValueKey(){value = Double.MaxValue});
    162165            }
    163166            list1 = getDummyLinkedList(best);
     
    253256        ResultEntry actRes ;
    254257        private DateTime lastUpdate;
     258        private DateTime startime;
     259
     260        private List<ValueKey> bestlist ;
     261
    255262        private void survivorProducer()
    256263        {
     264            int total = 967200*26^5;
     265            int tickbig = 0;
     266            int ticksmall = 0;
    257267            lastUpdate=DateTime.Now;
    258268            List<long> ticklist = new List<long>();
     
    268278            for (int enumi = 0; enumi <252; enumi++)
    269279            {
     280               
    270281                int[] arr = combis.ElementAt(enumi).ToArray();
    271282
     
    279290                    for (int ix = 0; ix < 32; ix++)
    280291                    {
     292                       
    281293                        String s = GetIntBinaryString(ix);
    282294                        _core.setBool((byte)arr[0], 0, s[0] == '1');
     
    304316                        do
    305317                        {
     318                            tickbig++;
     319                            ProgressChanged(tickbig, total);
     320                           
    306321                            var retlst = new List<int[][]>();
    307322
     
    352367                                    }
    353368                                }
     369                               
    354370
    355371                                for (int j = 0; j < treetlst.Count() - 1; j++)
     
    435451                                controlMaster.setCipherRotors(4, (byte) (arr[4]));
    436452
     453                                //ProgressChanged(ticksmall, retlst.Count);
     454
     455                                ticksmall++;
    437456                                if (!treetlst.Contains(null))
    438457                                    if (_core.stepOneCompact(enc.GetBytes(Cipher), enc.GetBytes(Crib), arr, loopvars,
     
    446465                                        Console.WriteLine("How many?" + ticklist.Count + " :  " + counter);
    447466                                    }
     467
     468                               
    448469                            }
     470                           
     471                           
     472                           
    449473                        } while (increment2(loopvars, test2));
    450 
     474                       
    451475                    }
    452476                } while (NextPermutation(arr));
     
    459483
    460484       
    461 
     485        int calculateSet(int[][] con)
     486        {
     487            int ret = 0;
     488            for(int i = 0;i< con.Length;i++)
     489            {
     490               
     491                ret += con[i].Length - 1;
     492            }
     493            return ret;
     494        }
    462495
    463496        static bool increment2(byte[] inc, int[][] con)
     
    605638        }
    606639
    607         internal void AddEntryComplete2(Candidate winner, int pos, int p, bool p_3, int[] pseudo)
    608         {
     640
     641
     642        internal void AddEntryComplete2(Candidate winner, int pos, int p, bool p_3, int[] pseudo, int[][] temp2, int[][]input2)
     643        {
     644
    609645            int[] b = new int[] { (byte)(actRes.CipherRotors[0] - 48), (byte)(actRes.CipherRotors[1] - 48), (byte)(actRes.CipherRotors[2] - 48), (byte)(actRes.CipherRotors[3] - 48), (byte)(actRes.CipherRotors[4] - 48), (winner.RotorTypeReal[0]), (winner.RotorTypeReal[1]), (winner.RotorTypeReal[2]), p };
    610646            byte[] b2 = new byte[] { (byte)(actRes.CipherKey[0] - 48), (byte)(actRes.CipherKey[1] - 48), (byte)(actRes.CipherKey[2] - 48), (byte)(actRes.CipherKey[3] - 48), (byte)(actRes.CipherKey[4] - 48), (byte)winner.Positions[0], (byte)winner.Positions[1], (byte)winner.Positions[2], (byte)pos};
     
    626662
    627663            Task.WaitAll(new[] { t1, t2, t3, t4});
    628             controlMaster.setIndexMaze2(pseudo);
     664
     665            int[] pseudo2 = (int[])pseudo.Clone();
     666            controlMaster.setIndexMaze2((int[])pseudo2.Clone());
     667
     668           
     669                int[] test2 = new int[] { 4, 4, 3, 3, 2, 4, 4, 2, 3, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 4, 4, 2, 4, 3, 3, 3 };
     670
     671                Boolean blup = true;
     672                if (pseudo != null)
     673                {
     674                    for (int i = 0; i < test2.Length; i++)
     675                    {
     676                        if (pseudo[i] != test2[i])
     677                            blup = false;
     678                    }
     679
     680                    if (blup)
     681                        Console.WriteLine("Something went wrong");
     682                }
     683           
    629684
    630685            byte[] plain = controlMaster.DecryptFast(Encoding.ASCII.GetBytes(Cipher), b, b2);
     
    632687            double val =
    633688                costMaster.CalculateCost(plain);
    634 
    635             /*  if (
    636                   costMaster.
    637                       GetRelationOperator() ==
    638                   RelationOperator.LessThen)
    639               {*/
    640             /*if (val <= bestlist.Last())
    641             {
    642                 bestlist.Add(val);
    643                 bestlist.Sort();
    644 
    645                 if (bestlist.Count > 10)
    646                     bestlist.RemoveAt(10);
    647             */
    648 
    649 
    650             var valkey =
    651                 new ValueKey();
    652             String keyStr = "";
    653 
    654             var builderCipherKey =
    655                 new StringBuilder();
    656 
    657 
    658 
    659             var builderControlKey =
    660                 new StringBuilder();
    661             builderControlKey.Append(
    662                 (char)(winner.Positions[0] + 65));
    663             builderControlKey.Append(
    664                 (char)(winner.Positions[1] + 65));
    665             builderControlKey.Append(
    666                 (char)(winner.Positions[2] + 65));
    667             builderControlKey.Append(
    668                 (char)(pos + 65));
    669            
    670             string controlKey =
    671                 builderControlKey.
    672                     ToString();
    673             var builderIndexKey =
    674                 new StringBuilder();
    675             string indexKey = builderIndexKey.ToString();
    676 
    677             string ControlRotors =
    678                 winner.RotorTypeReal[0] + "" +
    679                 (winner.Reverse[0] ? "R" : " ") + "" +
    680                 winner.RotorTypeReal[1] + "" +
    681                 (winner.Reverse[1] ? "R" : " ") + "" +
    682                 winner.RotorTypeReal[2] + "" +
    683                 (winner.Reverse[2] ? "R" : " ") + "" +
    684                 p + "" +
    685                 (p_3 ? "R" : " ") + "" ;
    686             string IndexRotors ="";
    687             valkey.decryption = plain;
    688 
    689             valkey.indexKey =
    690                 indexKey;
    691             valkey.controlKey =
    692                 controlKey;
    693             valkey.cipherRotors = actRes.CipherRotors[0] + "" + (actRes.CipherRotors[5] == '0' ? " " : "R") + "" + actRes.CipherRotors[1] + "" + (actRes.CipherRotors[6] == '0' ? " " : "R") + " " + actRes.CipherRotors[2] + "" + (actRes.CipherRotors[7] == '0' ? " " : "R") + " " + actRes.CipherRotors[3] + "" + (actRes.CipherRotors[8] == '0' ? " " : "R") + " " + actRes.CipherRotors[4] + "" + (actRes.CipherRotors[9] == '0' ? " " : "R");
    694             valkey.cipherKey = (char)(actRes.CipherKey[0] + 17) + "" + (char)(actRes.CipherKey[1] + 17) + "" + (char)(actRes.CipherKey[2] + 17) + "" + (char)(actRes.CipherKey[3] + 17) + "" + (char)(actRes.CipherKey[4] + 17);
    695             valkey.controlRotors =
    696                 ControlRotors;
    697             valkey.indexRotors =
    698                 IndexRotors;
    699             valkey.value = val;
    700             valuequeue.Enqueue(
    701                 valkey);
    702             //}
    703             //}
    704             if (lastUpdate.AddMilliseconds(500) < DateTime.Now)
    705             {
    706                 UpdatePresentationList(0, 0, DateTime.Now);
     689           
     690            if (
     691                costMaster.
     692                    GetRelationOperator() ==
     693                RelationOperator.LessThen)
     694            {
     695                if (val < bestlist.Last().value)
     696                {
     697                    ValueKey vk = new ValueKey();
     698                    vk.temp2 = temp2;
     699                    vk.value = val;
     700                    vk.pseudo = (int[])pseudo.Clone();
     701                    vk.input2 = input2;
     702                    bestlist.Add(vk);
     703               
     704                    bestlist = bestlist.OrderBy(x => x.value).ToList();
     705
     706                    if (bestlist.Count > 10)
     707                        bestlist.RemoveAt(10);
     708
     709
     710
     711                    var valkey =
     712                        new ValueKey();
     713                    String keyStr = "";
     714
     715                    var builderCipherKey =
     716                        new StringBuilder();
     717
     718
     719
     720                    var builderControlKey =
     721                        new StringBuilder();
     722                    builderControlKey.Append(
     723                        (char)(winner.Positions[0] + 65));
     724                    builderControlKey.Append(
     725                        (char)(winner.Positions[1] + 65));
     726                    builderControlKey.Append(
     727                        (char)(winner.Positions[2] + 65));
     728                   
     729
     730                    string controlKey =
     731                        builderControlKey.
     732                            ToString();
     733                    var builderIndexKey =
     734                        new StringBuilder();
     735                    string indexKey = builderIndexKey.ToString();
     736
     737                    string ControlRotors =
     738                        winner.RotorTypeReal[0] + "" +
     739                        (winner.Reverse[0] ? "R" : " ") + "" +
     740                        winner.RotorTypeReal[1] + "" +
     741                        (winner.Reverse[1] ? "R" : " ") + "" +
     742                        winner.RotorTypeReal[2] + "" +
     743                        (winner.Reverse[2] ? "R" : " ") ;
     744                    string IndexRotors = "";
     745                    valkey.decryption = plain;
     746
     747                    valkey.indexKey =
     748                        indexKey;
     749                    valkey.controlKey =
     750                        controlKey;
     751                    valkey.cipherRotors = actRes.CipherRotors[0] + "" + (actRes.CipherRotors[5] == '0' ? " " : "R") + "" + actRes.CipherRotors[1] + "" + (actRes.CipherRotors[6] == '0' ? " " : "R") + "" + actRes.CipherRotors[2] + "" + (actRes.CipherRotors[7] == '0' ? " " : "R") + "" + actRes.CipherRotors[3] + "" + (actRes.CipherRotors[8] == '0' ? " " : "R") + "" + actRes.CipherRotors[4] + "" + (actRes.CipherRotors[9] == '0' ? " " : "R");
     752                    valkey.cipherKey = (char)(actRes.CipherKey[0] + 17) + "" + (char)(actRes.CipherKey[1] + 17) + "" + (char)(actRes.CipherKey[2] + 17) + "" + (char)(actRes.CipherKey[3] + 17) + "" + (char)(actRes.CipherKey[4] + 17);
     753                    valkey.controlRotors =
     754                        ControlRotors;
     755                    valkey.indexRotors =
     756                        IndexRotors;
     757                    valkey.pseudo = pseudo;
     758                    valkey.value = val;
     759                    valkey.temp2 = temp2;
     760                    valkey.input2 = input2;
     761                    valkey.tested = false;
     762                    valkey.winner = winner;
     763                    valuequeue.Enqueue(
     764                        valkey);
     765                   
     766                }
     767            }
     768            else
     769            {
     770                if (val > bestlist.Last().value)
     771                {
     772                    ValueKey vk = new ValueKey();
     773                    vk.temp2 = temp2;
     774                    vk.value = val;
     775                    vk.pseudo = (int[])pseudo.Clone();
     776                    vk.input2 = input2;
     777
     778                    bestlist.Add(vk);
     779                    bestlist = bestlist.OrderBy(x => x.value).ToList();
     780                    bestlist.Reverse();
     781
     782                    if (bestlist.Count > 10)
     783                        bestlist.RemoveAt(10);
     784
     785                    var valkey =
     786                        new ValueKey();
     787                    String keyStr = "";
     788
     789                    var builderCipherKey =
     790                        new StringBuilder();
     791
     792
     793
     794                    var builderControlKey =
     795                        new StringBuilder();
     796                    builderControlKey.Append(
     797                        (char) (winner.Positions[0] + 65));
     798                    builderControlKey.Append(
     799                        (char) (winner.Positions[1] + 65));
     800                    builderControlKey.Append(
     801                        (char) (winner.Positions[2] + 65));
     802                   
     803
     804                    string controlKey =
     805                        builderControlKey.
     806                            ToString();
     807                    var builderIndexKey =
     808                        new StringBuilder();
     809                    string indexKey = builderIndexKey.ToString();
     810
     811                    string ControlRotors =
     812                        winner.RotorTypeReal[0] + "" +
     813                        (winner.Reverse[0] ? "R" : " ") + "" +
     814                        winner.RotorTypeReal[1] + "" +
     815                        (winner.Reverse[1] ? "R" : " ") + "" +
     816                        winner.RotorTypeReal[2] + "" +
     817                        (winner.Reverse[2] ? "R" : " ") ;
     818                    string IndexRotors = "";
     819                    valkey.decryption = plain;
     820
     821                    valkey.indexKey =
     822                        indexKey;
     823                    valkey.controlKey =
     824                        controlKey;
     825                    valkey.cipherRotors = actRes.CipherRotors[0] + "" + (actRes.CipherRotors[5] == '0' ? " " : "R") + "" +
     826                                          actRes.CipherRotors[1] + "" + (actRes.CipherRotors[6] == '0' ? " " : "R") +
     827                                          "" + actRes.CipherRotors[2] + "" +
     828                                          (actRes.CipherRotors[7] == '0' ? " " : "R") + "" + actRes.CipherRotors[3] +
     829                                          "" + (actRes.CipherRotors[8] == '0' ? " " : "R") + "" +
     830                                          actRes.CipherRotors[4] + "" + (actRes.CipherRotors[9] == '0' ? " " : "R");
     831                    valkey.cipherKey = (char) (actRes.CipherKey[0] + 17) + "" + (char) (actRes.CipherKey[1] + 17) + "" +
     832                                       (char) (actRes.CipherKey[2] + 17) + "" + (char) (actRes.CipherKey[3] + 17) + "" +
     833                                       (char) (actRes.CipherKey[4] + 17);
     834                    valkey.controlRotors =
     835                        ControlRotors;
     836                    valkey.indexRotors =
     837                        IndexRotors;
     838                    valkey.pseudo = pseudo;
     839                    valkey.value = val;
     840                    valkey.temp2 = temp2;
     841                    valkey.input2 = input2;
     842                    valkey.tested = false;
     843                    valkey.winner = winner;
     844                    valuequeue.Enqueue(
     845                        valkey);
     846                   
     847                   
     848                }
     849            }
     850            if (lastUpdate.AddMilliseconds(1000) < DateTime.Now)
     851            {
     852                UpdatePresentationList(0, 0, startime);
    707853                lastUpdate = DateTime.Now;
    708854            }
     
    763909                costMaster.CalculateCost(plain);
    764910
    765           /*  if (
    766                 costMaster.
    767                     GetRelationOperator() ==
     911          if (
     912                costMaster.GetRelationOperator() ==
    768913                RelationOperator.LessThen)
    769             {*/
    770                 /*if (val <= bestlist.Last())
    771                 {
    772                     bestlist.Add(val);
    773                     bestlist.Sort();
     914            {
     915                if (val <= bestlist.Last().value)
     916                {
     917                    bestlist.Add(new ValueKey(){value = val});
     918                    bestlist.Sort(delegate(ValueKey p1, ValueKey p2)
     919                                      {
     920                                          return p1.value.CompareTo(p2.value);
     921                                      });
    774922
    775923                    if (bestlist.Count > 10)
    776924                        bestlist.RemoveAt(10);
    777                 */
     925               
    778926
    779927
     
    830978                    valkey.controlKey =
    831979                        controlKey;
    832                     valkey.cipherRotors = actRes.CipherRotors[0] + "" + (actRes.CipherRotors[5] == '0' ? " " : "R") + "" + actRes.CipherRotors[1] + "" + (actRes.CipherRotors[6] == '0' ? " " : "R") + " " + actRes.CipherRotors[2] + "" + (actRes.CipherRotors[7] == '0' ? " " : "R") + " " + actRes.CipherRotors[3] + "" + (actRes.CipherRotors[8] == '0' ? " " : "R") + " " + actRes.CipherRotors[4] + "" + (actRes.CipherRotors[9] == '0' ? " " : "R");
     980                    valkey.cipherRotors = actRes.CipherRotors[0] + "" + (actRes.CipherRotors[5] == '0' ? " " : "R") + "" + actRes.CipherRotors[1] + "" + (actRes.CipherRotors[6] == '0' ? " " : "R") + "" + actRes.CipherRotors[2] + "" + (actRes.CipherRotors[7] == '0' ? " " : "R") + "" + actRes.CipherRotors[3] + "" + (actRes.CipherRotors[8] == '0' ? " " : "R") + "" + actRes.CipherRotors[4] + "" + (actRes.CipherRotors[9] == '0' ? " " : "R");
    833981                    valkey.cipherKey= (char)(actRes.CipherKey[0] +17)+ "" + (char)(actRes.CipherKey[1]+17) + "" + (char)(actRes.CipherKey[2] +17)+ "" + (char)(actRes.CipherKey[3]+17) + "" + (char)(actRes.CipherKey[4]+17);
    834982                    valkey.controlRotors =
     
    839987                    valuequeue.Enqueue(
    840988                        valkey);
    841                 //}
    842             //}
    843 
    844                     UpdatePresentationList(0,0,DateTime.Now);
     989                }
     990            }else
     991          {
     992              if (val >= bestlist.Last().value)
     993              {
     994                  bestlist.Add(new ValueKey() { value = val });
     995                  bestlist.Sort(delegate(ValueKey p1, ValueKey p2)
     996                  {
     997                      return p1.value.CompareTo(p2.value);
     998                  });
     999
     1000
     1001                  var valkey =
     1002                      new ValueKey();
     1003                  String keyStr = "";
     1004
     1005                  var builderCipherKey =
     1006                      new StringBuilder();
     1007
     1008
     1009
     1010                  var builderControlKey =
     1011                      new StringBuilder();
     1012                  builderControlKey.Append(
     1013                      (char)(winner.Positions[0] + 65));
     1014                  builderControlKey.Append(
     1015                      (char)(winner.Positions[1] + 65));
     1016                  builderControlKey.Append(
     1017                      (char)(winner.Positions[2] + 65));
     1018                  builderControlKey.Append(
     1019                      (char)(pos + 65));
     1020                  builderControlKey.Append(
     1021                      (char)(pos2 + 65));
     1022                  string controlKey =
     1023                      builderControlKey.
     1024                          ToString();
     1025                  var builderIndexKey =
     1026                      new StringBuilder();
     1027                  builderIndexKey.Append(indexkey[0][0]);
     1028                  builderIndexKey.Append(indexkey[0][1]);
     1029                  builderIndexKey.Append(indexkey[0][2]);
     1030                  builderIndexKey.Append(indexkey[0][3]);
     1031                  builderIndexKey.Append(indexkey[0][4]);
     1032                  string indexKey = builderIndexKey.ToString();
     1033
     1034                  string ControlRotors =
     1035                      winner.RotorTypeReal[0] + "" +
     1036                      (winner.Reverse[0] ? "R" : " ") + "" +
     1037                      winner.RotorTypeReal[1] + "" +
     1038                      (winner.Reverse[1] ? "R" : " ") + "" +
     1039                      winner.RotorTypeReal[2] + "" +
     1040                      (winner.Reverse[2] ? "R" : " ") + "" +
     1041                      p + "" +
     1042                      (p_3 ? "R" : " ") + "" +
     1043                      p_2 + "" +
     1044                      (p_4 ? "R" : " ");
     1045                  string IndexRotors =
     1046                      (int)(indexkey[1][0] + 1) + " " + (int)(indexkey[1][1] + 1) + " " + (int)(indexkey[1][2] + 1) + " " + (int)(indexkey[1][3] + 1) + " " + (int)(indexkey[1][4] + 1);
     1047                  valkey.decryption = plain;
     1048
     1049                  valkey.indexKey =
     1050                      indexKey;
     1051                  valkey.controlKey =
     1052                      controlKey;
     1053                  valkey.cipherRotors = actRes.CipherRotors[0] + "" + (actRes.CipherRotors[5] == '0' ? " " : "R") + "" + actRes.CipherRotors[1] + "" + (actRes.CipherRotors[6] == '0' ? " " : "R") + "" + actRes.CipherRotors[2] + "" + (actRes.CipherRotors[7] == '0' ? " " : "R") + "" + actRes.CipherRotors[3] + "" + (actRes.CipherRotors[8] == '0' ? " " : "R") + "" + actRes.CipherRotors[4] + "" + (actRes.CipherRotors[9] == '0' ? " " : "R");
     1054                  valkey.cipherKey = (char)(actRes.CipherKey[0] + 17) + "" + (char)(actRes.CipherKey[1] + 17) + "" + (char)(actRes.CipherKey[2] + 17) + "" + (char)(actRes.CipherKey[3] + 17) + "" + (char)(actRes.CipherKey[4] + 17);
     1055                  valkey.controlRotors =
     1056                      ControlRotors;
     1057                  valkey.indexRotors =
     1058                      IndexRotors;
     1059                  valkey.value = val;
     1060                  valuequeue.Enqueue(
     1061                      valkey);
     1062              }
     1063          }
     1064
     1065                    UpdatePresentationList(0,0,startime);
    8451066
    8461067        }
     
    8481069        #region Prestnation stuff
    8491070
     1071
     1072
    8501073        private void doppelClick(object sender, EventArgs e)
    8511074        {
     1075            SigabaCoreFastKnownPlaintext _coreTemp = new SigabaCoreFastKnownPlaintext(this);
    8521076            var lvi = sender as ListViewItem;
    8531077            var rse = lvi.Content as ResultEntry;
    854             Output = rse.Text;
    855             OnPropertyChanged("Output");
     1078            Console.WriteLine(Int32.Parse(rse.Ranking) - 1 +"TEst");
     1079            if (!list1.ElementAt( Int32.Parse(rse.Ranking)-1).tested)
     1080            if (rse != null)
     1081            {
     1082                int[] rotorTypReal = new int[]
     1083                                         {
     1084                                             rse.ControlRotors[0] - 48, rse.ControlRotors[2] - 48,
     1085                                             rse.ControlRotors[4] - 48
     1086                                         };
     1087
     1088                /*foreach (ValueKey valueKey in bestlist)
     1089                {
     1090                    int[] test2 = new int[]
     1091                                      {4, 4, 3, 3, 2, 4, 4, 2, 3, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 4, 4, 2, 4, 3, 3, 3};
     1092
     1093                    Boolean blup = true;
     1094                    if (valueKey.pseudo != null)
     1095                    {
     1096                        for (int i = 0; i < test2.Length; i++)
     1097                        {
     1098                            if (valueKey.pseudo[i] != test2[i])
     1099                                blup = false;
     1100                        }
     1101
     1102                        if (blup)
     1103                            Console.WriteLine("Something went wrong");
     1104                    }
     1105                }*/
     1106                int[] tmp = (int[]) rotorTypReal.Clone();
     1107                    Array.Sort(tmp);
     1108                    int[] rotorTyp = new int[4];
     1109                    for (int i = 0; i < rotorTypReal.Length; i++)
     1110                        rotorTyp[i] = Array.IndexOf(tmp, rotorTypReal[i]);
     1111               
     1112/*                int[] test2 = new int[] { 4, 4, 3, 3, 2, 4, 4, 2, 3, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 4, 4, 2, 4, 3, 3, 3 };
     1113
     1114                Boolean blup = true;
     1115                for (int i = 0; i < test2.Length; i++)
     1116                {
     1117                    if (bestlist[rse.Ranking[0] - 49].pseudo[i] != test2[i])
     1118                        blup = false;
     1119                }
     1120
     1121                if (blup)
     1122                    Console.WriteLine("Hello");
     1123                    */
     1124
     1125                Candidate c = new Candidate()
     1126                                  {
     1127                                      Positions =
     1128                                          new int[]
     1129                                              {
     1130                                                  rse.ControlKey[0] - 65, rse.ControlKey[1] - 65, rse.ControlKey[2] - 65
     1131                                                 
     1132                                              },
     1133                                      RotorType = new int[] { rotorTyp[0], rotorTyp[1], rotorTyp[2]},
     1134                                      RotorTypeReal = rotorTypReal,
     1135                                      Reverse =
     1136                                          new bool[]
     1137                                              {
     1138                                                  rse.ControlRotors[1] == 'R', rse.ControlRotors[3] == 'R',
     1139                                                  rse.ControlRotors[5] == 'R'
     1140                                              }
     1141                                              ,
     1142                                      Pseudo = list1.ElementAt(Int32.Parse(rse.Ranking) - 1).winner.Pseudo
     1143                                  };
     1144
     1145                _coreTemp.setCodeWheels(new int[]
     1146                                            {
     1147                                                rse.CipherRotors[0] - 48, rse.CipherRotors[2] - 48,
     1148                                                rse.CipherRotors[4] - 48, rse.CipherRotors[6] - 48,
     1149                                                rse.CipherRotors[8] - 48
     1150                                            });
     1151               
     1152                String[] s = _coreTemp.FindSteppingMazeCompletionCompact2(bestlist[Int32.Parse(rse.Ranking)-1].input2, c,
     1153                                                            bestlist[Int32.Parse(rse.Ranking)-1].temp2,
     1154                                                            bestlist[Int32.Parse(rse.Ranking)-1].pseudo);
     1155               
     1156                rse.IndexKey = "";
     1157                ValueKey valkey = bestlist[rse.Ranking[0] - 49];
     1158                valkey.indexKey = "";
     1159                bestlist[rse.Ranking[0] - 49] = valkey;
     1160
     1161               
     1162                if (s != null)
     1163                {
     1164                    ValueKey valkey2 = list1.ElementAt(Int32.Parse(rse.Ranking) - 1);
     1165                    valkey2.indexKey = s[3];
     1166                    valkey2.indexRotors = s[4];
     1167                    valkey2.controlKey = valkey2.controlKey + s[1];
     1168                    valkey2.controlRotors = valkey2.controlRotors + s[0] + s[2];
     1169                    valkey2.tested = true;
     1170
     1171                    list1.Find(list1.ElementAt(Int32.Parse(rse.Ranking)-1)).Value = valkey2;
     1172
     1173                    ((SigabaKnownPlaintextPresentaion) Presentation).entries[Int32.Parse(rse.Ranking)-1] = rse;
     1174                    UpdatePresentationList(0, 0, startime);
     1175                }
     1176                else
     1177                {
     1178                    ValueKey valkey2 = list1.ElementAt(rse.Ranking[0] - 49);
     1179                    valkey2.indexKey = "NOT VALID";
     1180                    valkey2.controlKey = "NOT VALID";
     1181                    valkey2.controlRotors = "NOT VALID";
     1182                    valkey2.tested = true;
     1183
     1184                    list1.Find(list1.ElementAt(Int32.Parse(rse.Ranking) - 1)).Value = valkey2;
     1185
     1186                    ((SigabaKnownPlaintextPresentaion)Presentation).entries[Int32.Parse(rse.Ranking)-1] = rse;
     1187                    UpdatePresentationList(0, 0, startime);
     1188                }
     1189            }
     1190            //Output = rse.Text;
     1191            //OnPropertyChanged("Output");
     1192
    8561193        }
    8571194
     
    8601197            var valueKey = new ValueKey();
    8611198            valueKey.value = best;
    862             valueKey.cipherKey = "dummykey";
    863             valueKey.controlKey = "dummykey";
    864             valueKey.indexKey = "dummykey";
    865             valueKey.cipherRotors = "dummykey";
    866             valueKey.controlRotors = "dummykey";
     1199            valueKey.cipherKey = "";
     1200            valueKey.controlKey = "";
     1201            valueKey.indexKey = "";
     1202            valueKey.cipherRotors = "";
     1203            valueKey.controlRotors = "";
    8671204
    8681205            valueKey.decryption = new byte[0];
     
    11641501                                                                                                                              .
    11651502                                                                                                                              indexRotors;
    1166                                                                                                                       entry
    1167                                                                                                                           .
     1503                                                                                                                      entry.
    11681504                                                                                                                          Value
    11691505                                                                                                                          =
     
    11781514                                                                                                                               2) +
    11791515                                                                                                                          "";
    1180 
     1516                                                                                                                      entry.Button = new System.Web.UI.WebControls.Button(){Text = ""};
    11811517
    11821518                                                                                                                      ((
    11831519                                                                                                                       SigabaKnownPlaintextPresentaion
    11841520                                                                                                                       )
    1185                                                                                                                        Presentation)
    1186                                                                                                                           .
    1187                                                                                                                           entries
    1188                                                                                                                           .
    1189                                                                                                                           Add
    1190                                                                                                                           (entry);
    1191 
    1192                                                                                                                       linkedListNode
    1193                                                                                                                           =
    1194                                                                                                                           linkedListNode
    1195                                                                                                                               .
    1196                                                                                                                               Next;
     1521                                                                                                                       Presentation).entries.Add(entry);
     1522
     1523                                                                                                                      linkedListNode =linkedListNode.Next;
    11971524                                                                                                                  }
    11981525                                                                                                              }
     
    12811608        public String indexRotors;
    12821609        public byte[] keyArray;
     1610        public int[] pseudo;
     1611        public int[][] temp2;
     1612        public int[][] input2;
    12831613        public double value;
     1614        public bool tested;
     1615        public Candidate winner;
    12841616    };
    12851617
     
    12951627        public string IndexRotors { get; set; }
    12961628        public string Text { get; set; }
     1629        public System.Web.UI.WebControls.Button Button { get; set; }
    12971630    }
    12981631    #endregion
    1299 
    1300     public struct Node
    1301     {
    1302         public int[] Pfad;
    1303         public int[] Children;
    1304        
    1305     }
    13061632
    13071633    public struct Survivor
  • trunk/CrypPluginsExperimental/SIgabaKnownPlaintext/SigabaKnownPlaintextPresentation.xaml.cs

    r5912 r5955  
    44using System.Linq;
    55using System.Text;
     6using System.Threading;
    67using System.Windows;
    78using System.Windows.Controls;
     
    1314using System.Windows.Navigation;
    1415using System.Windows.Shapes;
     16using System.Windows.Threading;
    1517
    1618
     
    2022    /// Interaction logic for StampChallenge2Presentation.xaml
    2123    /// </summary>
     24   [global::Cryptool.PluginBase.Attributes.Localization("SIgabaKnownPlaintext.Properties.Resources")]
    2225    public partial class SigabaKnownPlaintextPresentaion : UserControl
    2326    {
     
    3336        public void HandleDoubleClick(Object sender, EventArgs eventArgs)
    3437        {
    35             doppelClick(sender, eventArgs);
     38            Dispatcher.BeginInvoke(DispatcherPriority.Normal, (SendOrPostCallback) delegate
     39                                                                                       {
     40                                                                                           doppelClick(sender,
     41                                                                                                       eventArgs);
     42                                                                                       } , null);
     43
    3644        }
     45
     46        private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
     47        {
     48
     49        }
     50
     51       
    3752    }
    3853}
  • trunk/CrypPluginsExperimental/Sigaba/Rotor.cs

    r5912 r5955  
    8181            RotSubMatRev = new byte[subalphaCount, subalphaCount];
    8282            RotSubMatRevBack = new byte[subalphaCount, subalphaCount];
    83             Console.WriteLine("Hello1");
     83           
    8484            for (int i = 0; i < subalphaCount; i++)
    8585            {
     
    9494                Console.WriteLine();
    9595            }
    96             Console.WriteLine("Hello2");
     96           
    9797        }
    9898
  • trunk/CrypPluginsExperimental/SigabaBruteforce/SigabaBruteforce.cs

    r5912 r5955  
    871871            var valueKey = new ValueKey();
    872872            valueKey.value = best;
    873             valueKey.cipherKey = "dummykey";
    874             valueKey.controlKey = "dummykey";
    875             valueKey.indexKey = "dummykey";
    876             valueKey.cipherRotors = "dummykey";
    877             valueKey.controlRotors = "dummykey";
     873            valueKey.cipherKey = "";
     874            valueKey.controlKey = "";
     875            valueKey.indexKey = "";
     876            valueKey.cipherRotors = "";
     877            valueKey.controlRotors = "";
    878878
    879879            valueKey.decryption = new byte[0];
  • trunk/CrypPluginsExperimental/SigabaBruteforce/SigabaBruteforceQuickWatchPresentation.xaml.cs

    r5772 r5955  
    3737        public void HandleDoubleClick(Object sender, EventArgs eventArgs)
    3838        {
     39            if(sender!=null)
    3940               doppelClick(sender,eventArgs);
    4041        }
Note: See TracChangeset for help on using the changeset viewer.