source: trunk/CrypPlugins/PKCS1/WpfControls/Components/KeyInputControl.xaml.cs @ 1893

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

added possibility to enter a RSA-Key manually

File size: 6.2 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 System.Globalization;
15using System.Text.RegularExpressions;
16using PKCS1.WpfResources;
17using PKCS1.Resources.lang.Gui;
18using PKCS1.Library;
19using Org.BouncyCastle.Math;
20
21namespace PKCS1.WpfControls.Components
22{
23    /// <summary>
24    /// Interaction logic for KeyInputControl.xaml
25    /// </summary>
26    public partial class KeyInputControl : UserControl, IPkcs1UserControl
27    {
28        private bool m_bPrivKeyValid = false;
29        private bool m_bModulusValid = false;
30        private int m_radixModulus = 16;
31        private int m_radixPrivKey = 16;
32
33        private enum ParameterName
34        {
35            PrivKey,
36            PubKey,
37            Modulus
38        }
39
40        public KeyInputControl()
41        {
42            InitializeComponent();
43            this.btnValInput.IsEnabled = false;
44            this.btnPrivKeyHexadec.IsChecked = true;
45            this.btnModHexadec.IsChecked = true;
46        }
47
48        private void tbPubKey_TextChanged(object sender, TextChangedEventArgs e)
49        {
50            /*
51            per Binding an RsaKey gebunden; zulässiger Eingabebereich wird per .xaml gesteuert
52             */
53        }
54
55        private void tbPrivKey_TextChanged(object sender, TextChangedEventArgs e)
56        {
57            this.m_bPrivKeyValid = this.checkInputTextBox(tbPrivKey.Text, this.m_radixPrivKey, lblErrorPrivKey, ParameterName.PrivKey);
58            this.testAndEnableButton();
59        }
60
61        private void tbModulus_TextChanged(object sender, TextChangedEventArgs e)
62        {
63            this.m_bModulusValid = this.checkInputTextBox(tbModulus.Text, this.m_radixModulus, lblErrorModulus, ParameterName.Modulus);
64            this.testAndEnableButton();           
65        }
66
67        private bool checkInputTextBox(string inputText, int radix, Label outputLabel, ParameterName paramName)
68        {
69            if (inputText != string.Empty)
70            {
71                if (isInputInRightFormat(inputText, radix))
72                {
73                    BigInteger tmp = new BigInteger(inputText, radix);
74
75                    if (tmp.BitLength > Convert.ToInt32(tbKeyLength.Text))
76                    {
77                        outputLabel.Content = RsaKeyInputCtrl.errorBitLengthShorter;
78                        return false;
79                    }
80                    else
81                    {
82                        if (paramName == ParameterName.PrivKey) { RsaKey.Instance.setPrivKey(inputText, radix); }
83                        if (paramName == ParameterName.Modulus) { RsaKey.Instance.setModulus(inputText, radix); }
84                        outputLabel.Content = string.Empty;
85                        return true;
86                    }
87                }
88                else
89                {
90                    outputLabel.Content = RsaKeyInputCtrl.errorValidSignsOnly;
91                    return false;
92                }
93            }
94            else
95            {
96                outputLabel.Content = RsaKeyInputCtrl.errorInsertNumber;
97                return false;
98            }
99            return false;
100        }
101
102        #region IPkcs1UserControl Member
103
104        void IPkcs1UserControl.Dispose()
105        {
106            //throw new NotImplementedException();
107        }
108
109        void IPkcs1UserControl.Init()
110        {
111            //throw new NotImplementedException();
112        }
113
114        void IPkcs1UserControl.SetTab(int i)
115        {
116            //throw new NotImplementedException();
117        }
118
119        #endregion
120
121        private void btnValInput_Click(object sender, RoutedEventArgs e)
122        {         
123            RsaKey.Instance.setInputParams();
124        }
125
126        private bool isInputInRightFormat(string input, int radix)
127        {
128            if (10 == radix)
129            {
130                Match invalid_chars = Regex.Match(input, "[^0-9]");
131                return !invalid_chars.Success;
132            }
133            else if (16 == radix)
134            {
135                Match invalid_chars = Regex.Match(input, "[^0-9a-fA-F]");
136                return !invalid_chars.Success;
137            }
138            return false;
139        }
140
141        private void testAndEnableButton()
142        {
143            if (this.m_bModulusValid &&
144                this.m_bPrivKeyValid &&
145                tbPubKey.Text != string.Empty)
146            {
147                this.btnValInput.IsEnabled = true;
148                this.lblResult.Content = string.Empty;
149            }
150            else
151            {
152                this.btnValInput.IsEnabled = false;
153            }
154        }
155
156        private void btnDecimal_Click(object sender, RoutedEventArgs e)
157        {
158            if (sender == btnModDecimal)
159            {
160                this.m_radixModulus = 10;
161                this.m_bModulusValid = this.checkInputTextBox(tbModulus.Text, this.m_radixModulus, lblErrorModulus, ParameterName.Modulus);
162            }
163            else if (sender == btnPrivKeyDecimal)
164            {
165                this.m_radixPrivKey = 10;
166                this.m_bPrivKeyValid = this.checkInputTextBox(tbPrivKey.Text, this.m_radixPrivKey, lblErrorPrivKey, ParameterName.PrivKey);
167            }
168            this.testAndEnableButton();
169        }
170
171        private void btnHexadec_Click(object sender, RoutedEventArgs e)
172        {
173            if (sender == btnModHexadec)
174            {
175                this.m_radixModulus = 16;
176                this.m_bModulusValid = this.checkInputTextBox(tbModulus.Text, this.m_radixModulus, lblErrorModulus, ParameterName.Modulus);
177            }
178            else if (sender == btnPrivKeyHexadec)
179            {
180                this.m_radixPrivKey = 16;
181                this.m_bPrivKeyValid = this.checkInputTextBox(tbPrivKey.Text, this.m_radixPrivKey, lblErrorPrivKey, ParameterName.PrivKey);
182            }
183            this.testAndEnableButton();
184        }
185    }
186}
Note: See TracBrowser for help on using the repository browser.