Beispiel #1
0
 public static void DisplayEKU(EKUs EKUs)
 {
     if (EKUs.Count > 0)
     {
         OID OID;
         OID = new OIDClass();
         foreach (EKU EKU in EKUs)
         {
             OID.Value = EKU.OID;
             Console.WriteLine("  " + OID.FriendlyName + " (" + OID.Value + ")");
         }
         OID = null;
     }
 }
Beispiel #2
0
        public static void DisplayCertificate(Certificate Certificate, String Title)
        {
            String[] KeySpecStrings = { "Unknown", "Exchange", "Signature" };
            String[] ProviderTypes  = { "Unknown",
                                        "PROV_RSA_FULL",
                                        "PROV_RSA_SIG",
                                        "PROV_DSS",
                                        "PROV_FORTEZZA",
                                        "PROV_MS_EXCHANGE",
                                        "PROV_SSL",
                                        "PROV_STT_MER",
                                        "PROV_STT_ACQ",
                                        "PROV_STT_BRND",
                                        "PROV_STT_ROOT",
                                        "PROV_STT_ISS",
                                        "PROV_RSA_SCHANNEL",
                                        "PROV_DSS_DH",
                                        "PROV_EC_ECDSA_SIG",
                                        "PROV_EC_ECNRA_SIG",
                                        "PROV_EC_ECDSA_FULL",
                                        "PROV_EC_ECNRA_FULL",
                                        "PROV_DH_SCHANNEL",
                                        "PROV_SPYRUS_LYNKS",
                                        "PROV_RNG",
                                        "PROV_INTEL_SEC",
                                        "PROV_REPLACE_OWF",
                                        "PROV_RSA_AES" };

            //int iIndex = 0;

            Console.WriteLine(Title);
            Console.WriteLine();
            Console.WriteLine("Subject Name:");
            Console.WriteLine("  Simple name = " + Certificate.SubjectName);
            Console.WriteLine("  Email name  = " + Certificate.GetInfo(CAPICOM_CERT_INFO_TYPE.CAPICOM_CERT_INFO_SUBJECT_EMAIL_NAME));
            Console.WriteLine("  UPN name    = " + Certificate.GetInfo(CAPICOM_CERT_INFO_TYPE.CAPICOM_CERT_INFO_SUBJECT_UPN));
            Console.WriteLine("  DNS name    = " + Certificate.GetInfo(CAPICOM_CERT_INFO_TYPE.CAPICOM_CERT_INFO_SUBJECT_DNS_NAME));
            Console.WriteLine();
            Console.WriteLine("Issuer Name: " + Certificate.IssuerName);
            Console.WriteLine();
            Console.WriteLine("Serial Number: " + Certificate.SerialNumber);
            Console.WriteLine();
            Console.WriteLine("Not Before: " + Certificate.ValidFromDate);
            Console.WriteLine();
            Console.WriteLine("Not After: " + Certificate.ValidToDate);
            Console.WriteLine();
            Console.WriteLine("SHA1 Hash: " + Certificate.Thumbprint);
            Console.WriteLine();
            Console.WriteLine("IsValid: " + Certificate.IsValid().Result);
            Console.WriteLine();
            Console.WriteLine("Archived: " + Certificate.Archived);
            Console.WriteLine();


            if (Certificate.BasicConstraints().IsPresent)
            {
                Console.WriteLine("Basic Constraints:");
                Console.WriteLine("  Critical          = " + Certificate.BasicConstraints().IsCritical);
                Console.WriteLine("  CA                = " + Certificate.BasicConstraints().IsCertificateAuthority);
                Console.WriteLine("  PathLenConstraint = ");
                if (Certificate.BasicConstraints().IsPathLenConstraintPresent)
                {
                    Console.WriteLine(Certificate.BasicConstraints().PathLenConstraint);
                }
                else
                {
                    Console.WriteLine("Not present.");
                }
            }
            else
            {
                Console.WriteLine("Basic Constraints: Not present.");
            }
            Console.WriteLine();

            if (Certificate.KeyUsage().IsPresent)
            {
                Console.WriteLine("Key Usage:");
                Console.WriteLine("  Critical                  = " + Certificate.KeyUsage().IsCritical);
                Console.WriteLine("  IsDigitalSignatureEnabled = " + Certificate.KeyUsage().IsDigitalSignatureEnabled);
                Console.WriteLine("  IsNonRepudiationEnabled   = " + Certificate.KeyUsage().IsNonRepudiationEnabled);
                Console.WriteLine("  IsKeyEnciphermentEnabled  = " + Certificate.KeyUsage().IsKeyEnciphermentEnabled);
                Console.WriteLine("  IsDataEnciphermentEnabled = " + Certificate.KeyUsage().IsDataEnciphermentEnabled);
                Console.WriteLine("  IsKeyAgreementEnabled     = " + Certificate.KeyUsage().IsKeyAgreementEnabled);
                Console.WriteLine("  IsKeyCertSignEnabled      = " + Certificate.KeyUsage().IsKeyCertSignEnabled);
                Console.WriteLine("  IsCRLSignEnabled          = " + Certificate.KeyUsage().IsCRLSignEnabled);
                Console.WriteLine("  IsEncipherOnlyEnabled     = " + Certificate.KeyUsage().IsEncipherOnlyEnabled);
                Console.WriteLine("  IsDecipherOnlyEnabled     = " + Certificate.KeyUsage().IsDecipherOnlyEnabled);
            }
            else
            {
                Console.WriteLine("Key Usage: Not present.");
            }
            Console.WriteLine();

            if (Certificate.ExtendedKeyUsage().IsPresent)
            {
                if (Certificate.ExtendedKeyUsage().EKUs.Count > 0)
                {
                    OID OID;
                    OID = new OIDClass();
                    Console.WriteLine("Extended Key Usage:");
                    Console.WriteLine("  Critical = " + Certificate.ExtendedKeyUsage().IsCritical);
                    foreach (EKU EKU in Certificate.ExtendedKeyUsage().EKUs)
                    {
                        OID.Value = EKU.OID;
                        Console.WriteLine("  " + OID.FriendlyName + " (" + OID.Value + ")");
                    }
                    OID = null;
                }
                else
                {
                    Console.WriteLine("Extended Key Usage: Not valid for any usage.");
                    Console.WriteLine("  Critical = " + Certificate.ExtendedKeyUsage().IsCritical);
                }
            }
            else
            {
                Console.WriteLine("Extended Key Usage: Not present (valid for all usages).");
            }
            Console.WriteLine();

            if (Certificate.Template().IsPresent)
            {
                Console.WriteLine("Template:");
                Console.WriteLine("  Critical = " + Certificate.Template().IsCritical);
                Console.WriteLine("  Name     = " + Certificate.Template().Name);
                Console.WriteLine("  OID      = " + Certificate.Template().OID.FriendlyName + "(" + Certificate.Template().OID.Value + ")");
                Console.WriteLine("  Major    = " + Certificate.Template().MajorVersion);
                Console.WriteLine("  Minor    = " + Certificate.Template().MinorVersion);
            }
            else
            {
                Console.WriteLine("Template: Not present.");
            }
            Console.WriteLine();

            Console.WriteLine("Public Key:");
            Console.WriteLine("  Algorithm  = " + Certificate.PublicKey().Algorithm.FriendlyName + "(" + Certificate.PublicKey().Algorithm.Value + ")");
            Console.WriteLine("  Length     = " + Certificate.PublicKey().Length + " bits");
            Console.WriteLine("  Key blob   = " + Certificate.PublicKey().EncodedKey.Format(true));
            Console.WriteLine("  Parameters = " + Certificate.PublicKey().EncodedParameters.Format(true));

            if (Certificate.HasPrivateKey())
            {
                Console.WriteLine("Private Key:");
                Console.WriteLine("  Container name   = " + Certificate.PrivateKey.ContainerName);
                //Don't display unique container name for hardware token because it may cause UI to be displayed.
                if (!Certificate.PrivateKey.IsHardwareDevice())
                {
                    Console.WriteLine("  Unique name      = " + Certificate.PrivateKey.UniqueContainerName);
                }
                Console.WriteLine("  Provider name    = " + Certificate.PrivateKey.ProviderName);
                Console.WriteLine("  Provider type    = ");
                if (Convert.ToInt32(Certificate.PrivateKey.ProviderType) > ProviderTypes.GetUpperBound(0))
                {
                    Console.WriteLine(ProviderTypes[0] + " (" + Convert.ToString(Certificate.PrivateKey.ProviderType) + ")");
                }
                else
                {
                    Console.WriteLine(ProviderTypes[Convert.ToInt32(Certificate.PrivateKey.ProviderType)] + " (" + Convert.ToString(Certificate.PrivateKey.ProviderType) + ")");
                }
                Console.WriteLine("  Key spec         = ");
                if (Convert.ToInt32(Certificate.PrivateKey.KeySpec) > KeySpecStrings.GetUpperBound(0))
                {
                    Console.WriteLine(KeySpecStrings[0] + " (" + Convert.ToString(Certificate.PrivateKey.KeySpec) + ")");
                }
                else
                {
                    Console.WriteLine(KeySpecStrings[Convert.ToInt32(Certificate.PrivateKey.KeySpec)] + " (" + Convert.ToString(Certificate.PrivateKey.KeySpec) + ")");
                }
                Console.WriteLine("  Accessible       = " + Certificate.PrivateKey.IsAccessible());
                Console.WriteLine("  Protected        = " + Certificate.PrivateKey.IsProtected());
                Console.WriteLine("  Exportable       = " + Certificate.PrivateKey.IsExportable());
                Console.WriteLine("  Removable        = " + Certificate.PrivateKey.IsRemovable());
                Console.WriteLine("  Machine keyset   = " + Certificate.PrivateKey.IsMachineKeyset());
                Console.WriteLine("  Hardware storage = " + Certificate.PrivateKey.IsHardwareDevice());
            }
            else
            {
                Console.WriteLine("Private Key: Not found.");
            }
            Console.WriteLine();

            if (true)
            {
                int iIndex = 0;

                foreach (Extension Extension in Certificate.Extensions())
                {
                    iIndex++;
                    Console.WriteLine("Extension #" + Convert.ToString(iIndex) + ": " + Extension.OID.FriendlyName + "(" + Extension.OID.Value + ")");
                    Console.WriteLine("  " + Extension.EncodedData.Format(true));

                    if (Extension.EncodedData.Decoder() != null)
                    {
                        switch (Extension.OID.Value)
                        {
                        case Constants.CAPICOM_CERT_POLICIES_OID:
                        {
                            CertificatePolicies CertPolicies;
                            int pIndex = 0;

                            CertPolicies = (CertificatePolicies)Extension.EncodedData.Decoder();
                            Console.WriteLine("Decoded Certificate Policies: " + Convert.ToString(CertPolicies.Count) + " PolicyInformation(s)");

                            foreach (PolicyInformation PolicyInformation in CertPolicies)
                            {
                                int qIndex = 0;
                                pIndex++;
                                Console.WriteLine("  PolicyInformation #" + Convert.ToString(pIndex) + ": " + Convert.ToString(PolicyInformation.Qualifiers.Count) + " Qualifier(s)");
                                Console.WriteLine("    OID = " + PolicyInformation.OID.FriendlyName + "(" + PolicyInformation.OID.Value + ")");


                                foreach (Qualifier Qualifier  in PolicyInformation.Qualifiers)
                                {
                                    qIndex++;
                                    Console.WriteLine("    Qualifier #" + Convert.ToString(qIndex) + ":");
                                    Console.WriteLine("      OID               = " + Qualifier.OID.FriendlyName + "(" + Qualifier.OID.Value + ")");
                                    Console.WriteLine("      CPS URI           = " + Qualifier.CPSPointer);
                                    Console.WriteLine("      Organization name = " + Qualifier.OrganizationName);
                                    Console.WriteLine("      Notice number(s)  = ");
                                    if (Qualifier.NoticeNumbers != null)
                                    {
                                        foreach (NoticeNumbers NoticeNumber in Qualifier.NoticeNumbers)
                                        {
                                            Console.WriteLine(Convert.ToString(NoticeNumber));
                                        }
                                    }
                                    Console.WriteLine();
                                    Console.WriteLine("      Explicit text     = " + Qualifier.ExplicitText);
                                }
                                Console.WriteLine();
                            }
                            break;
                        }
                        }
                    }
                }
                if (iIndex == 0)
                {
                    Console.WriteLine("Extension: None.");
                    Console.WriteLine();
                }

                iIndex = 0;
                foreach (ExtendedProperty ExtendedProperty in Certificate.ExtendedProperties())
                {
                    iIndex++;
                    Console.WriteLine("Property #" + Convert.ToString(iIndex) + " (ID = " + ExtendedProperty.PropID + "):");
                    Console.WriteLine("  " + ExtendedProperty.get_Value(CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64));
                }
                if (iIndex == 0)
                {
                    Console.WriteLine("Property: None.");
                    Console.WriteLine();
                }
            }
        }
