SemanticsInformation
using System;
namespace Org.BouncyCastle.Asn1.X509.Qualified
{
public class SemanticsInformation : Asn1Encodable
{
private readonly DerObjectIdentifier m_semanticsIdentifier;
private readonly GeneralName[] m_nameRegistrationAuthorities;
public DerObjectIdentifier SemanticsIdentifier => m_semanticsIdentifier;
public static SemanticsInformation GetInstance(object obj)
{
if (obj == null)
return null;
SemanticsInformation semanticsInformation = obj as SemanticsInformation;
if (semanticsInformation != null)
return semanticsInformation;
return new SemanticsInformation(Asn1Sequence.GetInstance(obj));
}
public static SemanticsInformation GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new SemanticsInformation(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
}
public static SemanticsInformation GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new SemanticsInformation(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
}
[Obsolete("Use 'GetInstance' instead")]
public SemanticsInformation(Asn1Sequence seq)
{
int count = seq.Count;
int sequencePosition = 0;
if (count < 1 || count > 2)
throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
m_semanticsIdentifier = Asn1Utilities.ReadOptional(seq, ref sequencePosition, DerObjectIdentifier.GetOptional);
m_nameRegistrationAuthorities = Asn1Utilities.ReadOptional(seq, ref sequencePosition, Asn1Sequence.GetOptional)?.MapElements(GeneralName.GetInstance);
if (sequencePosition != count)
throw new ArgumentException("Unexpected elements in sequence", "seq");
}
public SemanticsInformation(DerObjectIdentifier semanticsIdentifier)
: this(semanticsIdentifier, null)
{
}
public SemanticsInformation(GeneralName[] generalNames)
: this(null, generalNames)
{
}
public SemanticsInformation(DerObjectIdentifier semanticsIdentifier, GeneralName[] generalNames)
{
if (semanticsIdentifier == null && generalNames == null)
throw new ArgumentException("At least one option must be present");
m_semanticsIdentifier = semanticsIdentifier;
m_nameRegistrationAuthorities = generalNames;
}
public GeneralName[] GetNameRegistrationAuthorities()
{
return m_nameRegistrationAuthorities;
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(2);
asn1EncodableVector.AddOptional(m_semanticsIdentifier);
Asn1Encodable[] nameRegistrationAuthorities = m_nameRegistrationAuthorities;
asn1EncodableVector.AddOptional(DerSequence.FromElementsOptional(nameRegistrationAuthorities));
return new DerSequence(asn1EncodableVector);
}
}
}