source: trunk/PKCS1/WpfControls/SigVal/SigValControl.xaml.cs @ 1650

Last change on this file since 1650 was 1650, checked in by schomburg, 11 years ago

initial commit of PKCS1 Plugin

File size: 8.6 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Windows;
6using System.Windows.Controls;
7using System.Windows.Data;
8using System.Windows.Documents;
9using System.Windows.Input;
10using System.Windows.Media;
11using System.Windows.Media.Imaging;
12using System.Windows.Navigation;
13using System.Windows.Shapes;
14using Org.BouncyCastle.Crypto;
15using Org.BouncyCastle.Security;
16
17using PKCS1.Library;
18
19namespace PKCS1.WpfControls.SigVal
20{
21    /// <summary>
22    /// Interaktionslogik für SigVal.xaml
23    /// </summary>
24    public partial class SigValControl : UserControl, IPkcs1UserControl
25    {
26        private bool m_bValidateCorrect = true;
27        private RSAValidator validator = null;
28        Signature signature = null;
29
30        public SigValControl()
31        {
32            InitializeComponent();
33            Init();
34        }
35
36        #region IPkcs1UserControl Member
37
38        public void Dispose()
39        {
40        }
41
42        public void Init()
43        {
44            //TODO: doppeltes anmelden anders lösen?
45            SignatureHandler.getInstance().getSignature().RaiseSigGenEvent += handleSigGenEvent;
46            SignatureHandler.getInstance().getBleichenbSig().RaiseSigGenEvent += handleSigGenEvent;
47            SignatureHandler.getInstance().getKuehnSig().RaiseSigGenEvent += handleSigGenEvent;
48
49            this.rbVal.IsChecked = true;
50            this.validator = new RSAValidator();
51
52            this.rbSigBlei.IsEnabled = false;
53            this.rbSigBlei.Content = "Bleichenbacher Signatur (noch nicht generiert)";
54            this.rbSigPkcs.IsEnabled = false;
55            this.rbSigPkcs.Content = "PKCS#1-Signatur (noch nicht generiert)";
56            this.rbSigKuehn.IsEnabled = false;
57            this.rbSigKuehn.Content = "Kuehn Signatur (noch nicht generiert)";
58
59           
60            if (SignatureHandler.getInstance().isRsaSigGenerated() )
61            {
62                this.signature = (RSASignature)SignatureHandler.getInstance().getSignature();
63                this.setEnabled();
64                this.rbSigPkcs.IsEnabled = true;
65                this.rbSigPkcs.IsChecked = true;
66                this.rbSigPkcs.Content = "PKCS#1-Signatur";
67            }
68            else if (SignatureHandler.getInstance().isBleichenbSigGenerated())
69            {
70                this.signature = (BleichenbacherSignature)SignatureHandler.getInstance().getBleichenbSig();
71                this.setEnabled();
72                this.rbSigBlei.IsEnabled = true;
73                this.rbSigBlei.IsChecked = true;
74                this.rbSigBlei.Content = "Bleichenbacher Signatur";
75            }
76            else if (SignatureHandler.getInstance().isKuehnSigGenerated())
77            {
78                this.signature = (KuehnSignature)SignatureHandler.getInstance().getKuehnSig();
79                this.setEnabled();
80                this.rbSigKuehn.IsEnabled = true;
81                this.rbSigKuehn.IsChecked = true;
82                this.rbSigKuehn.Content = "Kuehn Signatur";
83            }
84            else
85            {
86                this.setDisabled();
87            }
88        }
89
90        private void handleSigGenEvent(SignatureType type)
91        {
92            if (type == SignatureType.Pkcs1)
93            {
94                this.signature = (RSASignature)SignatureHandler.getInstance().getSignature();
95                this.setEnabled();
96                this.rbSigPkcs.IsEnabled = true;
97                this.rbSigPkcs.IsChecked = true;
98                this.rbSigPkcs.Content = "PKCS#1-Signatur";
99                this.ResultEmpty();
100            }
101            else if (type == SignatureType.Bleichenbacher)
102            {
103                this.signature = (BleichenbacherSignature)SignatureHandler.getInstance().getBleichenbSig();
104                this.setEnabled();
105                this.rbSigBlei.IsEnabled = true;
106                this.rbSigBlei.IsChecked = true;
107                this.rbSigBlei.Content = "Bleichenbacher Signatur";
108                this.ResultEmpty();
109            }
110            else if (type == SignatureType.Kuehn)
111            {
112                this.signature = (KuehnSignature)SignatureHandler.getInstance().getKuehnSig();
113                this.setEnabled();
114                this.rbSigKuehn.IsEnabled = true;
115                this.rbSigKuehn.IsChecked = true;
116                this.rbSigKuehn.Content = "Kuehn Signatur";
117                this.ResultEmpty();
118            }
119        }
120
121        private void setDisabled()
122        {
123            this.tbSignatureDec.Text = "keine Signatur generiert. Bitte generieren Sie zuerst eine Signatur";
124            this.tbSignatureEnc.Text = "keine Signatur generiert. Bitte generieren Sie zuerst eine Signatur";
125
126            this.bValidate.IsEnabled = false;
127            this.rbVal.IsEnabled = false;
128            this.rbValWithFlaw.IsEnabled = false;
129        }
130
131        private void setEnabled()
132        {
133            this.tbSignatureDec.Text = this.signature.GetSignatureDecToHexString();
134            this.tbSignatureEnc.Text = this.signature.GetSignatureToHexString();
135
136            this.bValidate.IsEnabled = true;
137            this.rbVal.IsEnabled = true;
138            this.rbValWithFlaw.IsEnabled = true;
139        }
140
141        public void SetTab(int i)
142        {
143        }
144
145        #endregion
146
147        private void bValidate_Click(object sender, RoutedEventArgs e)
148        {           
149            if (this.m_bValidateCorrect == true)
150            {
151                if (this.validator.verifyRsaSignature(Datablock.getInstance().Message, signature.GetSignature()))
152                {
153                    this.ResultValid();
154                 }
155                else
156                {
157                    this.ResultNotValid();
158                }
159            }
160            else if( this.m_bValidateCorrect == false )
161            {
162                if (this.validator.verifyRsaSignatureWithFlaw(Datablock.getInstance().Message, signature.GetSignature()))
163                {
164                    this.ResultValid();
165                }
166                else
167                {
168                    this.ResultNotValid();
169                }
170            }
171        }
172
173        private void rbVal_Checked(object sender, RoutedEventArgs e)
174        {
175            // korrekte Implementierung der Validierung
176            this.m_bValidateCorrect = true;
177            this.ResultEmpty();
178        }
179
180        private void rbValWithFlaw_Checked(object sender, RoutedEventArgs e)
181        {
182            // fehlerhafte Implementierung der Validierung
183            this.m_bValidateCorrect = false;
184            this.ResultEmpty();
185        }
186
187        private void ResultValid()
188        {
189            this.lblResult.Content = "Signatur valide";
190            this.imgResult.Source = new BitmapImage(new Uri("../../Resources/icons/equal.png", UriKind.Relative));
191            this.imgResult.Visibility = Visibility.Visible;
192            this.lblHashAlgo.Content = "Erkannter Hashalgorithmus: " + this.validator.getHashFunctionName();
193        }
194
195        private void ResultNotValid()
196        {
197            this.lblResult.Content = "Signatur nicht valide";
198            this.imgResult.Source = new BitmapImage(new Uri("../../Resources/icons/unequal.png", UriKind.Relative));
199            this.imgResult.Visibility = Visibility.Visible;
200            if (this.validator.getHashFunctionName() != String.Empty)
201            {
202                this.lblHashAlgo.Content = "Erkannter Hashalgorithmus: " + this.validator.getHashFunctionName();
203            }
204            else
205            {
206                this.lblHashAlgo.Content = " Hashalgorithmus: nicht auslesbar";
207            }
208        }
209
210        private void ResultEmpty()
211        {
212            this.lblResult.Content = String.Empty;
213            this.imgResult.Visibility = Visibility.Hidden;
214            this.lblHashAlgo.Content = String.Empty;
215        }
216
217        private void rbSigPkcs_Checked(object sender, RoutedEventArgs e)
218        {
219            this.ResultEmpty();
220            this.signature = (RSASignature)SignatureHandler.getInstance().getSignature();
221            this.setEnabled();
222        }
223
224        private void rbSigBlei_Checked(object sender, RoutedEventArgs e)
225        {
226            this.ResultEmpty();
227            this.signature = (BleichenbacherSignature)SignatureHandler.getInstance().getBleichenbSig();
228            this.setEnabled();
229        }
230
231        private void rbSigKuehn_Checked(object sender, RoutedEventArgs e)
232        {
233            this.ResultEmpty();
234            this.signature = (KuehnSignature)SignatureHandler.getInstance().getKuehnSig();
235            this.setEnabled();
236        }
237    }
238}
Note: See TracBrowser for help on using the repository browser.