source: trunk/CrypPlugins/PKCS1/Library/RsaKey.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: 4.3 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Org.BouncyCastle.Crypto;
6using Org.BouncyCastle.Math;
7using Org.BouncyCastle.Crypto.Generators;
8using Org.BouncyCastle.Crypto.Parameters;
9using Org.BouncyCastle.Security;
10
11namespace PKCS1.Library
12{
13    class RsaKey
14    {
15        #region Singleton
16
17        private static RsaKey m_Instance = null;
18        public static RsaKey Instance
19        {
20            get
21            {
22                if (m_Instance == null)
23                {
24                    m_Instance = new RsaKey();
25                }
26                return m_Instance;
27            }
28        }
29
30        private RsaKey()
31        {
32        }
33
34        #endregion
35
36        public event ParamChanged RaiseKeyGeneratedEvent;
37             
38        private AsymmetricCipherKeyPair keyPair = null;
39        private bool m_bRsaKeyGenerated = false;
40
41        private int m_RsaKeySize = 2048; // default
42        public int RsaKeySize
43        {
44            set 
45            {
46                this.m_RsaKeySize = (int)value;
47                OnRaiseKeyGenerated(ParameterChangeType.ModulusSize);
48            }
49            get { return this.m_RsaKeySize; }
50        }
51
52        private BigInteger m_Modulus = BigInteger.Zero;
53        public void setModulus(string value, int radix)
54        {
55            this.m_Modulus = new BigInteger(value,radix);
56            //this.m_RsaKeySize = this.m_Modulus.BitLength;
57        }
58
59        private BigInteger m_PrivKey = BigInteger.Zero;
60        public void setPrivKey(string value, int radix)
61        {
62            this.m_PrivKey = new BigInteger(value,radix);
63        }
64
65        private BigInteger m_PubExponent = BigInteger.ValueOf(3); // default
66        public int PubExponent //TODO ändern in String
67        {
68            set 
69            { 
70                this.m_PubExponent = BigInteger.ValueOf(value);
71                OnRaiseKeyGenerated(ParameterChangeType.PublicExponent);
72            }
73            get { return this.m_PubExponent.IntValue; }
74        }
75
76        public void setInputParams()
77        {
78            AsymmetricKeyParameter publicKey = new RsaKeyParameters(false, this.m_Modulus, this.m_PubExponent);
79            AsymmetricKeyParameter privateKey = new RsaKeyParameters(true, this.m_Modulus, this.m_PrivKey);
80            this.keyPair = new AsymmetricCipherKeyPair(publicKey, privateKey);
81
82            this.m_bRsaKeyGenerated = true;
83            OnRaiseKeyGenerated(ParameterChangeType.RsaKey);
84        }
85
86        // Rsa Schlüssel generieren       
87        public void genRsaKeyPair(int certainty)
88        {
89            BigInteger pubExp = BigInteger.ValueOf(this.PubExponent);
90            int strength = this.RsaKeySize;
91            RsaKeyPairGenerator fact = new RsaKeyPairGenerator();
92
93            RsaKeyGenerationParameters factParams = new RsaKeyGenerationParameters(pubExp, new SecureRandom(), strength, certainty);
94            fact.Init(factParams);
95
96            this.keyPair = fact.GenerateKeyPair();
97            this.m_bRsaKeyGenerated = true;
98            OnRaiseKeyGenerated(ParameterChangeType.RsaKey);
99        }
100
101        public bool isKeyGenerated()
102        {
103            return this.m_bRsaKeyGenerated;
104        }
105
106        private void OnRaiseKeyGenerated(ParameterChangeType type)
107        {
108            if (RaiseKeyGeneratedEvent != null)
109            {
110                RaiseKeyGeneratedEvent(type);
111            }
112        }
113
114
115        public AsymmetricKeyParameter getPrivKey()
116        {
117            return this.keyPair.Private;         
118        }
119
120        public BigInteger getPrivKeyToBigInt()
121        {
122            RsaKeyParameters privKeyParam = (RsaKeyParameters)this.getPrivKey();
123            return privKeyParam.Exponent;
124        }
125
126        public AsymmetricKeyParameter getPubKey()
127        {
128             return this.keyPair.Public;
129        }
130
131        public BigInteger getPubKeyToBigInt()
132        {
133            RsaKeyParameters pubKeyParam = (RsaKeyParameters)this.getPubKey();
134            return pubKeyParam.Exponent;
135        }
136
137        public BigInteger getModulusToBigInt()
138        {           
139            RsaKeyParameters pubkeyParam = (RsaKeyParameters)RsaKey.Instance.getPubKey();           
140            return pubkeyParam.Modulus;
141        }
142    }
143}
Note: See TracBrowser for help on using the repository browser.