source: trunk/CrypPlugins/CubeAttack/CubeAttackSettings.cs @ 724

Last change on this file since 724 was 724, checked in by oruba, 12 years ago
  • improved preprocessing and online modus
  • output bit index is now changeable while executing
File size: 9.2 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.IO;
6using Cryptool.PluginBase;
7using System.ComponentModel;
8
9namespace Cryptool.CubeAttack
10{
11    public class CubeAttackSettings : ISettings
12    {
13        #region Public CubeAttack specific interface
14
15        /// <summary>
16        /// We use this delegate to send log messages from the settings class to the CubeAttack plugin
17        /// </summary>
18        /// <param name="sender"></param>
19        /// <param name="msg"></param>
20        /// <param name="logLevel"></param>
21        public delegate void CubeAttackLogMessage(string msg, NotificationLevel logLevel);
22
23        /// <summary>
24        /// Fire if a new message has to be shown in the status bar
25        /// </summary>
26        public event CubeAttackLogMessage LogMessage;
27       
28        /// <summary>
29        /// Returns true if some settigns have been changed. This value should be set
30        /// externally to false e.g. when a project was saved.
31        /// </summary>
32        [PropertySaveOrder(0)]
33        public bool HasChanges
34        {
35            get { return hasChanges; }
36            set { hasChanges = value; }
37        }
38
39        #endregion
40
41        #region Private variables
42
43        private bool hasChanges;
44        private int selectedBlackBox = 0;
45        private int selectedAction = 0;
46        private int publicVar;
47        private int secretVar;
48        private int maxcube;
49        private int constTest = 50;
50        private int linTest = 50;
51        private string setPublicBits = "0*00*";
52        private int triviumOutputBit;
53        private int triviumRounds;
54       
55        #endregion
56
57
58        #region Algorithm settings properties (visible in the settings pane)
59
60        [PropertySaveOrder(1)]
61        [ContextMenu("Black Box",
62            "Select the black box",
63            1,
64            DisplayLevel.Beginner,
65            ContextMenuControlType.ComboBox,
66            null,
67            "Boolean function parser",
68            "Trivium")]
69        [TaskPane("Black Box",
70            "Select the black box",
71            "",
72            1,
73            false,
74            DisplayLevel.Beginner,
75            ControlType.ComboBox,
76            new string[] { "Boolean function parser", "Trivium" })]
77        public int BlackBox
78        {
79            get { return this.selectedBlackBox; }
80            set
81            {
82                if (value != selectedBlackBox) HasChanges = true;
83                this.selectedBlackBox = value;
84                OnPropertyChanged("BlackBox");
85            }
86        }
87
88        [PropertySaveOrder(2)]
89        [ContextMenu("Action",
90            "Select the cube attack modi",
91            2,
92            DisplayLevel.Beginner,
93            ContextMenuControlType.ComboBox,
94            null,
95            "Preprocessing",
96            "Online",
97            "Manual Public Bit Input")]
98        [TaskPane("Action",
99            "Select the cube attack modi",
100            "",
101            2,
102            false,
103            DisplayLevel.Beginner,
104            ControlType.ComboBox,
105            new string[] { "Preprocessing", "Online", "Manual Public Bit Input" })]
106        public int Action
107        {
108            get { return this.selectedAction; }
109            set
110            {
111                if(value != selectedAction) HasChanges = true;
112                this.selectedAction = value;
113                OnPropertyChanged("Action");
114            }
115        }
116       
117        [PropertySaveOrder(3)]
118        [TaskPane("Public Bit Size",
119            "Public input bits (IV or plaintext) of the attacked cryptosystem.",
120            null,
121            3,
122            false,
123            DisplayLevel.Beginner,
124            ControlType.NumericUpDown,
125            ValidationType.RangeInteger,
126            1,
127            10000)]
128        public int PublicVar
129        {
130            get { return publicVar; }
131            set
132            {
133                if (value != this.publicVar) HasChanges = true;
134                publicVar = value;
135                OnPropertyChanged("PublicVar");
136            }
137        }
138
139        [PropertySaveOrder(4)]
140        [TaskPane("Secret Bit Size",
141            "Key size or key length  of the attacked cryptosystem.",
142            null,
143            4,
144            false,
145            DisplayLevel.Beginner,
146            ControlType.NumericUpDown,
147            ValidationType.RangeInteger,
148            1,
149            10000)]
150        public int SecretVar
151        {
152            get { return secretVar; }
153            set
154            {
155                if (value != this.secretVar) HasChanges = true;
156                secretVar = value;
157                OnPropertyChanged("SecretVar");
158            }
159        }
160
161        [PropertySaveOrder(5)]
162        [TaskPane("Max Cube Size",
163            "Maxmium size of the summation cube.",
164            null,
165            5,
166            true,
167            DisplayLevel.Beginner,
168            ControlType.NumericUpDown,
169            ValidationType.RangeInteger,
170            1,
171            10000)]
172        public int MaxCube
173        {
174            get { return maxcube; }
175            set
176            {
177                if (value != this.maxcube) HasChanges = true;
178                maxcube = value;
179                OnPropertyChanged("MaxCube");
180            }
181        }
182
183        [PropertySaveOrder(6)]
184        [TaskPane("Constant Test",
185            "Number of tests to check if the superpoly is a constant value or not.",
186            null,
187            6,
188            true,
189            DisplayLevel.Beginner,
190            ControlType.NumericUpDown,
191            ValidationType.RangeInteger,
192            0,
193            100000)]
194        public int ConstTest
195        {
196            get { return constTest; }
197            set
198            {
199                if (value != this.constTest) HasChanges = true;
200                constTest = value;
201                OnPropertyChanged("ConstTest");
202            }
203        }
204
205        [PropertySaveOrder(7)]
206        [TaskPane("Linearity Test",
207            "Number of linearity tests to check if the superpoly is linear or not.",
208            null,
209            7,
210            true,
211            DisplayLevel.Beginner,
212            ControlType.NumericUpDown,
213            ValidationType.RangeInteger,
214            0,
215            100000)]
216        public int LinTest
217        {
218            get { return linTest; }
219            set
220            {
221                if (value != this.linTest) HasChanges = true;
222                linTest = value;
223                OnPropertyChanged("LinTest");
224            }
225        }
226
227        [PropertySaveOrder(8)]
228        [TaskPane("Manual Public Bit Input",
229            "Possible inputs '0' (set bit to value 0), '1' (set bit to value 1) and '*' (sum the 0/1 value of the bit).",
230            null,
231            8,
232            false,
233            DisplayLevel.Beginner,
234            ControlType.TextBox,
235            null)]
236        public string SetPublicBits
237        {
238            get 
239            {
240                if (setPublicBits != null)
241                    return setPublicBits;
242                else
243                    return "";
244            }
245            set
246            {
247                if (value != this.setPublicBits) HasChanges = true;
248                setPublicBits = value;
249                OnPropertyChanged("SetPublicBits");
250            }
251        }
252
253        [PropertySaveOrder(9)]
254        [TaskPane("Trivium Output Bit",
255            "Chooses the output bit in the stream cipher Trivium.",
256            null,
257            9,
258            true,
259            DisplayLevel.Beginner,
260            ControlType.NumericUpDown,
261            ValidationType.RangeInteger,
262            1,
263            10000)]
264        public int TriviumOutputBit
265        {
266            get { return triviumOutputBit; }
267            set
268            {
269                if (value != this.triviumOutputBit) HasChanges = true;
270                triviumOutputBit = value;
271                OnPropertyChanged("TriviumOutputBit");
272            }
273        }
274
275        [PropertySaveOrder(10)]
276        [TaskPane("Trivium Initialisation Rounds",
277            "Number of Trivium initialisation rounds.",
278            null,
279            10,
280            false,
281            DisplayLevel.Beginner,
282            ControlType.NumericUpDown,
283            ValidationType.RangeInteger,
284            1,
285            1152)]
286        public int TriviumRounds
287        {
288            get { return triviumRounds; }
289            set
290            {
291                if (value != this.triviumRounds) HasChanges = true;
292                triviumRounds = value;
293                OnPropertyChanged("TriviumRounds");
294            }
295        }
296
297        #endregion
298
299        #region INotifyPropertyChanged Members
300
301        public event PropertyChangedEventHandler PropertyChanged;
302
303        protected void OnPropertyChanged(string name)
304        {
305            if (PropertyChanged != null)
306            {
307                PropertyChanged(this, new PropertyChangedEventArgs(name));
308            }
309        }
310
311        #endregion
312    }
313}
Note: See TracBrowser for help on using the repository browser.