static void DisplayCertificate (X509Certificate x509, bool machine, bool verbose)
{
Console.WriteLine ("{0}X.509 v{1} Certificate", (x509.IsSelfSigned ? "Self-signed " : String.Empty), x509.Version);
Console.WriteLine (" Serial Number: {0}", CryptoConvert.ToHex (x509.SerialNumber));
Console.WriteLine (" Issuer Name: {0}", x509.IssuerName);
Console.WriteLine (" Subject Name: {0}", x509.SubjectName);
Console.WriteLine (" Valid From: {0}", x509.ValidFrom);
Console.WriteLine (" Valid Until: {0}", x509.ValidUntil);
Console.WriteLine (" Unique Hash: {0}", CryptoConvert.ToHex (x509.Hash));
if (verbose) {
Console.WriteLine (" Key Algorithm: {0}", x509.KeyAlgorithm);
Console.WriteLine (" Algorithm Parameters: {0}", (x509.KeyAlgorithmParameters == null) ? "None" :
CryptoConvert.ToHex (x509.KeyAlgorithmParameters));
Console.WriteLine (" Public Key: {0}", CryptoConvert.ToHex (x509.PublicKey));
Console.WriteLine (" Signature Algorithm: {0}", x509.SignatureAlgorithm);
Console.WriteLine (" Algorithm Parameters: {0}", (x509.SignatureAlgorithmParameters == null) ? "None" :
CryptoConvert.ToHex (x509.SignatureAlgorithmParameters));
Console.WriteLine (" Signature: {0}", CryptoConvert.ToHex (x509.Signature));
RSACryptoServiceProvider rsaCsp = x509.RSA as RSACryptoServiceProvider;
RSAManaged rsaManaged = x509.RSA as RSAManaged;
Console.WriteLine (" Private Key: {0}", ((rsaCsp != null && !rsaCsp.PublicOnly)
|| (rsaManaged != null && !rsaManaged.PublicOnly)));
CspParameters cspParams = new CspParameters ();
cspParams.KeyContainerName = CryptoConvert.ToHex (x509.Hash);
cspParams.Flags = machine ? CspProviderFlags.UseMachineKeyStore : 0;
KeyPairPersistence kpp = new KeyPairPersistence (cspParams);
Console.WriteLine (" KeyPair Key: {0}", kpp.Load ());
}
Console.WriteLine ();
}