DeclarationOfMajority
using System;
namespace Org.BouncyCastle.Asn1.IsisMtt.X509
{
public class DeclarationOfMajority : Asn1Encodable, IAsn1Choice
{
public enum Choice
{
NotYoungerThan,
FullAgeAtCountry,
DateOfBirth
}
private readonly int m_tag;
private readonly Asn1Encodable m_baseObject;
public Choice Type => (Choice)m_tag;
public virtual int NotYoungerThan {
get {
if (Type == Choice.NotYoungerThan)
return DerInteger.GetInstance(m_baseObject).IntValueExact;
return -1;
}
}
public virtual Asn1Sequence FullAgeAtCountry {
get {
if (Type == Choice.FullAgeAtCountry)
return Asn1Sequence.GetInstance(m_baseObject);
return null;
}
}
public virtual Asn1GeneralizedTime DateOfBirth {
get {
if (Type == Choice.DateOfBirth)
return Asn1GeneralizedTime.GetInstance(m_baseObject);
return null;
}
}
public static DeclarationOfMajority GetInstance(object obj)
{
return Asn1Utilities.GetInstanceChoice(obj, GetOptional);
}
public static DeclarationOfMajority GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return Asn1Utilities.GetInstanceChoice(taggedObject, declaredExplicit, GetInstance);
}
public static DeclarationOfMajority GetOptional(Asn1Encodable element)
{
if (element == null)
throw new ArgumentNullException("element");
DeclarationOfMajority declarationOfMajority = element as DeclarationOfMajority;
if (declarationOfMajority != null)
return declarationOfMajority;
Asn1TaggedObject optional = Asn1TaggedObject.GetOptional(element);
if (optional != null) {
Asn1Encodable optionalBaseObject = GetOptionalBaseObject(optional);
if (optionalBaseObject != null)
return new DeclarationOfMajority(optional.TagNo, optionalBaseObject);
}
return null;
}
public static DeclarationOfMajority GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return Asn1Utilities.GetTaggedChoice(taggedObject, declaredExplicit, GetInstance);
}
private static Asn1Encodable GetOptionalBaseObject(Asn1TaggedObject taggedObject)
{
if (taggedObject.HasContextTag()) {
switch (taggedObject.TagNo) {
case 0:
return DerInteger.GetTagged(taggedObject, false);
case 1:
return Asn1Sequence.GetTagged(taggedObject, false);
case 2:
return Asn1GeneralizedTime.GetTagged(taggedObject, false);
}
}
return null;
}
private DeclarationOfMajority(int tag, Asn1Encodable baseObject)
{
m_tag = tag;
m_baseObject = baseObject;
}
public DeclarationOfMajority(int notYoungerThan)
{
m_tag = 0;
m_baseObject = new DerInteger(notYoungerThan);
}
public DeclarationOfMajority(bool fullAge, string country)
{
if (country.Length != 2)
throw new ArgumentException("country can only be 2 characters", "country");
DerPrintableString derPrintableString = new DerPrintableString(country, true);
DerSequence baseObject = (!fullAge) ? new DerSequence(DerBoolean.False, derPrintableString) : new DerSequence(derPrintableString);
m_tag = 1;
m_baseObject = baseObject;
}
public DeclarationOfMajority(Asn1GeneralizedTime dateOfBirth)
{
m_tag = 2;
if (dateOfBirth == null)
throw new ArgumentNullException("dateOfBirth");
m_baseObject = dateOfBirth;
}
public override Asn1Object ToAsn1Object()
{
return new DerTaggedObject(false, m_tag, m_baseObject);
}
}
}