source: trunk/CrypPlugins/RIPEMD160/RIPEMD160.cs @ 1378

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

shortened license text to boilerplate notice in all source files

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