Beispiel #3
0
 public static void DisplayEKU(EKUs EKUs)
 {
     if (EKUs.Count > 0)
     {
         OID OID;
         OID = new OIDClass();
         foreach (EKU EKU in EKUs)
         {
             OID.Value = EKU.OID;
             Console.WriteLine( "  " + OID.FriendlyName + " (" + OID.Value + ")" );
         }
         OID = null;
     }
 }
Beispiel #4
0
        public static void DisplayCertificate( Certificate Certificate , String Title)
        {
            String[] KeySpecStrings = {"Unknown", "Exchange","Signature" };
            String[] ProviderTypes = {	"Unknown",
                                         "PROV_RSA_FULL",
                                         "PROV_RSA_SIG",
                                         "PROV_DSS",
                                         "PROV_FORTEZZA",
                                         "PROV_MS_EXCHANGE",
                                         "PROV_SSL",
                                         "PROV_STT_MER",
                                         "PROV_STT_ACQ",
                                         "PROV_STT_BRND",
                                         "PROV_STT_ROOT",
                                         "PROV_STT_ISS",
                                         "PROV_RSA_SCHANNEL",
                                         "PROV_DSS_DH",
                                         "PROV_EC_ECDSA_SIG",
                                         "PROV_EC_ECNRA_SIG",
                                         "PROV_EC_ECDSA_FULL",
                                         "PROV_EC_ECNRA_FULL",
                                         "PROV_DH_SCHANNEL",
                                         "PROV_SPYRUS_LYNKS",
                                         "PROV_RNG",
                                         "PROV_INTEL_SEC",
                                         "PROV_REPLACE_OWF",
                                         "PROV_RSA_AES" };

            //int iIndex = 0;

            Console.WriteLine( Title );
            Console.WriteLine();
            Console.WriteLine( "Subject Name:");
            Console.WriteLine( "  Simple name = " + Certificate.SubjectName);
            Console.WriteLine( "  Email name  = " + Certificate.GetInfo(CAPICOM_CERT_INFO_TYPE.CAPICOM_CERT_INFO_SUBJECT_EMAIL_NAME));
            Console.WriteLine( "  UPN name    = " + Certificate.GetInfo(CAPICOM_CERT_INFO_TYPE.CAPICOM_CERT_INFO_SUBJECT_UPN));
            Console.WriteLine( "  DNS name    = " + Certificate.GetInfo(CAPICOM_CERT_INFO_TYPE.CAPICOM_CERT_INFO_SUBJECT_DNS_NAME));
            Console.WriteLine();
            Console.WriteLine( "Issuer Name: " + Certificate.IssuerName);
            Console.WriteLine();
            Console.WriteLine( "Serial Number: " + Certificate.SerialNumber);
            Console.WriteLine();
            Console.WriteLine( "Not Before: " + Certificate.ValidFromDate);
            Console.WriteLine();
            Console.WriteLine( "Not After: " + Certificate.ValidToDate);
            Console.WriteLine();
            Console.WriteLine( "SHA1 Hash: " + Certificate.Thumbprint);
            Console.WriteLine();
            Console.WriteLine( "IsValid: " + Certificate.IsValid().Result);
            Console.WriteLine();
            Console.WriteLine( "Archived: " + Certificate.Archived);
            Console.WriteLine();

            if (Certificate.BasicConstraints().IsPresent)
            {
                Console.WriteLine( "Basic Constraints:" );
                Console.WriteLine( "  Critical          = " + Certificate.BasicConstraints().IsCritical );
                Console.WriteLine( "  CA                = " + Certificate.BasicConstraints().IsCertificateAuthority );
                Console.WriteLine( "  PathLenConstraint = ");
                if (Certificate.BasicConstraints().IsPathLenConstraintPresent)
                {
                    Console.WriteLine( Certificate.BasicConstraints().PathLenConstraint);
                }
                else
                {
                    Console.WriteLine( "Not present.");
                }
            }
            else
            {
                Console.WriteLine( "Basic Constraints: Not present." );
            }
            Console.WriteLine();

            if (Certificate.KeyUsage().IsPresent)
            {
                Console.WriteLine( "Key Usage:");
                Console.WriteLine( "  Critical                  = " + Certificate.KeyUsage().IsCritical);
                Console.WriteLine( "  IsDigitalSignatureEnabled = " + Certificate.KeyUsage().IsDigitalSignatureEnabled );
                Console.WriteLine( "  IsNonRepudiationEnabled   = " + Certificate.KeyUsage().IsNonRepudiationEnabled);
                Console.WriteLine( "  IsKeyEnciphermentEnabled  = " + Certificate.KeyUsage().IsKeyEnciphermentEnabled);
                Console.WriteLine( "  IsDataEnciphermentEnabled = " + Certificate.KeyUsage().IsDataEnciphermentEnabled);
                Console.WriteLine( "  IsKeyAgreementEnabled     = " + Certificate.KeyUsage().IsKeyAgreementEnabled);
                Console.WriteLine( "  IsKeyCertSignEnabled      = " + Certificate.KeyUsage().IsKeyCertSignEnabled);
                Console.WriteLine( "  IsCRLSignEnabled          = " + Certificate.KeyUsage().IsCRLSignEnabled);
                Console.WriteLine( "  IsEncipherOnlyEnabled     = " + Certificate.KeyUsage().IsEncipherOnlyEnabled);
                Console.WriteLine( "  IsDecipherOnlyEnabled     = " + Certificate.KeyUsage().IsDecipherOnlyEnabled);
            }
            else
            {
                Console.WriteLine( "Key Usage: Not present.");

            }
            Console.WriteLine();

            if (Certificate.ExtendedKeyUsage().IsPresent)
            {
                if (Certificate.ExtendedKeyUsage().EKUs.Count > 0)
                {
                    OID OID;
                    OID = new OIDClass();
                    Console.WriteLine( "Extended Key Usage:");
                    Console.WriteLine( "  Critical = " + Certificate.ExtendedKeyUsage().IsCritical);
                    foreach (EKU EKU in Certificate.ExtendedKeyUsage().EKUs)
                    {
                        OID.Value = EKU.OID;
                        Console.WriteLine( "  " + OID.FriendlyName + " (" + OID.Value + ")" );
                    }
                    OID = null;
                }
                else
                {
                    Console.WriteLine( "Extended Key Usage: Not valid for any usage.");
                    Console.WriteLine( "  Critical = " + Certificate.ExtendedKeyUsage().IsCritical );
                }
            }
            else
            {
                Console.WriteLine( "Extended Key Usage: Not present (valid for all usages).");
            }
            Console.WriteLine();

            if (Certificate.Template().IsPresent)
            {
                Console.WriteLine( "Template:");
                Console.WriteLine( "  Critical = " + Certificate.Template().IsCritical);
                Console.WriteLine( "  Name     = " + Certificate.Template().Name);
                Console.WriteLine( "  OID      = " + Certificate.Template().OID.FriendlyName + "(" + Certificate.Template().OID.Value + ")");
                Console.WriteLine( "  Major    = " + Certificate.Template().MajorVersion);
                Console.WriteLine( "  Minor    = " + Certificate.Template().MinorVersion);
            }
            else
            {
                Console.WriteLine( "Template: Not present.");
            }
            Console.WriteLine();

            Console.WriteLine( "Public Key:");
            Console.WriteLine( "  Algorithm  = " + Certificate.PublicKey().Algorithm.FriendlyName + "(" + Certificate.PublicKey().Algorithm.Value + ")");
            Console.WriteLine( "  Length     = " + Certificate.PublicKey().Length + " bits");
            Console.WriteLine( "  Key blob   = " + Certificate.PublicKey().EncodedKey.Format(true));
            Console.WriteLine( "  Parameters = " + Certificate.PublicKey().EncodedParameters.Format(true));

            if (Certificate.HasPrivateKey())
            {
                Console.WriteLine( "Private Key:");
                Console.WriteLine( "  Container name   = " + Certificate.PrivateKey.ContainerName);
                //Don't display unique container name for hardware token because it may cause UI to be displayed.
                if (! Certificate.PrivateKey.IsHardwareDevice())
                {
                    Console.WriteLine( "  Unique name      = " + Certificate.PrivateKey.UniqueContainerName);
                }
                Console.WriteLine( "  Provider name    = " + Certificate.PrivateKey.ProviderName);
                Console.WriteLine(     "  Provider type    = " );
                if (Convert.ToInt32(Certificate.PrivateKey.ProviderType) > ProviderTypes.GetUpperBound(0))
                {
                    Console.WriteLine( ProviderTypes[0] + " (" + Convert.ToString(Certificate.PrivateKey.ProviderType) + ")");
                }
                else
                {
                    Console.WriteLine( ProviderTypes[Convert.ToInt32(Certificate.PrivateKey.ProviderType)] + " (" + Convert.ToString(Certificate.PrivateKey.ProviderType) + ")");
                }
                Console.WriteLine(     "  Key spec         = " );
                if (Convert.ToInt32(Certificate.PrivateKey.KeySpec) > KeySpecStrings.GetUpperBound(0))
                {
                    Console.WriteLine( KeySpecStrings[0] + " (" + Convert.ToString(Certificate.PrivateKey.KeySpec) + ")");
                }
                else
                {
                    Console.WriteLine( KeySpecStrings[Convert.ToInt32(Certificate.PrivateKey.KeySpec)] + " (" + Convert.ToString(Certificate.PrivateKey.KeySpec) + ")");
                }
                Console.WriteLine( "  Accessible       = " + Certificate.PrivateKey.IsAccessible());
                Console.WriteLine( "  Protected        = " + Certificate.PrivateKey.IsProtected());
                Console.WriteLine( "  Exportable       = " + Certificate.PrivateKey.IsExportable());
                Console.WriteLine( "  Removable        = " + Certificate.PrivateKey.IsRemovable());
                Console.WriteLine( "  Machine keyset   = " + Certificate.PrivateKey.IsMachineKeyset());
                Console.WriteLine( "  Hardware storage = " + Certificate.PrivateKey.IsHardwareDevice());
            }
            else
            {
                Console.WriteLine( "Private Key: Not found." );
            }
            Console.WriteLine();

            if (true)
            {
                int iIndex = 0;

                foreach (Extension Extension in Certificate.Extensions())
                {
                    iIndex++;
                    Console.WriteLine( "Extension #" + Convert.ToString(iIndex) + ": " + Extension.OID.FriendlyName + "(" + Extension.OID.Value + ")");
                    Console.WriteLine( "  " + Extension.EncodedData.Format(true));

                    if (Extension.EncodedData.Decoder() != null)
                    {
                        switch (Extension.OID.Value)
                        {
                            case Constants.CAPICOM_CERT_POLICIES_OID:
                            {
                                CertificatePolicies CertPolicies;
                                int pIndex = 0;

                                CertPolicies = (CertificatePolicies)Extension.EncodedData.Decoder();
                                Console.WriteLine( "Decoded Certificate Policies: " + Convert.ToString(CertPolicies.Count) + " PolicyInformation(s)");

                                foreach  (PolicyInformation PolicyInformation in CertPolicies)
                                {
                                    int qIndex = 0;
                                    pIndex++;
                                    Console.WriteLine( "  PolicyInformation #" + Convert.ToString(pIndex) + ": " + Convert.ToString(PolicyInformation.Qualifiers.Count) + " Qualifier(s)");
                                    Console.WriteLine( "    OID = " + PolicyInformation.OID.FriendlyName + "(" + PolicyInformation.OID.Value + ")");

                                    foreach (Qualifier Qualifier  in PolicyInformation.Qualifiers)
                                    {
                                        qIndex++;
                                        Console.WriteLine( "    Qualifier #" + Convert.ToString(qIndex) + ":");
                                        Console.WriteLine( "      OID               = " + Qualifier.OID.FriendlyName + "(" + Qualifier.OID.Value + ")");
                                        Console.WriteLine( "      CPS URI           = " + Qualifier.CPSPointer);
                                        Console.WriteLine( "      Organization name = " + Qualifier.OrganizationName);
                                        Console.WriteLine( "      Notice number(s)  = ");
                                        if (Qualifier.NoticeNumbers != null)
                                        {
                                            foreach (NoticeNumbers NoticeNumber in Qualifier.NoticeNumbers)
                                            {
                                                Console.WriteLine( Convert.ToString(NoticeNumber));
                                            }
                                        }
                                        Console.WriteLine();
                                        Console.WriteLine( "      Explicit text     = " + Qualifier.ExplicitText);
                                    }
                                    Console.WriteLine();
                                }
                                break;
                            }
                        }
                    }
                }
                if (iIndex == 0)
                {
                    Console.WriteLine( "Extension: None.");
                    Console.WriteLine();
                }

                iIndex = 0;
                foreach (ExtendedProperty ExtendedProperty in Certificate.ExtendedProperties())
                {
                    iIndex ++;
                    Console.WriteLine( "Property #" + Convert.ToString(iIndex) + " (ID = " + ExtendedProperty.PropID + "):" );
                    Console.WriteLine( "  " + ExtendedProperty.get_Value(CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64));
                }
                if (iIndex == 0)
                {
                    Console.WriteLine( "Property: None.");
                    Console.WriteLine();
                }

            }
        }