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

LinkedCertificate

using Org.BouncyCastle.Asn1.X509; using System; namespace Org.BouncyCastle.Asn1.BC { public class LinkedCertificate : Asn1Encodable { private readonly DigestInfo mDigest; private readonly GeneralName mCertLocation; private X509Name mCertIssuer; private GeneralNames mCACerts; public virtual DigestInfo Digest => mDigest; public virtual GeneralName CertLocation => mCertLocation; public virtual X509Name CertIssuer => mCertIssuer; public virtual GeneralNames CACerts => mCACerts; public LinkedCertificate(DigestInfo digest, GeneralName certLocation) : this(digest, certLocation, null, null) { } public LinkedCertificate(DigestInfo digest, GeneralName certLocation, X509Name certIssuer, GeneralNames caCerts) { mDigest = digest; mCertLocation = certLocation; mCertIssuer = certIssuer; mCACerts = caCerts; } private LinkedCertificate(Asn1Sequence seq) { mDigest = DigestInfo.GetInstance(seq[0]); mCertLocation = GeneralName.GetInstance(seq[1]); for (int i = 2; i < seq.Count; i++) { Asn1TaggedObject instance = Asn1TaggedObject.GetInstance(seq[i]); switch (instance.TagNo) { case 0: mCertIssuer = X509Name.GetInstance(instance, false); break; case 1: mCACerts = GeneralNames.GetInstance(instance, false); break; default: throw new ArgumentException("unknown tag in tagged field"); } } } public static LinkedCertificate GetInstance(object obj) { if (obj is LinkedCertificate) return (LinkedCertificate)obj; if (obj != null) return new LinkedCertificate(Asn1Sequence.GetInstance(obj)); return null; } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(mDigest, mCertLocation); asn1EncodableVector.AddOptionalTagged(false, 0, mCertIssuer); asn1EncodableVector.AddOptionalTagged(false, 1, mCACerts); return new DerSequence(asn1EncodableVector); } } }