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

PkixAttrCertPathValidator

using Org.BouncyCastle.X509; using Org.BouncyCastle.X509.Store; using System; namespace Org.BouncyCastle.Pkix { public class PkixAttrCertPathValidator { public virtual PkixCertPathValidatorResult Validate(PkixCertPath certPath, PkixParameters pkixParams) { X509AttrCertStoreSelector obj = pkixParams.GetTargetConstraintsAttrCert() as X509AttrCertStoreSelector; if (obj == null) throw new ArgumentException("TargetConstraints must be an instance of " + typeof(X509AttrCertStoreSelector).FullName, "pkixParams"); X509V2AttributeCertificate attributeCert = obj.AttributeCert; PkixCertPath holderCertPath = Rfc3281CertPathUtilities.ProcessAttrCert1(attributeCert, pkixParams); PkixCertPathValidatorResult result = Rfc3281CertPathUtilities.ProcessAttrCert2(certPath, pkixParams); X509Certificate x509Certificate = certPath.Certificates[0]; Rfc3281CertPathUtilities.ProcessAttrCert3(x509Certificate, pkixParams); Rfc3281CertPathUtilities.ProcessAttrCert4(x509Certificate, pkixParams); Rfc3281CertPathUtilities.ProcessAttrCert5(attributeCert, pkixParams); Rfc3281CertPathUtilities.ProcessAttrCert7(attributeCert, certPath, holderCertPath, pkixParams); Rfc3281CertPathUtilities.AdditionalChecks(attributeCert, pkixParams); DateTime validCertDateFromValidityModel; try { validCertDateFromValidityModel = PkixCertPathValidatorUtilities.GetValidCertDateFromValidityModel(pkixParams, null, -1); } catch (Exception innerException) { throw new PkixCertPathValidatorException("Could not get validity date from attribute certificate.", innerException); } Rfc3281CertPathUtilities.CheckCrls(attributeCert, pkixParams, x509Certificate, validCertDateFromValidityModel, certPath.Certificates); return result; } } }