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

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