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

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

o Refactored distributed KeySearcher: updated directory structure and variable names

File size: 6.3 KB
Line 
1using System;
2using System.Numerics;
3using Cryptool.PluginBase;
4using System.ComponentModel;
5using System.Collections.ObjectModel;
6using KeySearcher.KeyPattern;
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
16        public KeySearcherSettings(KeySearcher ks)
17        {
18            keysearcher = ks;
19            CoresAvailable.Clear();
20            for (int i = 0; i < Environment.ProcessorCount; i++)
21                CoresAvailable.Add((i + 1).ToString());
22            CoresUsed = Environment.ProcessorCount - 1;
23
24            chunkSize = 21;
25        }
26
27        private string key;
28        [TaskPane("Key", "Key pattern used to bruteforce", null, 1, false, DisplayLevel.Beginner, ControlType.TextBox)]
29        public String Key
30        {
31            get
32            {
33                return key;
34            }
35            set
36            {
37                key = value;
38                OnPropertyChanged("Key");
39                if (!(keysearcher.Pattern != null && keysearcher.Pattern.testWildcardKey(value)))
40                    keysearcher.GuiLogMessage("Wrong key pattern!", NotificationLevel.Error);
41                HasChanges = true;
42                OnPropertyChanged("TotalAmountOfChunks");
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 int chunkSize;
102        [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,
103            ControlType.NumericUpDown, ValidationType.RangeInteger, 1, 1000)]
104        public int ChunkSize
105        {
106            get { return chunkSize; }
107            set
108            {
109                if (value != chunkSize)
110                {
111                    chunkSize = value;
112                    OnPropertyChanged("ChunkSize");
113                    OnPropertyChanged("TotalAmountOfChunks");
114                    HasChanges = true;
115                }
116            }
117        }
118
119        [TaskPane("Amount of chunks", "Total number of chunks that must be calculated with the given chunk size.", GroupPeerToPeer, 4, false, DisplayLevel.Professional,
120            ControlType.TextBox)]
121        public double TotalAmountOfChunks
122        {
123            get {
124                if (keysearcher.Pattern == null || !keysearcher.Pattern.testWildcardKey(key) || ChunkSize == 0)
125                {
126                    return 0;
127                }
128
129                var keyPattern = new KeyPattern.KeyPattern(keysearcher.ControlMaster.getKeyPattern());
130                keyPattern.WildcardKey = key;
131                var keyPatternPool = new KeyPatternPool(keyPattern, new BigInteger(Math.Pow(2, ChunkSize)));
132                return (double) keyPatternPool.Length;
133            }
134            set
135            {
136                OnPropertyChanged("TotalAmountOfChunks");
137            }
138        }
139
140        private ObservableCollection<string> coresAvailable = new ObservableCollection<string>();
141        public ObservableCollection<string> CoresAvailable
142        {
143            get { return coresAvailable; }
144            set
145            {
146                if (value != coresAvailable)
147                {
148                    coresAvailable = value;
149                }
150                OnPropertyChanged("CoresAvailable");
151            }
152        }
153
154        #region ISettings Members
155
156        private bool hasChanges;
157
158        public bool HasChanges
159        {
160            get
161            {
162                return hasChanges;
163            }
164            set
165            {
166                hasChanges = value;
167                OnPropertyChanged("HasChanges");
168            }
169        }
170
171        #endregion
172
173        #region INotifyPropertyChanged Members
174
175        public event PropertyChangedEventHandler PropertyChanged;
176
177        private void OnPropertyChanged(string p)
178        {
179            if (PropertyChanged != null)
180            {
181                PropertyChanged(this, new PropertyChangedEventArgs(p));
182            }
183        }
184
185        #endregion
186    }
187}
Note: See TracBrowser for help on using the repository browser.