source: trunk/CrypPlugins/SystemOfEquations/Combiner.cs @ 2392

Last change on this file since 2392 was 1352, checked in by bourbahh, 11 years ago

new Plugins for algebraic attack on Stream cipher :
1) compute XZ: compute the sets XZ that one need to generate a system of equations for algebraic attack
2) compute annihilators: compute annihilators of the sets XZ (Z-funktions) and annihilators for boolean function
3) system of equations: use Z-functions and known keystream to generate a system of equations that can be used for an algebraic attack
for more details see plugins descriptions

File size: 2.7 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Collections;
6namespace Cryptool.SystemOfEquations
7{
8    class Combiner
9    {
10        public LFSR[] lfsrs;
11        public Combiner(string[] fbpolynomials, string[] outputcells)
12        {
13            lfsrs = new LFSR[fbpolynomials.Length];
14            for (int i = 0; i < fbpolynomials.Length; i++)
15            {
16                LFSR lfsr = new LFSR(fbpolynomials[i]);
17                lfsr.outputcells = outputcells[i].ToCharArray();
18                lfsrs[i] = lfsr;
19            }
20        }
21        public ArrayList[] LFSRsOutput()
22        {
23            ArrayList[] Xi = new ArrayList[lfsrs.Length];
24            for (int i = 0; i < lfsrs.Length; i++)
25            {
26                Xi[i] = lfsrs[i].Output();
27            }
28            return Xi;
29        }
30        public void Clock(int time)
31        {
32            for (int i = 0; i < lfsrs.Length; i++)
33            {
34                lfsrs[i].Clock(time);
35
36            }
37        }
38        public void OneClock()
39        {
40            for (int i = 0; i < lfsrs.Length; i++)
41            {
42                lfsrs[i].OneClock();
43            }
44        }
45        public ArrayList[][] Outputs(int run)
46        {
47            ArrayList[][] runoutput = new ArrayList[run][];
48            for (int i = 0; i < run; i++)
49            {
50                ArrayList[] Xi = LFSRsOutput();
51                runoutput[i] = Xi;
52                OneClock();
53            }
54            return runoutput;
55        }
56        public ArrayList SortOutput(ArrayList[][] outputs)
57        {
58            ArrayList sortedoutput = new ArrayList();
59            for (int i = 0; i < outputs.Length; i++)
60            {
61                int startindex = 1;
62                for (int j = 0; j < outputs[i].Length; j++)
63                {
64                    ArrayList lsfroutput = outputs[i][j];
65                    int lfsrlength = lfsrs[j].length;
66                    foreach (bool[] cell in lsfroutput)
67                    {
68                        string cellstring = ConvertCellContent(cell, startindex);
69                        sortedoutput.Add(cellstring);
70                    }
71                    startindex = startindex + lfsrlength;
72                }
73            }
74            return sortedoutput;
75        }
76        public string ConvertCellContent(bool[] content, int index)
77        {
78            string s = "";
79            for (int j = 0; j < content.Length; j++)
80            {
81                if (content[j]) s = s + "k" + (j + index) + "+";
82            }
83            s = s.Remove(s.Length - 1);
84            if (s.Contains("+")) s = "(" + s + ")";
85            return s;
86        }
87    }
88}
Note: See TracBrowser for help on using the repository browser.