Org.BouncyCastle.OpenSsl.PemWriter.EncodePrivateKey C# (CSharp) Method

EncodePrivateKey() private method

private EncodePrivateKey ( AsymmetricKeyParameter akp, string &keyType ) : byte[]
akp Org.BouncyCastle.Crypto.AsymmetricKeyParameter
keyType string
return byte[]
		private byte[] EncodePrivateKey(
			AsymmetricKeyParameter	akp,
			out string				keyType)
		{
			PrivateKeyInfo info = PrivateKeyInfoFactory.CreatePrivateKeyInfo(akp);

			DerObjectIdentifier oid = info.AlgorithmID.ObjectID;

			if (oid.Equals(X9ObjectIdentifiers.IdDsa))
			{
				keyType = "DSA";

				DsaParameter p = DsaParameter.GetInstance(info.AlgorithmID.Parameters);

				BigInteger x = ((DsaPrivateKeyParameters) akp).X;
				BigInteger y = p.G.ModPow(x, p.P);

				// TODO Create an ASN1 object somewhere for this?
				return new DerSequence(
					new DerInteger(0),
					new DerInteger(p.P),
					new DerInteger(p.Q),
					new DerInteger(p.G),
					new DerInteger(y),
					new DerInteger(x)).GetEncoded();
			}

			if (oid.Equals(PkcsObjectIdentifiers.RsaEncryption))
			{
				keyType = "RSA";
				return info.PrivateKey.GetEncoded();
			}

			throw new ArgumentException("Cannot handle private key of type: " + akp.GetType().FullName, "akp");
		}