source: trunk/PKCS1/Library/RSAKeyManager.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: 3.4 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 RSAKeyManager
14    {
15        #region Singleton
16        // Singleton
17        //
18        private static RSAKeyManager instance = null;
19
20        public static RSAKeyManager getInstance()
21        {
22            if (instance == null) { instance = new RSAKeyManager(); }
23            return instance;
24        }
25
26        private RSAKeyManager()
27        {
28        }
29        //
30        // end Singleton
31        #endregion
32
33        public event ParamChanged RaiseKeyGeneratedEvent;
34             
35        private AsymmetricCipherKeyPair keyPair = null;
36        private bool m_bRsaKeyGenerated = false;
37
38        private int m_RsaKeySize = 2048; // default
39        public int RsaKeySize
40        {
41            set 
42            { 
43                this.m_RsaKeySize = (int)value;
44                OnRaiseKeyGenerated(ParameterChangeType.ModulusSize);
45            } // TODO validieren; welche Werte zulässig?
46            get { return this.m_RsaKeySize; }
47        }
48
49        private BigInteger m_PubExponent = BigInteger.ValueOf(3); // default
50        public int PubExponent
51        {
52            set 
53            { 
54                this.m_PubExponent = BigInteger.ValueOf(value);
55                OnRaiseKeyGenerated(ParameterChangeType.PublicExponent);
56            }
57            get { return this.m_PubExponent.IntValue; }
58        }
59
60        // Rsa Schlüssel generieren       
61        public void genRsaKeyPair(int certainty)
62        {
63            BigInteger pubExp = BigInteger.ValueOf(this.PubExponent);
64            int strength = this.RsaKeySize;
65            RsaKeyPairGenerator fact = new RsaKeyPairGenerator();
66
67            RsaKeyGenerationParameters factParams = new RsaKeyGenerationParameters(pubExp, new SecureRandom(), strength, certainty);
68            fact.Init(factParams);
69
70            this.keyPair = fact.GenerateKeyPair();
71            this.m_bRsaKeyGenerated = true;
72            OnRaiseKeyGenerated(ParameterChangeType.RsaKey);
73        }
74
75        public bool isKeyGenerated()
76        {
77            return this.m_bRsaKeyGenerated;
78        }
79
80        private void OnRaiseKeyGenerated(ParameterChangeType type)
81        {
82            if (RaiseKeyGeneratedEvent != null)
83            {
84                RaiseKeyGeneratedEvent(type);
85            }
86        }
87
88
89        public AsymmetricKeyParameter getPrivKey()
90        {
91            return this.keyPair.Private;         
92        }
93
94        public BigInteger getPrivKeyToBigInt()
95        {
96            RsaKeyParameters privKeyParam = (RsaKeyParameters)this.getPrivKey();
97            return privKeyParam.Exponent;
98        }
99
100        public AsymmetricKeyParameter getPubKey()
101        {
102            return this.keyPair.Public;
103        }
104
105        public BigInteger getPubKeyToBigInt()
106        {
107            RsaKeyParameters pubKeyParam = (RsaKeyParameters)this.getPubKey();
108            return pubKeyParam.Exponent;
109        }
110
111        public BigInteger getModulusToBigInt()
112        {           
113            RsaKeyParameters pubkeyParam = (RsaKeyParameters)RSAKeyManager.getInstance().getPubKey();           
114            return pubkeyParam.Modulus;
115        }
116
117    }
118}
Note: See TracBrowser for help on using the repository browser.