source: trunk/CrypPlugins/XORBinary/XORBinary.cs @ 1709

Last change on this file since 1709 was 1259, checked in by Matthäus Wander, 12 years ago

shortened license text to boilerplate notice in all source files

File size: 7.1 KB
Line 
1/*
2   Copyright 2008 Sebastian Przybylski, University of Siegen
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.Collections.Generic;
19using System.Linq;
20using System.Text;
21
22using Cryptool.PluginBase;
23using System.IO;
24using System.ComponentModel;
25using Cryptool.PluginBase.Cryptography;
26using Cryptool.PluginBase.IO;
27using System.Windows.Controls;
28using Cryptool.PluginBase.Miscellaneous;
29using System.Security.Cryptography;
30// for [MethodImpl(MethodImplOptions.Synchronized)]
31using System.Runtime.CompilerServices;
32
33namespace Cryptool.XORBinary
34{
35    [Author("Soeren Rinne", "soeren.rinne@cryptool.de", "Ruhr-Universitaet Bochum, Chair for System Security", "http://www.trust.rub.de/")]
36    [PluginInfo(false, "XORBinary", "Simple Binary XOR", "XORBinary/DetailedDescription/Description.xaml", "XORBinary/Images/icon.png", "XORBinary/Images/icon.png", "XORBinary/Images/icon.png")]
37    public class XORBinary : IThroughput
38    {
39
40        #region Private variables
41
42        private XORBinarySettings settings;
43        private bool inputOne;
44        private bool inputTwo;
45        private bool output;
46
47        #endregion
48
49        #region Public variables
50        public int inputOneFlag;
51        public int inputTwoFlag;
52        public int globalControllerCount;
53        #endregion
54
55        #region Public interface
56
57        /// <summary>
58        /// Contructor
59        /// </summary>
60        public XORBinary()
61        {
62            this.settings = new XORBinarySettings();
63            ((XORBinarySettings)(this.settings)).LogMessage += Xor_LogMessage;
64        }
65
66        /// <summary>
67        /// Get or set all settings for this algorithm
68        /// </summary>
69        public ISettings Settings
70        {
71            get { return (ISettings)this.settings;
72            }
73            set { this.settings = (XORBinarySettings)value;
74            }
75        }
76
77        [PropertyInfo(Direction.InputData, "XOR Input One", "Input a boolean value to be processed by XOR", "", true, false, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
78        public bool InputOne
79        {
80            [MethodImpl(MethodImplOptions.Synchronized)]
81            get { return this.inputOne; }
82            [MethodImpl(MethodImplOptions.Synchronized)]
83            set
84            {
85                this.inputOne = value;
86                OnPropertyChanged("InputOne");
87                // clean inputOne
88                inputOneFlag = 1;
89            }
90        }
91
92        [PropertyInfo(Direction.InputData, "XOR Input Two", "Input a boolean value to be processed by XOR", "", false, false, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
93        public bool InputTwo
94        {
95            [MethodImpl(MethodImplOptions.Synchronized)]
96            get { return this.inputTwo; }
97            [MethodImpl(MethodImplOptions.Synchronized)]
98            set
99            {
100                this.inputTwo = value;
101                OnPropertyChanged("InputTwo");
102                // clean inputTwo
103                inputTwoFlag = 1;
104            }
105        }
106       
107        private bool controllerInput;
108        // [ControllerProperty(Direction.InputData, "Controller Input", "", DisplayLevel.Beginner)]
109        public object ControllerInput
110        {
111            get { return controllerInput; }
112            set { controllerInput = (bool)value;
113            globalControllerCount++;
114            GuiLogMessage("globalControllerCount: " + globalControllerCount, NotificationLevel.Info);
115            }
116        }
117
118        [PropertyInfo(Direction.OutputData, "XOR Output", "Output after XORing input one and two. Only fires up, if both inputs are fresh.", "", false, false, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
119        public bool Output
120        {
121            [MethodImpl(MethodImplOptions.Synchronized)]
122            get
123            {
124                return output;
125            }
126            set
127            {   // is readonly
128            }
129        }
130
131        #endregion
132
133        #region IPlugin members
134
135        public void Initialize()
136        {
137        }
138
139        public void Dispose()
140        {
141            // set input flags according to settings
142            if (settings.FlagInputOne) inputOneFlag = 1;
143            else inputOneFlag = -1;
144            if (settings.FlagInputTwo) inputTwoFlag = 1;
145            else inputTwoFlag = -1;
146
147            globalControllerCount = 0;
148        }
149
150        public UserControl Presentation
151        {
152            get { return null; }
153        }
154
155        public UserControl QuickWatchPresentation
156        {
157            get { return null; }
158        }
159
160        public void Stop()
161        {
162        }
163
164        public void PostExecution()
165        {
166            Dispose();
167        }
168
169        public void PreExecution()
170        {
171            Dispose();
172        }
173
174        #endregion
175
176        #region INotifyPropertyChanged Members
177
178        public event PropertyChangedEventHandler PropertyChanged;
179
180        public void OnPropertyChanged(string name)
181        {
182            if (PropertyChanged != null)
183            {
184                PropertyChanged(this, new PropertyChangedEventArgs(name));
185            }
186        }
187
188        #endregion
189
190        #region Private methods
191
192        private void Xor_LogMessage(string msg, NotificationLevel logLevel)
193        {
194            /*if (OnGuiLogNotificationOccured != null)
195            {
196                OnGuiLogNotificationOccured(this, new GuiLogEventArgs(msg, this, logLevel));
197            }*/
198        }
199
200        #endregion
201
202        #region IPlugin Members
203
204#pragma warning disable 67
205        public event StatusChangedEventHandler OnPluginStatusChanged;
206        public event PluginProgressChangedEventHandler OnPluginProgressChanged;
207#pragma warning restore
208
209        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
210        private void GuiLogMessage(string message, NotificationLevel logLevel)
211        {
212            EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(message, this, logLevel));
213        }
214
215        public void Execute()
216        {
217            if (inputOneFlag == 1 && inputTwoFlag == 1)
218            {
219                // flag all inputs as dirty
220                inputOneFlag = -1;
221                inputTwoFlag = -1;
222
223                // reset ControllerCount
224                globalControllerCount = 0;
225
226                output = inputOne ^ inputTwo;
227                OnPropertyChanged("Output");
228            }
229        }
230
231        public void Pause()
232        {
233        }
234
235        #endregion
236    }
237}
Note: See TracBrowser for help on using the repository browser.