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

Holder

public class Holder : Asn1Encodable
using System; namespace Org.BouncyCastle.Asn1.X509 { public class Holder : Asn1Encodable { private readonly IssuerSerial m_baseCertificateID; private readonly GeneralNames m_entityName; private readonly ObjectDigestInfo m_objectDigestInfo; private readonly int m_version; public int Version => m_version; public IssuerSerial BaseCertificateID => m_baseCertificateID; public GeneralNames EntityName => m_entityName; public ObjectDigestInfo ObjectDigestInfo => m_objectDigestInfo; public static Holder GetInstance(object obj) { if (obj == null) return null; Holder holder = obj as Holder; if (holder != null) return holder; Asn1TaggedObject asn1TaggedObject = obj as Asn1TaggedObject; if (asn1TaggedObject != null) return new Holder(asn1TaggedObject); return new Holder(Asn1Sequence.GetInstance(obj)); } public static Holder GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new Holder(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } public static Holder GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new Holder(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } public Holder(Asn1TaggedObject tagObj) { switch (tagObj.TagNo) { case 0: m_baseCertificateID = IssuerSerial.GetInstance(tagObj, true); break; case 1: m_entityName = GeneralNames.GetInstance(tagObj, true); break; default: throw new ArgumentException("unknown tag in Holder"); } m_version = 0; } private Holder(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 0 || count > 3) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_baseCertificateID = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, false, IssuerSerial.GetTagged); m_entityName = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, false, GeneralNames.GetTagged); m_objectDigestInfo = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 2, false, ObjectDigestInfo.GetTagged); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); m_version = 1; } public Holder(IssuerSerial baseCertificateID) : this(baseCertificateID, 1) { } public Holder(IssuerSerial baseCertificateID, int version) { m_baseCertificateID = baseCertificateID; m_version = version; } public Holder(GeneralNames entityName) : this(entityName, 1) { } public Holder(GeneralNames entityName, int version) { m_entityName = entityName; m_version = version; } public Holder(ObjectDigestInfo objectDigestInfo) { m_objectDigestInfo = objectDigestInfo; m_version = 1; } public override Asn1Object ToAsn1Object() { if (m_version == 1) { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(3); asn1EncodableVector.AddOptionalTagged(false, 0, m_baseCertificateID); asn1EncodableVector.AddOptionalTagged(false, 1, m_entityName); asn1EncodableVector.AddOptionalTagged(false, 2, m_objectDigestInfo); return new DerSequence(asn1EncodableVector); } if (m_entityName != null) return new DerTaggedObject(true, 1, m_entityName); return new DerTaggedObject(true, 0, m_baseCertificateID); } } }