source: trunk/CrypPlugins/Scytale/Scytale.cs @ 2380

Last change on this file since 2380 was 2334, checked in by Matthäus Wander, 11 years ago

removed 1006 occurences of DisplayLevel in 218 files (see #122)

File size: 6.6 KB
Line 
1/*                             
2   Copyright 2009 Fabian Enkler, Arno Wacker (maintenance, updates), Uni Duisburg-Essen
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.ComponentModel;
18using System.Windows.Controls;
19using Cryptool.PluginBase;
20using Cryptool.PluginBase.Cryptography;
21using Cryptool.PluginBase.Miscellaneous;
22
23namespace Cryptool.Scytale
24{
25    [Author("Fabian Enkler, A. Wacker", "enkler@cryptool.org, wacker@cryptool.org", "Uni Duisburg-Essen", "http://www.vs.uni-duisburg-essen.de")]
26    [PluginInfo(false, "Scytale", "Scytale -- classic transposition cipher", "Scytale/DetailedDescription/Description.xaml", "Scytale/icon.png")]
27    [EncryptionType(EncryptionType.Classic)]
28    public class Scytale : IEncryption
29    {
30        private readonly ScytaleSettings settings;
31        private int CharsPerRow;
32
33        public event PropertyChangedEventHandler PropertyChanged;
34        public event PluginProgressChangedEventHandler OnPluginProgressChanged;
35        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured; 
36#pragma warning disable 67
37        public event StatusChangedEventHandler OnPluginStatusChanged;
38#pragma warning restore
39
40        public Scytale()
41        {
42            this.settings = new ScytaleSettings();
43        }
44
45        private string inputString = string.Empty;
46        [PropertyInfo(Direction.InputData, "Text input", "Input a string to be processed by the Scytale cipher", "", true, false, QuickWatchFormat.Text, null)]
47        public string InputString
48        {
49            get { return this.inputString; }
50            set
51            {
52                if (value != inputString)
53                {
54                    this.inputString = value;
55                    OnPropertyChanged("InputString");
56                }
57            }
58        }
59
60        private string outputString = string.Empty;
61        [PropertyInfo(Direction.OutputData, "Text output", "The string after processing with the Scytale cipher", "", false, false, QuickWatchFormat.Text, null)]
62        public string OutputString
63        {
64            get { return this.outputString; }
65            set
66            {
67                outputString = value;
68                OnPropertyChanged("OutputString");
69            }
70        }
71
72
73
74        [PropertyInfo(Direction.InputData, "Stick size", "Same setting as Stick size value in the algorithms settings but as dynamic input.", "", false, false, QuickWatchFormat.Text, null)]
75        public int StickSize
76        {
77            get { return settings.StickSize; }
78            set
79            {
80                if (value != settings.StickSize)
81                {
82                    settings.StickSize = value;
83                    OnPropertyChanged("StickSize");
84                }
85            }
86        }
87
88
89
90        public void PreExecution()
91        {
92        }
93
94        public void Execute()
95        {
96            if (!string.IsNullOrEmpty(inputString))
97            {
98                if (settings.StickSize < 1)
99                {
100                    EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Got an invalid stick size of " + settings.StickSize + "! Reverting to 1.", this, NotificationLevel.Warning));
101                    settings.StickSize = 1;
102                }
103
104                CharsPerRow = inputString.Length / settings.StickSize + 1;
105                outputString = string.Empty;
106                switch (settings.Action)
107                {
108                    case 0:
109                        EncryptIt();
110                        break;
111                    case 1:
112                        DecryptIt();
113                        break;
114                    default:
115                        break;
116
117                }
118                OnPropertyChanged("OutputString");
119            }
120        }
121
122        private void DecryptIt()
123        {
124            int Position = 0;
125            for (int i = 0; i < inputString.Length - 1; i++)
126            {
127                outputString += inputString[Position];
128                Position += settings.StickSize;
129                if (Position >= inputString.Length)
130                    Position -= inputString.Length - 1;
131
132                //show the progress
133                EventsHelper.ProgressChanged(OnPluginProgressChanged, this, new PluginProgressEventArgs(i, inputString.Length - 2));
134            }
135            outputString = outputString.Replace('_', ' ').Trim();
136        }
137
138        private void EncryptIt()
139        {
140            inputString = inputString.Replace(' ', '_');
141            int Position = 0;
142            int totalChars = settings.StickSize * CharsPerRow;
143            for (int i = 0; i < totalChars; i++)
144            {
145                if (Position > inputString.Length - 1)
146                    outputString += "_";
147                else
148                {
149                    outputString += inputString[Position];
150                }
151                Position += CharsPerRow;
152                if (Position >= settings.StickSize * CharsPerRow)
153                    Position -= settings.StickSize * CharsPerRow - 1;
154
155                //show the progress
156                EventsHelper.ProgressChanged(OnPluginProgressChanged, this, new PluginProgressEventArgs(i, totalChars - 1));
157            }
158        }
159
160        public void PostExecution()
161        {
162        }
163
164        public void Pause()
165        {
166        }
167
168        public void Stop()
169        {
170        }
171
172        public void Initialize()
173        {
174        }
175
176        public void Dispose()
177        {
178        }
179
180        public ISettings Settings
181        {
182            get { return this.settings; }
183        }
184
185        public UserControl Presentation
186        {
187            get { return null; }
188        }
189
190        public UserControl QuickWatchPresentation
191        {
192            get { return null; }
193        }
194
195        private void OnPropertyChanged(string name)
196        {
197            if (PropertyChanged != null)
198                PropertyChanged(this, new PropertyChangedEventArgs(name));
199        }
200    }
201}
Note: See TracBrowser for help on using the repository browser.