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

NameConstraints

using System; using System.Collections.Generic; namespace Org.BouncyCastle.Asn1.X509 { public class NameConstraints : Asn1Encodable { private readonly Asn1Sequence m_permitted; private readonly Asn1Sequence m_excluded; public Asn1Sequence PermittedSubtrees => m_permitted; public Asn1Sequence ExcludedSubtrees => m_excluded; public static NameConstraints GetInstance(object obj) { if (obj == null) return null; NameConstraints nameConstraints = obj as NameConstraints; if (nameConstraints != null) return nameConstraints; return new NameConstraints(Asn1Sequence.GetInstance(obj)); } public static NameConstraints GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new NameConstraints(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } public static NameConstraints GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new NameConstraints(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } [Obsolete("Use 'GetInstance' instead")] public NameConstraints(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 0 || count > 2) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_permitted = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, false, Asn1Sequence.GetTagged); m_excluded = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, false, Asn1Sequence.GetTagged); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } public NameConstraints(IList<GeneralSubtree> permitted, IList<GeneralSubtree> excluded) { m_permitted = CreateSequence(permitted); m_excluded = CreateSequence(excluded); } public NameConstraints(IReadOnlyCollection<GeneralSubtree> permitted, IReadOnlyCollection<GeneralSubtree> excluded) { m_permitted = CreateSequence(permitted); m_excluded = CreateSequence(excluded); } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(2); asn1EncodableVector.AddOptionalTagged(false, 0, m_permitted); asn1EncodableVector.AddOptionalTagged(false, 1, m_excluded); return new DerSequence(asn1EncodableVector); } private static DerSequence CreateSequence(IList<GeneralSubtree> subtrees) { if (subtrees != null) return DerSequence.FromVector(Asn1EncodableVector.FromEnumerable(subtrees)); return null; } private static DerSequence CreateSequence(IReadOnlyCollection<GeneralSubtree> subtrees) { if (subtrees != null) return DerSequence.FromCollection(subtrees); return null; } } }