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

GeneralSubtree

public class GeneralSubtree : Asn1Encodable
using Org.BouncyCastle.Math; using System; namespace Org.BouncyCastle.Asn1.X509 { public class GeneralSubtree : Asn1Encodable { private readonly GeneralName baseName; private readonly DerInteger minimum; private readonly DerInteger maximum; public GeneralName Base => baseName; public BigInteger Minimum { get { if (minimum != null) return minimum.Value; return BigInteger.Zero; } } public BigInteger Maximum { get { if (maximum != null) return maximum.Value; return null; } } private GeneralSubtree(Asn1Sequence seq) { baseName = GeneralName.GetInstance(seq[0]); int num; switch (seq.Count) { case 1: break; case 2: { Asn1TaggedObject instance3 = Asn1TaggedObject.GetInstance(seq[1]); num = instance3.TagNo; switch (num) { case 0: minimum = DerInteger.GetInstance(instance3, false); break; case 1: maximum = DerInteger.GetInstance(instance3, false); break; default: throw new ArgumentException("Bad tag number: " + instance3.TagNo.ToString()); } break; } case 3: { Asn1TaggedObject instance = Asn1TaggedObject.GetInstance(seq[1]); if (instance.TagNo != 0) { num = instance.TagNo; throw new ArgumentException("Bad tag number for 'minimum': " + num.ToString()); } minimum = DerInteger.GetInstance(instance, false); Asn1TaggedObject instance2 = Asn1TaggedObject.GetInstance(seq[2]); if (instance2.TagNo != 1) { num = instance2.TagNo; throw new ArgumentException("Bad tag number for 'maximum': " + num.ToString()); } maximum = DerInteger.GetInstance(instance2, false); break; } default: num = seq.Count; throw new ArgumentException("Bad sequence size: " + num.ToString()); } } public GeneralSubtree(GeneralName baseName, BigInteger minimum, BigInteger maximum) { this.baseName = baseName; if (minimum != null) this.minimum = new DerInteger(minimum); if (maximum != null) this.maximum = new DerInteger(maximum); } public GeneralSubtree(GeneralName baseName) : this(baseName, null, null) { } public static GeneralSubtree GetInstance(Asn1TaggedObject o, bool isExplicit) { return new GeneralSubtree(Asn1Sequence.GetInstance(o, isExplicit)); } public static GeneralSubtree GetInstance(object obj) { if (obj == null) return null; if (obj is GeneralSubtree) return (GeneralSubtree)obj; return new GeneralSubtree(Asn1Sequence.GetInstance(obj)); } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(baseName); if (minimum != null && !minimum.HasValue(0)) asn1EncodableVector.Add(new DerTaggedObject(false, 0, minimum)); asn1EncodableVector.AddOptionalTagged(false, 1, maximum); return new DerSequence(asn1EncodableVector); } } }