The Dsa Public Key
상속: Key, IVerifierKey
예제 #1
0
        /// <summary>
        /// Generates the key.
        /// </summary>
        /// <param name="size">The size.</param>
        protected override void GenerateKey(int size)
        {
            var paramgen = new DsaParametersGenerator();

            paramgen.Init(size, 100, Secure.Random);

            var keygen = new DsaKeyPairGenerator();

            keygen.Init(new DsaKeyGenerationParameters(Secure.Random, paramgen.GenerateParameters()));
            var pair = keygen.GenerateKeyPair();
            var priv = (DsaPrivateKeyParameters)pair.Private;

            X         = priv.X.ToSystemBigInteger();
            Size      = size;
            PublicKey = new DsaPublicKey();
            var pub = (DsaPublicKeyParameters)pair.Public;

            PublicKey.Y    = pub.Y.ToSystemBigInteger();
            PublicKey.G    = pub.Parameters.G.ToSystemBigInteger();
            PublicKey.P    = pub.Parameters.P.ToSystemBigInteger();
            PublicKey.Q    = pub.Parameters.Q.ToSystemBigInteger();
            PublicKey.Size = size;
        }
예제 #2
0
            /// <summary>
            /// Imports the X509 certificate.
            /// </summary>
            /// <param name="purpose">The purpose.</param>
            /// <param name="input">The input.</param>
            /// <returns></returns>
            public virtual ImportedKeySet X509Certificate(KeyPurpose purpose, Stream input)
            {
                var parser = new X509CertificateParser();
                var cert = parser.ReadCertificate(input);
                var bouncyKey = cert.GetPublicKey();

                Key key;
                if (bouncyKey is RsaKeyParameters)
                {
                    var keyParam = bouncyKey as RsaKeyParameters;
                    key = new RsaPublicKey
                              {
                                  Modulus = keyParam.Modulus.ToSystemBigInteger(),
                                  PublicExponent = keyParam.Exponent.ToSystemBigInteger(),
                                  Size = keyParam.Modulus.BitLength,
                              };
                }
                else if (bouncyKey is DsaPublicKeyParameters)
                {
                    var keyParam = bouncyKey as DsaPublicKeyParameters;
                    if (KeyPurpose.Encrypt == purpose)
                    {
                        throw new InvalidKeySetException("DSA key cannot be used for encryption!");
                    }
                    key = new DsaPublicKey
                              {
                                  Y = keyParam.Y.ToSystemBigInteger(),
                                  G = keyParam.Parameters.G.ToSystemBigInteger(),
                                  P = keyParam.Parameters.P.ToSystemBigInteger(),
                                  Q = keyParam.Parameters.Q.ToSystemBigInteger(),
                                  Size = keyParam.Parameters.P.BitLength
                              };
                }
                else
                {
                    throw new InvalidKeySetException("Unsupported key type!");
                }
                return new ImportedKeySet(key, purpose, "imported from certificate");
            }