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

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); } } }