source: trunk/CrypPlugins/SHA/SHA.cs @ 1778

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

shortened license text to boilerplate notice in all source files

File size: 7.4 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;
21using System.Security.Cryptography;
22using Cryptool.PluginBase;
23using System.IO;
24using System.ComponentModel;
25using System.Windows.Documents;
26using Cryptool.PluginBase.Cryptography;
27using Cryptool.PluginBase.IO;
28using System.Windows.Controls;
29using System.Runtime.Remoting.Contexts;
30using Cryptool.PluginBase.Miscellaneous;
31
32namespace SHA
33{
34  [Author("Sebastian Przybylski", "sebastian@przybylski.org", "Uni-Siegen", "http://www.uni-siegen.de")]
35    [PluginInfo(false, "SHA", "SHA hash functions", "", "SHA/SHA.png")]   
36    public class SHA : ICryptographicHash
37    {
38        private List<CryptoolStream> listCryptoolStreamsOut = new List<CryptoolStream>();
39        private SHASettings settings;
40        private CryptoolStream inputData;
41        private byte[] outputData;       
42       
43
44        public SHA()
45        {
46            this.settings = new SHASettings();
47        }
48
49        #region IHashAlgorithm Members
50
51        public void Execute()
52        {
53            Progress(0.5, 1.0);
54            if (inputData != null)
55            {
56              byte[] data = null;
57
58              switch (settings.SHAFunction)
59              {
60                case (int)SHASettings.ShaFunction.SHA1:
61                  SHA1Managed sha1Hash = new SHA1Managed();
62                  data = sha1Hash.ComputeHash((Stream)inputData);
63                  break;
64                case (int)SHASettings.ShaFunction.SHA256:
65                  SHA256Managed sha256Hash = new SHA256Managed();
66                  data = sha256Hash.ComputeHash((Stream)inputData);
67                  break;
68                case (int)SHASettings.ShaFunction.SHA384:
69                  SHA384Managed sha384Hash = new SHA384Managed();
70                  data = sha384Hash.ComputeHash((Stream)inputData);
71                  break;
72                case (int)SHASettings.ShaFunction.SHA512:
73                  SHA512Managed sha512Hash = new SHA512Managed();
74                  data = sha512Hash.ComputeHash((Stream)inputData);
75                  break;
76              }             
77             
78              GuiLogMessage("Hash created.", NotificationLevel.Info);             
79              Progress(1, 1);
80
81              OutputData = data;
82            }
83            else
84            {                           
85              GuiLogMessage("Received null value for ICryptoolStream.", NotificationLevel.Warning);
86            }
87            Progress(1.0, 1.0);
88        }
89
90        public ISettings Settings
91        {
92          get { return (ISettings)this.settings; }
93            set { this.settings = (SHASettings)value; }
94        }
95
96        #endregion
97
98        [PropertyInfo(Direction.InputData, "Input stream", "Input data to be hashed", "", true, false, DisplayLevel.Beginner, QuickWatchFormat.Hex, null)]
99        public CryptoolStream InputData
100        {
101            get 
102            {
103              if (inputData != null)
104              {
105                CryptoolStream cs = new CryptoolStream();
106                listCryptoolStreamsOut.Add(cs);
107                cs.OpenRead(inputData.FileName);
108                return cs;
109              }
110              return null;
111            }
112            set 
113            {
114              if (value != inputData)
115              {
116                inputData = value;
117              }             
118            }
119        }
120
121        [PropertyInfo(Direction.OutputData, "Hashed value", "Output data of the hashed value as Stream", "", true, false, DisplayLevel.Beginner, QuickWatchFormat.Hex, null)]
122        public CryptoolStream OutputDataStream
123        {
124            get
125            {
126                CryptoolStream outputDataStream = null;
127                if (outputData != null)
128                {
129                  outputDataStream = new CryptoolStream();
130                  outputDataStream.OpenRead(this.GetPluginInfoAttribute().Caption, outputData);
131                  listCryptoolStreamsOut.Add(outputDataStream);
132                }
133                return outputDataStream;
134            }
135            set { } //readonly
136        }
137
138        [PropertyInfo(Direction.OutputData, "Hashed value", "Output data of the hashed value as byte array", "", true, false, DisplayLevel.Beginner, QuickWatchFormat.Hex, null)]
139        public byte[] OutputData
140        {
141            get { return this.outputData; }
142            set
143            {
144              if (outputData != value)
145              {
146                this.outputData = value;
147                OnPropertyChanged("OutputData");
148                OnPropertyChanged("OutputDataStream");               
149              }
150            }
151        }
152
153        #region IPlugin Members
154
155        public void Dispose()
156        {
157          if (inputData != null)
158          {
159            inputData.Close();
160            inputData = null;
161          }
162          foreach (CryptoolStream cryptoolStream in listCryptoolStreamsOut)
163          {
164            cryptoolStream.Close();
165          }
166          listCryptoolStreamsOut.Clear();
167        }
168
169        public void Initialize()
170        {
171        }
172
173        public event StatusChangedEventHandler OnPluginStatusChanged;
174        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
175        public event PluginProgressChangedEventHandler OnPluginProgressChanged;
176
177        public System.Windows.Controls.UserControl Presentation
178        {
179          get { return null; }
180        }
181
182        public UserControl QuickWatchPresentation
183        {
184          get { return null; }
185        }
186
187        public void Stop()
188        {
189        }
190
191        public void PostExecution()
192        {
193          Dispose();
194        }
195
196        public void PreExecution()
197        {
198        }
199        #endregion
200
201        #region INotifyPropertyChanged Members
202
203        public event PropertyChangedEventHandler PropertyChanged;
204
205        public void OnPropertyChanged(string name)
206        {
207          EventsHelper.PropertyChanged(PropertyChanged, this, new PropertyChangedEventArgs(name));
208        }
209
210        #endregion
211
212        #region IHashAlgorithm Members
213
214        public FlowDocument DetailedDescription
215        {
216            get { return null; }
217        }
218
219        #endregion
220
221        private void Progress(double value, double max)
222        {
223          EventsHelper.ProgressChanged(OnPluginProgressChanged, this, new PluginProgressEventArgs(value, max));
224        }
225
226        private void GuiLogMessage(string message, NotificationLevel logLevel)
227        {
228          EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(message, this, logLevel));
229        }
230
231        #region IPlugin Members
232
233        public void Pause()
234        {
235         
236        }
237
238        #endregion
239    }
240}
Note: See TracBrowser for help on using the repository browser.