<PackageReference Include="BouncyCastle.Cryptography" Version="2.6.2" />

AttributeCertificateIssuer

using Org.BouncyCastle.Asn1; using Org.BouncyCastle.Asn1.X509; using Org.BouncyCastle.Utilities.Collections; using System; namespace Org.BouncyCastle.X509 { public class AttributeCertificateIssuer : ISelector<X509Certificate>, ICloneable { internal readonly Asn1Encodable form; public AttributeCertificateIssuer(AttCertIssuer issuer) { form = issuer.Issuer; } public AttributeCertificateIssuer(X509Name principal) { form = new V2Form(new GeneralNames(new GeneralName(principal))); } private object[] GetNames() { GeneralNames generalNames = (!(form is V2Form)) ? ((GeneralNames)form) : ((V2Form)form).IssuerName; GeneralName[] names = generalNames.GetNames(); int num = 0; for (int i = 0; i != names.Length; i++) { if (names[i].TagNo == 4) num++; } object[] array = new object[num]; int num2 = 0; for (int j = 0; j != names.Length; j++) { if (names[j].TagNo == 4) array[num2++] = X509Name.GetInstance(names[j].Name); } return array; } public X509Name[] GetPrincipals() { object[] names = GetNames(); int num = 0; for (int i = 0; i != names.Length; i++) { if (names[i] is X509Name) num++; } X509Name[] array = new X509Name[num]; int num2 = 0; for (int j = 0; j != names.Length; j++) { if (names[j] is X509Name) array[num2++] = (X509Name)names[j]; } return array; } private bool MatchesDN(X509Name subject, GeneralNames targets) { GeneralName[] names = targets.GetNames(); for (int i = 0; i != names.Length; i++) { GeneralName generalName = names[i]; if (generalName.TagNo == 4) try { if (X509Name.GetInstance(generalName.Name).Equivalent(subject)) return true; } catch (Exception) { } } return false; } public object Clone() { return new AttributeCertificateIssuer(AttCertIssuer.GetInstance(form)); } public bool Match(X509Certificate x509Cert) { if (x509Cert == null) return false; if (form is V2Form) { V2Form v2Form = (V2Form)form; if (v2Form.BaseCertificateID != null) { if (v2Form.BaseCertificateID.Serial.HasValue(x509Cert.SerialNumber)) return MatchesDN(x509Cert.IssuerDN, v2Form.BaseCertificateID.Issuer); return false; } return MatchesDN(x509Cert.SubjectDN, v2Form.IssuerName); } return MatchesDN(x509Cert.SubjectDN, (GeneralNames)form); } public override bool Equals(object obj) { if (obj == this) return true; AttributeCertificateIssuer attributeCertificateIssuer = obj as AttributeCertificateIssuer; if (attributeCertificateIssuer == null) return false; return form.Equals(attributeCertificateIssuer.form); } public override int GetHashCode() { return form.GetHashCode(); } } }