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

Last change on this file since 748 was 748, checked in by oruba, 12 years ago

modified IController to BooleanFunctionParser plug-in

File size: 8.5 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 outputBit;
53       
54        #endregion
55
56
57        #region Algorithm settings properties (visible in the settings pane)
58
59        [PropertySaveOrder(1)]
60        [ContextMenu("Black Box",
61            "Select the black box",
62            1,
63            DisplayLevel.Beginner,
64            ContextMenuControlType.ComboBox,
65            null,
66            "Boolean function parser",
67            "Trivium")]
68        [TaskPane("Black Box",
69            "Select the black box",
70            "",
71            1,
72            false,
73            DisplayLevel.Beginner,
74            ControlType.ComboBox,
75            new string[] { "Boolean function parser", "Trivium" })]
76        public int BlackBox
77        {
78            get { return this.selectedBlackBox; }
79            set
80            {
81                if (value != selectedBlackBox) HasChanges = true;
82                this.selectedBlackBox = value;
83                OnPropertyChanged("BlackBox");
84            }
85        }
86
87        [PropertySaveOrder(2)]
88        [ContextMenu("Action",
89            "Select the cube attack modi",
90            2,
91            DisplayLevel.Beginner,
92            ContextMenuControlType.ComboBox,
93            null,
94            "Preprocessing",
95            "Online",
96            "Manual Public Bit Input")]
97        [TaskPane("Action",
98            "Select the cube attack modi",
99            "",
100            2,
101            false,
102            DisplayLevel.Beginner,
103            ControlType.ComboBox,
104            new string[] { "Preprocessing", "Online", "Manual Public Bit Input" })]
105        public int Action
106        {
107            get { return this.selectedAction; }
108            set
109            {
110                if(value != selectedAction) HasChanges = true;
111                this.selectedAction = value;
112                OnPropertyChanged("Action");
113            }
114        }
115       
116        [PropertySaveOrder(3)]
117        [TaskPane("Public Bit Size",
118            "Public input bits (IV or plaintext) of the attacked cryptosystem.",
119            null,
120            3,
121            false,
122            DisplayLevel.Beginner,
123            ControlType.NumericUpDown,
124            ValidationType.RangeInteger,
125            1,
126            10000)]
127        public int PublicVar
128        {
129            get { return publicVar; }
130            set
131            {
132                if (value != this.publicVar) HasChanges = true;
133                publicVar = value;
134                OnPropertyChanged("PublicVar");
135            }
136        }
137
138        [PropertySaveOrder(4)]
139        [TaskPane("Secret Bit Size",
140            "Key size or key length  of the attacked cryptosystem.",
141            null,
142            4,
143            false,
144            DisplayLevel.Beginner,
145            ControlType.NumericUpDown,
146            ValidationType.RangeInteger,
147            1,
148            10000)]
149        public int SecretVar
150        {
151            get { return secretVar; }
152            set
153            {
154                if (value != this.secretVar) HasChanges = true;
155                secretVar = value;
156                OnPropertyChanged("SecretVar");
157            }
158        }
159
160        [PropertySaveOrder(5)]
161        [TaskPane("Max Cube Size",
162            "Maxmium size of the summation cube.",
163            null,
164            5,
165            false,
166            DisplayLevel.Beginner,
167            ControlType.NumericUpDown,
168            ValidationType.RangeInteger,
169            1,
170            10000)]
171        public int MaxCube
172        {
173            get { return maxcube; }
174            set
175            {
176                if (value != this.maxcube) HasChanges = true;
177                maxcube = value;
178                OnPropertyChanged("MaxCube");
179            }
180        }
181
182        [PropertySaveOrder(6)]
183        [TaskPane("Constant Test",
184            "Number of tests to check if the superpoly is a constant value or not.",
185            null,
186            6,
187            true,
188            DisplayLevel.Beginner,
189            ControlType.NumericUpDown,
190            ValidationType.RangeInteger,
191            0,
192            100000)]
193        public int ConstTest
194        {
195            get { return constTest; }
196            set
197            {
198                if (value != this.constTest) HasChanges = true;
199                constTest = value;
200                OnPropertyChanged("ConstTest");
201            }
202        }
203
204        [PropertySaveOrder(7)]
205        [TaskPane("Linearity Test",
206            "Number of linearity tests to check if the superpoly is linear or not.",
207            null,
208            7,
209            true,
210            DisplayLevel.Beginner,
211            ControlType.NumericUpDown,
212            ValidationType.RangeInteger,
213            0,
214            100000)]
215        public int LinTest
216        {
217            get { return linTest; }
218            set
219            {
220                if (value != this.linTest) HasChanges = true;
221                linTest = value;
222                OnPropertyChanged("LinTest");
223            }
224        }
225
226        [PropertySaveOrder(8)]
227        [TaskPane("Manual Public Bit Input",
228            "Possible inputs '0' (set bit to value 0), '1' (set bit to value 1) and '*' (sum the 0/1 value of the bit).",
229            null,
230            8,
231            false,
232            DisplayLevel.Beginner,
233            ControlType.TextBox,
234            null)]
235        public string SetPublicBits
236        {
237            get 
238            {
239                if (setPublicBits != null)
240                    return setPublicBits;
241                else
242                    return "";
243            }
244            set
245            {
246                if (value != this.setPublicBits) HasChanges = true;
247                setPublicBits = value;
248                OnPropertyChanged("SetPublicBits");
249            }
250        }
251
252        [PropertySaveOrder(9)]
253        [TaskPane("Output Bit",
254            "Chooses the output bit of the black box, which should be evaluated.",
255            null,
256            9,
257            true,
258            DisplayLevel.Beginner,
259            ControlType.NumericUpDown,
260            ValidationType.RangeInteger,
261            1,
262            10000)]
263        public int TriviumOutputBit
264        {
265            get { return outputBit; }
266            set
267            {
268                if (value != this.outputBit) HasChanges = true;
269                outputBit = value;
270                OnPropertyChanged("TriviumOutputBit");
271            }
272        }
273
274        #endregion
275
276
277        #region INotifyPropertyChanged Members
278
279        public event PropertyChangedEventHandler PropertyChanged;
280
281        protected void OnPropertyChanged(string name)
282        {
283            if (PropertyChanged != null)
284            {
285                PropertyChanged(this, new PropertyChangedEventArgs(name));
286            }
287        }
288
289        #endregion
290    }
291}
Note: See TracBrowser for help on using the repository browser.