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

DeclarationOfMajority

using Org.BouncyCastle.Utilities; 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) { if (obj == null) return null; Asn1Encodable asn1Encodable = obj as Asn1Encodable; if (asn1Encodable != null) { DeclarationOfMajority optional = GetOptional(asn1Encodable); if (optional != null) return optional; } throw new ArgumentException("Invalid object: " + Platform.GetTypeName(obj), "obj"); } 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 asn1TaggedObject = element as Asn1TaggedObject; if (asn1TaggedObject != null) { Asn1Encodable optionalBaseObject = GetOptionalBaseObject(asn1TaggedObject); if (optionalBaseObject != null) return new DeclarationOfMajority(asn1TaggedObject.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.GetInstance(taggedObject, false); case 1: return Asn1Sequence.GetInstance(taggedObject, false); case 2: return Asn1GeneralizedTime.GetInstance(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); } } }