source: trunk/CrypPlugins/AES/AESSettings.cs

Last change on this file was 8983, checked in by kopal, 10 months ago

Complete CrypTool 2 project

  • renamed "Cryptool" namespace to "CrypTool" namespace
File size: 9.6 KB
Line 
1/*
2   Copyright 2008-2012 Arno Wacker, University of Kassel
3
4   Licensed under the Apache License, Version 2.0 (the "License");
5   you may not use this file except in compliance with the License.
6   You may obtain a copy of the License at
7
8       http://www.apache.org/licenses/LICENSE-2.0
9
10   Unless required by applicable law or agreed to in writing, software
11   distributed under the License is distributed on an "AS IS" BASIS,
12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   See the License for the specific language governing permissions and
14   limitations under the License.
15*/
16
17using System;
18using System.Windows;
19using System.ComponentModel;
20using CrypTool.PluginBase;
21using CrypTool.PluginBase.Miscellaneous;
22
23namespace CrypTool.Plugins.Cryptography.Encryption
24{
25    public class AESSettings : ISettings
26    {
27        private int action = 0; // 0=encrypt, 1=decrypt
28        private int cryptoAlgorithm = 0; // 0=AES, 1=Rijndael
29        private int blocksize = 0; // 0=128, 1=192, 2=256
30        private int keysize = 0; // 0=128, 1=192, 2=256
31        private int mode = 0; // 0="ECB", 1="CBC", 2="CFB", 3="OFB"
32        private int padding = 1; // 0="None", 1="Zeros"=default, 2="PKCS7" , 3="ANSIX923", 4="ISO10126", 5=1-0-Padding
33
34        public BlockCipherHelper.PaddingType[] padmap = new BlockCipherHelper.PaddingType[6] { 
35            BlockCipherHelper.PaddingType.None, BlockCipherHelper.PaddingType.Zeros, BlockCipherHelper.PaddingType.PKCS7,
36            BlockCipherHelper.PaddingType.ANSIX923, BlockCipherHelper.PaddingType.ISO10126, BlockCipherHelper.PaddingType.OneZeros
37        };
38
39        [ContextMenu("CryptoAlgorithmCaption", "CryptoAlgorithmTooltip", 1, ContextMenuControlType.ComboBox, null, "CryptoAlgorithmList1", "CryptoAlgorithmList2")]
40        [TaskPane("CryptoAlgorithmCaption", "CryptoAlgorithmTooltip", null, 0, false, ControlType.ComboBox, new string[] { "CryptoAlgorithmList1", "CryptoAlgorithmList2" })]
41        public int CryptoAlgorithm
42        {
43            get { return this.cryptoAlgorithm; }
44            set
45            {
46                if (((int)value) != cryptoAlgorithm)
47                {
48                    this.cryptoAlgorithm = (int)value;
49                    if (cryptoAlgorithm == 0)
50                    {
51                        blocksize = 0;
52                        OnPropertyChanged("Blocksize");
53                    }
54                    OnPropertyChanged("CryptoAlgorithm");
55
56                    switch (cryptoAlgorithm)
57                    {
58                        case 0:
59                            ChangePluginIcon(0);
60                            break;
61                        case 1:
62                            ChangePluginIcon(3);
63                            break;
64                        default:
65                            break;
66                    }
67
68                    UpdateTaskPaneVisibility();
69                }
70            }
71        }
72
73        [ContextMenu("ActionCaption", "ActionTooltip", 2, ContextMenuControlType.ComboBox, new int[] { 1, 2 }, "ActionList1", "ActionList2")]
74        [TaskPane("ActionCaption", "ActionTooltip", null, 2, false, ControlType.ComboBox, new string[] { "ActionList1", "ActionList2" })]
75        public int Action
76        {
77            get { return this.action; }
78            set
79            {
80                if (((int)value) != action)
81                {
82                    this.action = (int)value;
83                    OnPropertyChanged("Action");
84                }
85            }
86        }
87
88
89        [ContextMenu("KeysizeCaption", "KeysizeTooltip", 3, ContextMenuControlType.ComboBox, null, "KeysizeList1", "KeysizeList2", "KeysizeList3")]
90        [TaskPane("KeysizeCaption", "KeysizeTooltip", null, 3, false, ControlType.ComboBox, new String[] { "KeysizeList1", "KeysizeList2", "KeysizeList3" })]
91        public int Keysize
92        {
93            get { return this.keysize; }
94            set
95            {
96                if (((int)value) != keysize)
97                {
98                    this.keysize = (int)value;
99                    OnPropertyChanged("Keysize");
100                }
101            }
102        }
103
104        public int KeysizeAsBytes
105        {
106            get
107            {
108                switch (this.keysize)
109                {
110                    case 0:
111                        return 16;
112                    case 1:
113                        return 24;
114                    case 2:
115                        return 32;
116                    default:
117                        throw new InvalidOperationException("Selected keysize entry unknown: " + this.keysize);
118                }
119            }
120        }
121
122        public int KeysizeAsBits
123        {
124            get
125            {
126                return KeysizeAsBytes * 8;
127            }
128        }
129
130        [ContextMenu("BlocksizeCaption", "BlocksizeTooltip", 4, ContextMenuControlType.ComboBox, null, "BlocksizeList1", "BlocksizeList2", "BlocksizeList3")]
131        [TaskPane("BlocksizeCaption", "BlocksizeTooltip", null, 4, false, ControlType.ComboBox, new String[] { "BlocksizeList1", "BlocksizeList2", "BlocksizeList3" })]
132        public int Blocksize
133        {
134            get { return this.blocksize; }
135            set
136            {
137                if (((int)value) != blocksize)
138                {
139                    this.blocksize = (int)value;
140                    if (blocksize > 0)
141                    {
142                        cryptoAlgorithm = 1;
143                        OnPropertyChanged("CryptoAlgorithm");
144                    }
145                    OnPropertyChanged("Blocksize");
146                }
147            }
148        }
149
150        public int BlocksizeAsBytes
151        {
152            get
153            {
154                switch (this.cryptoAlgorithm)
155                {
156                    case 0:
157                        return 16;
158                    case 1:
159                        switch (this.blocksize)
160                        {
161                            case 0:
162                                return 16;
163                            case 1:
164                                return 24;
165                            case 2:
166                                return 32;
167                            default:
168                                throw new InvalidOperationException("Selected blocksize entry unknown: " + this.blocksize);
169                        }
170                    default:
171                        throw new InvalidOperationException("Selected algorithm entry unknown: " + this.cryptoAlgorithm);
172                }
173            }
174        }
175
176        [ContextMenu("ModeCaption", "ModeTooltip", 5, ContextMenuControlType.ComboBox, null, new String[] { "ModeList1", "ModeList2", "ModeList3", "ModeList4", "ModeList5" })]
177        [TaskPane("ModeCaption", "ModeTooltip", null, 5, false, ControlType.ComboBox, new String[] { "ModeList1", "ModeList2", "ModeList3", "ModeList4", "ModeList5" })]
178        public int Mode
179        {
180            get { return this.mode; }
181            set
182            {
183                if (((int)value) != mode)
184                {
185                    this.mode = (int)value;
186                    OnPropertyChanged("Mode");
187                }
188            }
189        }
190
191        [ContextMenu("PaddingCaption", "PaddingTooltip", 6, ContextMenuControlType.ComboBox, null, "PaddingList1", "PaddingList2", "PaddingList3", "PaddingList4", "PaddingList5", "PaddingList6")]
192        [TaskPane("PaddingCaption", "PaddingTooltip", null, 6, false, ControlType.ComboBox, new String[] { "PaddingList1", "PaddingList2", "PaddingList3", "PaddingList4", "PaddingList5", "PaddingList6" })]
193        public int Padding
194        {
195            get { return this.padding; }
196            set
197            {
198                if (((int)value) != padding)
199                {
200                    this.padding = (int)value;
201                    OnPropertyChanged("Padding");
202                }
203            }
204        }
205
206        #region events
207
208        public event TaskPaneAttributeChangedHandler TaskPaneAttributeChanged;
209
210        #endregion
211
212        internal void UpdateTaskPaneVisibility()
213        {
214            if (TaskPaneAttributeChanged == null)
215                return;
216
217            switch (CryptoAlgorithm)
218            {
219                case 0: // AES
220                    TaskPaneAttribteContainer tba = new TaskPaneAttribteContainer("Blocksize", Visibility.Collapsed);
221                    TaskPaneAttributeChangedEventArgs tbac = new TaskPaneAttributeChangedEventArgs(tba);
222                    TaskPaneAttributeChanged(this, tbac);
223                    break;
224                case 1: // Rijndael
225                    TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("Blocksize", Visibility.Visible)));
226                    break;
227            }
228        }
229
230        #region INotifyPropertyChanged Members
231
232        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
233        public void Initialize()
234        {
235            UpdateTaskPaneVisibility();
236        }
237
238        protected void OnPropertyChanged(string name)
239        {
240            if (PropertyChanged != null)
241            {
242                PropertyChanged(this, new PropertyChangedEventArgs(name));
243            }
244        }
245
246        #endregion
247
248        public event StatusChangedEventHandler OnPluginStatusChanged;
249
250        private void ChangePluginIcon(int Icon)
251        {
252            if (OnPluginStatusChanged != null) OnPluginStatusChanged(null, new StatusEventArgs(StatusChangedMode.ImageUpdate, Icon));
253        }
254    }
255}
Note: See TracBrowser for help on using the repository browser.