IetfAttrSyntax
using System;
namespace Org.BouncyCastle.Asn1.X509
{
public class IetfAttrSyntax : Asn1Encodable
{
public const int ValueOctets = 1;
public const int ValueOid = 2;
public const int ValueUtf8 = 3;
private readonly GeneralNames m_policyAuthority;
private readonly Asn1Sequence m_values;
private readonly int m_valueChoice = -1;
public GeneralNames PolicyAuthority => m_policyAuthority;
public int ValueType => m_valueChoice;
public static IetfAttrSyntax GetInstance(object obj)
{
if (obj == null)
return null;
IetfAttrSyntax ietfAttrSyntax = obj as IetfAttrSyntax;
if (ietfAttrSyntax != null)
return ietfAttrSyntax;
return new IetfAttrSyntax(Asn1Sequence.GetInstance(obj));
}
public static IetfAttrSyntax GetInstance(Asn1TaggedObject obj, bool isExplicit)
{
return new IetfAttrSyntax(Asn1Sequence.GetInstance(obj, isExplicit));
}
public static IetfAttrSyntax GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new IetfAttrSyntax(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
}
[Obsolete("Use 'GetInstance' instead")]
public IetfAttrSyntax(Asn1Sequence seq)
{
int count = seq.Count;
int sequencePosition = 0;
if (count < 1 || count > 2)
throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
m_policyAuthority = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, false, GeneralNames.GetTagged);
m_values = Asn1Sequence.GetInstance(seq[sequencePosition++]);
if (sequencePosition != count)
throw new ArgumentException("Unexpected elements in sequence", "seq");
int num2 = -1;
foreach (Asn1Encodable value in m_values) {
int num3;
if (value is DerObjectIdentifier)
num3 = 2;
else if (value is DerUtf8String) {
num3 = 3;
} else {
if (!(value is DerOctetString))
throw new ArgumentException("Bad value type encoding IetfAttrSyntax");
num3 = 1;
}
if (num2 < 0)
num2 = num3;
else if (num3 != num2) {
throw new ArgumentException("Mix of value types in IetfAttrSyntax");
}
}
m_valueChoice = num2;
}
public object[] GetValues()
{
switch (m_valueChoice) {
case 1:
return m_values.MapElements(Asn1OctetString.GetInstance);
case 2:
return m_values.MapElements(DerObjectIdentifier.GetInstance);
case 3:
return m_values.MapElements(DerUtf8String.GetInstance);
default:
return Array.Empty<object>();
}
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(2);
asn1EncodableVector.AddOptionalTagged(false, 0, m_policyAuthority);
asn1EncodableVector.Add(m_values);
return new DerSequence(asn1EncodableVector);
}
}
}