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

Holder

public class Holder : Asn1Encodable
using Org.BouncyCastle.Utilities; using System; namespace Org.BouncyCastle.Asn1.X509 { public class Holder : Asn1Encodable { internal readonly IssuerSerial baseCertificateID; internal readonly GeneralNames entityName; internal readonly ObjectDigestInfo objectDigestInfo; private readonly int version; public int Version => version; public IssuerSerial BaseCertificateID => baseCertificateID; public GeneralNames EntityName => entityName; public ObjectDigestInfo ObjectDigestInfo => objectDigestInfo; public static Holder GetInstance(object obj) { Holder holder = obj as Holder; if (holder != null) return holder; Asn1Sequence asn1Sequence = obj as Asn1Sequence; if (asn1Sequence != null) return new Holder(asn1Sequence); Asn1TaggedObject asn1TaggedObject = obj as Asn1TaggedObject; if (asn1TaggedObject != null) return new Holder(asn1TaggedObject); throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), "obj"); } public Holder(Asn1TaggedObject tagObj) { switch (tagObj.TagNo) { case 0: baseCertificateID = IssuerSerial.GetInstance(tagObj, true); break; case 1: entityName = GeneralNames.GetInstance(tagObj, true); break; default: throw new ArgumentException("unknown tag in Holder"); } version = 0; } private Holder(Asn1Sequence seq) { int num; if (seq.Count > 3) { num = seq.Count; throw new ArgumentException("Bad sequence size: " + num.ToString()); } for (int i = 0; i != seq.Count; i++) { Asn1TaggedObject instance = Asn1TaggedObject.GetInstance(seq[i]); num = instance.TagNo; switch (num) { case 0: baseCertificateID = IssuerSerial.GetInstance(instance, false); break; case 1: entityName = GeneralNames.GetInstance(instance, false); break; case 2: objectDigestInfo = ObjectDigestInfo.GetInstance(instance, false); break; default: throw new ArgumentException("unknown tag in Holder"); } } version = 1; } public Holder(IssuerSerial baseCertificateID) : this(baseCertificateID, 1) { } public Holder(IssuerSerial baseCertificateID, int version) { this.baseCertificateID = baseCertificateID; this.version = version; } public Holder(GeneralNames entityName) : this(entityName, 1) { } public Holder(GeneralNames entityName, int version) { this.entityName = entityName; this.version = version; } public Holder(ObjectDigestInfo objectDigestInfo) { this.objectDigestInfo = objectDigestInfo; version = 1; } public override Asn1Object ToAsn1Object() { if (version == 1) { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(3); asn1EncodableVector.AddOptionalTagged(false, 0, baseCertificateID); asn1EncodableVector.AddOptionalTagged(false, 1, entityName); asn1EncodableVector.AddOptionalTagged(false, 2, objectDigestInfo); return new DerSequence(asn1EncodableVector); } if (entityName != null) return new DerTaggedObject(true, 1, entityName); return new DerTaggedObject(true, 0, baseCertificateID); } } }