コード例 #1
0
        public static IReadOnlyList <string> GetNameInfo(this X509Certificate2 certificate, string nameTypeOid, X509NameSource nameSource)
        {
            ThrowHelpers.CheckNullOrEempty(nameof(nameTypeOid), nameTypeOid);

            byte[] nameBytes = nameSource switch
            {
                X509NameSource.Issuer => certificate.IssuerName.RawData,
                X509NameSource.Subject => certificate.SubjectName.RawData,
                _ => ThrowHelpers.NotSupport <byte[], X509NameSource>(nameSource)
            };

            List <string> result = new List <string>();

            AsnReader nameReader   = new AsnReader(nameBytes, AsnEncodingRules.DER);
            AsnReader mainSequence = nameReader.ReadSequence();

            while (mainSequence.HasData)
            {
                AsnReader x509Name = mainSequence.ReadSetOf().ReadSequence();
                string    oid      = x509Name.ReadObjectIdentifierAsString();
                if (string.Equals(nameTypeOid, oid, StringComparison.Ordinal))
                {
                    result.Add(x509Name.GetCharacterString(UniversalTagNumber.PrintableString));
                }
            }

            return(result);
        }
    }
コード例 #2
0
 public static IReadOnlyList <string> GetNameInfo(this X509Certificate2 certificate, string nameTypeOid, X509NameSource nameSource)
 {
     ThrowHelpers.CheckNullOrEempty(nameof(nameTypeOid), nameTypeOid);
     return(GetNameInfo(certificate, nameTypeOid, nameSource == X509NameSource.Issuer));
 }