BasicConstraints
using Org.BouncyCastle.Math;
using System;
namespace Org.BouncyCastle.Asn1.X509
{
public class BasicConstraints : Asn1Encodable
{
private readonly DerBoolean m_cA;
private readonly DerInteger m_pathLenConstraint;
public BigInteger PathLenConstraint => m_pathLenConstraint?.Value;
public DerInteger PathLenConstraintInteger => m_pathLenConstraint;
public static BasicConstraints GetInstance(object obj)
{
if (obj == null)
return null;
BasicConstraints basicConstraints = obj as BasicConstraints;
if (basicConstraints != null)
return basicConstraints;
X509Extension x509Extension = obj as X509Extension;
if (x509Extension != null)
return GetInstance(X509Extension.ConvertValueToObject(x509Extension));
return new BasicConstraints(Asn1Sequence.GetInstance(obj));
}
public static BasicConstraints GetInstance(Asn1TaggedObject obj, bool explicitly)
{
return new BasicConstraints(Asn1Sequence.GetInstance(obj, explicitly));
}
public static BasicConstraints GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new BasicConstraints(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
}
public static BasicConstraints FromExtensions(X509Extensions extensions)
{
return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.BasicConstraints));
}
private BasicConstraints(Asn1Sequence seq)
{
int count = seq.Count;
int sequencePosition = 0;
if (count < 0 || count > 2)
throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
m_cA = (Asn1Utilities.ReadOptional(seq, ref sequencePosition, DerBoolean.GetOptional) ?? DerBoolean.False);
m_pathLenConstraint = Asn1Utilities.ReadOptional(seq, ref sequencePosition, DerInteger.GetOptional);
if (sequencePosition != count)
throw new ArgumentException("Unexpected elements in sequence", "seq");
}
public BasicConstraints(bool cA)
{
m_cA = (cA ? DerBoolean.True : DerBoolean.False);
m_pathLenConstraint = null;
}
public BasicConstraints(int pathLenConstraint)
{
m_cA = DerBoolean.True;
m_pathLenConstraint = new DerInteger(pathLenConstraint);
}
public bool IsCA()
{
return m_cA.IsTrue;
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(2);
if (m_cA.IsTrue)
asn1EncodableVector.Add(m_cA);
asn1EncodableVector.AddOptional(m_pathLenConstraint);
return new DerSequence(asn1EncodableVector);
}
public override string ToString()
{
bool flag;
if (m_pathLenConstraint == null) {
flag = IsCA();
return "BasicConstraints: isCa(" + flag.ToString() + ")";
}
flag = IsCA();
return "BasicConstraints: isCa(" + flag.ToString() + "), pathLenConstraint = " + m_pathLenConstraint.Value?.ToString();
}
}
}