source: trunk/CrypPlugins/KeySearcher/KeySearcherSettings.cs @ 1751

Last change on this file since 1751 was 1751, checked in by Paul Lelgemann, 11 years ago

+ KeySearcher: added database access for evaluation
+ Added KeySearcher/AES workspaces with different sizes

File size: 9.2 KB
Line 
1using System;
2using System.Windows;
3using Cryptool.PluginBase;
4using System.ComponentModel;
5using System.Collections.ObjectModel;
6using KeySearcher.P2P.Storage;
7
8namespace KeySearcher
9{
10    public class KeySearcherSettings : ISettings
11    {
12        private readonly KeySearcher keysearcher;
13        private int coresUsed;
14        private const string GroupPeerToPeer = "Peer-to-Peer network";
15        private const string GroupEvaluation = "Evaluation";
16
17        public KeySearcherSettings(KeySearcher ks)
18        {
19            keysearcher = ks;
20            CoresAvailable.Clear();
21            for (int i = 0; i < Environment.ProcessorCount; i++)
22                CoresAvailable.Add((i + 1).ToString());
23            CoresUsed = Environment.ProcessorCount - 1;
24
25            chunkSize = 21;
26        }
27
28        private string key;
29        [TaskPane("Key", "Key pattern used to bruteforce", null, 1, false, DisplayLevel.Beginner, ControlType.TextBox)]
30        public String Key
31        {
32            get
33            {
34                return key;
35            }
36            set
37            {
38                key = value;
39                OnPropertyChanged("Key");
40                if (!(keysearcher.Pattern != null && keysearcher.Pattern.testWildcardKey(value)))
41                    keysearcher.GuiLogMessage("Wrong key pattern!", NotificationLevel.Error);
42                HasChanges = true;
43            }
44        }
45
46        [TaskPane("Reset", "Reset Key", null, 2, false, DisplayLevel.Beginner, ControlType.Button)]
47        public void Reset()
48        {
49            Key = keysearcher.Pattern.giveInputPattern();
50        }
51       
52        [TaskPane("CoresUsed", "Choose how many cores should be used", null, 3, false, DisplayLevel.Beginner, ControlType.DynamicComboBox, new string[] { "CoresAvailable" })]
53        public int CoresUsed
54        {
55            get { return this.coresUsed; }
56            set
57            {
58                if (value != this.coresUsed)
59                {
60                    this.coresUsed = value;
61                    OnPropertyChanged("CoresUsed");
62                    HasChanges = true;
63                }
64            }
65        }
66
67        private bool usePeerToPeer;
68        [TaskPane("Use Peer-to-Peer network", "Distributes the operation on available peers by using the built-in peer-to-peer network.", GroupPeerToPeer, 0, false, DisplayLevel.Beginner,
69            ControlType.CheckBox)]
70        public bool UsePeerToPeer
71        {
72            get { return usePeerToPeer; }
73            set
74            {
75                if (value != usePeerToPeer)
76                {
77                    usePeerToPeer = value;
78                    OnPropertyChanged("UsePeerToPeer");
79                    HasChanges = true;
80                }
81            }
82        }
83
84        private bool autoconnectPeerToPeer;
85        [TaskPane("Autoconnect network", "Establish a connection to the network if the workspace is started without the background connection being active.", GroupPeerToPeer, 1, false, DisplayLevel.Beginner,
86            ControlType.CheckBox)]
87        public bool AutoconnectPeerToPeer
88        {
89            get { return autoconnectPeerToPeer; }
90            set
91            {
92                if (value != autoconnectPeerToPeer)
93                {
94                    autoconnectPeerToPeer = value;
95                    OnPropertyChanged("AutoconnectPeerToPeer");
96                    HasChanges = true;
97                }
98            }
99        }
100
101        private bool verbosePeerToPeerDisplay;
102        [TaskPane("Display verbose information", "Display verbose information about network requests in the quick watch.", GroupPeerToPeer, 2, true, DisplayLevel.Beginner,
103            ControlType.CheckBox)]
104        public bool VerbosePeerToPeerDisplay
105        {
106            get { return verbosePeerToPeerDisplay; }
107            set
108            {
109                if (value != verbosePeerToPeerDisplay)
110                {
111                    verbosePeerToPeerDisplay = value;
112                    OnPropertyChanged("VerbosePeerToPeerDisplay");
113                    HasChanges = true;
114                }
115            }
116        }
117
118        private int chunkSize;
119        [TaskPane("Chunk size", "Amount of keys, that will be calculated by one peer at a time. This value is the exponent of the power of two used for the chunk size.", GroupPeerToPeer, 3, false, DisplayLevel.Professional,
120            ControlType.NumericUpDown, ValidationType.RangeInteger, 1, 1000)]
121        public int ChunkSize
122        {
123            get { return chunkSize; }
124            set
125            {
126                if (value != chunkSize)
127                {
128                    chunkSize = value;
129                    OnPropertyChanged("ChunkSize");
130                    HasChanges = true;
131                }
132            }
133        }
134
135        [TaskPane("Copy status key", "Copy status key to clipboard. The key can than be used to upload it together with the job using the P2PEditor.", GroupPeerToPeer, 4, true, DisplayLevel.Professional, ControlType.Button)]
136        public void StatusKeyButton()
137        {
138            if (!keysearcher.IsKeySearcherRunning)
139            {
140                keysearcher.GuiLogMessage("KeySearcher must be running to copy the status key.", NotificationLevel.Error);
141                return;
142            }
143
144            var generator = new StorageKeyGenerator(keysearcher, this);
145            var statusKey = generator.GenerateStatusKey();
146
147            Clipboard.SetDataObject(statusKey, true);
148            keysearcher.GuiLogMessage("Status key '" + statusKey + "' has been copied to clipboard.",
149                                      NotificationLevel.Info);
150        }
151
152        private string evaluationHost;
153        [TaskPane("Host", "Database host with evaluation database", GroupEvaluation, 0, false, DisplayLevel.Expert, ControlType.TextBox)]
154        public String EvaluationHost
155        {
156            get
157            {
158                return evaluationHost;
159            }
160            set
161            {
162                if (value != evaluationHost)
163                {
164                    evaluationHost = value;
165                    OnPropertyChanged("EvaluationHost");
166                    HasChanges = true;
167                }
168            }
169        }
170
171        private string evaluationUser;
172        [TaskPane("User", "Username for evaluation database", GroupEvaluation, 1, false, DisplayLevel.Expert, ControlType.TextBox)]
173        public String EvaluationUser
174        {
175            get
176            {
177                return evaluationUser;
178            }
179            set
180            {
181                if (value != evaluationUser)
182                {
183                    evaluationUser = value;
184                    OnPropertyChanged("EvaluationUser");
185                    HasChanges = true;
186                }
187            }
188        }
189
190        private string evaluationPassword;
191        [TaskPane("Password", "Password for evaluation database", GroupEvaluation, 2, false, DisplayLevel.Expert, ControlType.TextBox)]
192        public String EvaluationPassword
193        {
194            get
195            {
196                return evaluationPassword;
197            }
198            set
199            {
200                if (value != evaluationPassword)
201                {
202                    evaluationPassword = value;
203                    OnPropertyChanged("EvaluationPassword");
204                    HasChanges = true;
205                }
206            }
207        }
208
209        private string evaluationDatabase;
210        [TaskPane("Database", "Name of the evaluation database", GroupEvaluation, 3, false, DisplayLevel.Expert, ControlType.TextBox)]
211        public String EvaluationDatabase
212        {
213            get
214            {
215                return evaluationDatabase;
216            }
217            set
218            {
219                if (value != evaluationDatabase)
220                {
221                    evaluationDatabase = value;
222                    OnPropertyChanged("EvaluationDatabase");
223                    HasChanges = true;
224                }
225            }
226        }
227
228        private ObservableCollection<string> coresAvailable = new ObservableCollection<string>();
229        public ObservableCollection<string> CoresAvailable
230        {
231            get { return coresAvailable; }
232            set
233            {
234                if (value != coresAvailable)
235                {
236                    coresAvailable = value;
237                }
238                OnPropertyChanged("CoresAvailable");
239            }
240        }
241
242        #region ISettings Members
243
244        private bool hasChanges;
245
246        public bool HasChanges
247        {
248            get
249            {
250                return hasChanges;
251            }
252            set
253            {
254                hasChanges = value;
255                OnPropertyChanged("HasChanges");
256            }
257        }
258
259        #endregion
260
261        #region INotifyPropertyChanged Members
262
263        public event PropertyChangedEventHandler PropertyChanged;
264
265        private void OnPropertyChanged(string p)
266        {
267            if (PropertyChanged != null)
268            {
269                PropertyChanged(this, new PropertyChangedEventArgs(p));
270            }
271        }
272
273        #endregion
274    }
275}
Note: See TracBrowser for help on using the repository browser.