GeneralSubtree
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);
}
}
}