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 GetInstance(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
}
[Obsolete("Use 'GetInstance' instead")]
public NameConstraints(Asn1Sequence seq)
{
foreach (Asn1TaggedObject item in seq) {
switch (item.TagNo) {
case 0:
m_permitted = Asn1Sequence.GetInstance(item, false);
break;
case 1:
m_excluded = Asn1Sequence.GetInstance(item, false);
break;
}
}
}
public NameConstraints(IList<GeneralSubtree> permitted, IList<GeneralSubtree> excluded)
{
if (permitted != null)
m_permitted = CreateSequence(permitted);
if (excluded != null)
m_excluded = CreateSequence(excluded);
}
private DerSequence CreateSequence(IList<GeneralSubtree> subtrees)
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(subtrees.Count);
foreach (GeneralSubtree subtree in subtrees) {
asn1EncodableVector.Add(subtree);
}
return new DerSequence(asn1EncodableVector);
}
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);
}
}
}