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

LinkedCertificate

using Org.BouncyCastle.Asn1.X509; using System; namespace Org.BouncyCastle.Asn1.BC { public class LinkedCertificate : Asn1Encodable { private readonly DigestInfo m_digest; private readonly GeneralName m_certLocation; private readonly X509Name m_certIssuer; private readonly GeneralNames m_cACerts; public virtual DigestInfo Digest => m_digest; public virtual GeneralName CertLocation => m_certLocation; public virtual X509Name CertIssuer => m_certIssuer; public virtual GeneralNames CACerts => m_cACerts; public static LinkedCertificate GetInstance(object obj) { if (obj == null) return null; LinkedCertificate linkedCertificate = obj as LinkedCertificate; if (linkedCertificate != null) return linkedCertificate; return new LinkedCertificate(Asn1Sequence.GetInstance(obj)); } public static LinkedCertificate GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new LinkedCertificate(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } public static LinkedCertificate GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new LinkedCertificate(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } public LinkedCertificate(DigestInfo digest, GeneralName certLocation) : this(digest, certLocation, null, null) { } public LinkedCertificate(DigestInfo digest, GeneralName certLocation, X509Name certIssuer, GeneralNames caCerts) { if (digest == null) throw new ArgumentNullException("digest"); m_digest = digest; if (certLocation == null) throw new ArgumentNullException("certLocation"); m_certLocation = certLocation; m_certIssuer = certIssuer; m_cACerts = caCerts; } private LinkedCertificate(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 2 || count > 4) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_digest = DigestInfo.GetInstance(seq[sequencePosition++]); m_certLocation = GeneralName.GetInstance(seq[sequencePosition++]); m_certIssuer = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, false, X509Name.GetTagged); m_cACerts = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, false, GeneralNames.GetTagged); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(4); asn1EncodableVector.Add(m_digest, m_certLocation); asn1EncodableVector.AddOptionalTagged(false, 0, m_certIssuer); asn1EncodableVector.AddOptionalTagged(false, 1, m_cACerts); return new DerSequence(asn1EncodableVector); } } }