NamingAuthority
using Org.BouncyCastle.Asn1.X500;
using System;
namespace Org.BouncyCastle.Asn1.IsisMtt.X509
{
    public class NamingAuthority : Asn1Encodable
    {
        public static readonly DerObjectIdentifier IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern = IsisMttObjectIdentifiers.IdIsisMttATNamingAuthorities.Branch("1");
        private readonly DerObjectIdentifier m_namingAuthorityID;
        private readonly DerIA5String m_namingAuthorityUrl;
        private readonly DirectoryString m_namingAuthorityText;
        public virtual DerObjectIdentifier NamingAuthorityID => m_namingAuthorityID;
        public virtual DirectoryString NamingAuthorityText => m_namingAuthorityText;
        public virtual string NamingAuthorityUrl => m_namingAuthorityUrl?.GetString();
        public virtual DerIA5String NamingAuthorityUrlData => m_namingAuthorityUrl;
        public static NamingAuthority GetInstance(object obj)
        {
            if (obj == null)
                return null;
            NamingAuthority namingAuthority = obj as NamingAuthority;
            if (namingAuthority != null)
                return namingAuthority;
            return new NamingAuthority(Asn1Sequence.GetInstance(obj));
        }
        public static NamingAuthority GetInstance(Asn1TaggedObject obj, bool isExplicit)
        {
            return new NamingAuthority(Asn1Sequence.GetInstance(obj, isExplicit));
        }
        public static NamingAuthority GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
        {
            return new NamingAuthority(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
        }
        private NamingAuthority(Asn1Sequence seq)
        {
            int count = seq.Count;
            int sequencePosition = 0;
            if (count < 0 || count > 3)
                throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
            m_namingAuthorityID = Asn1Utilities.ReadOptional(seq, ref sequencePosition, DerObjectIdentifier.GetOptional);
            m_namingAuthorityUrl = Asn1Utilities.ReadOptional(seq, ref sequencePosition, DerIA5String.GetOptional);
            m_namingAuthorityText = Asn1Utilities.ReadOptional(seq, ref sequencePosition, DirectoryString.GetOptional);
            if (sequencePosition != count)
                throw new ArgumentException("Unexpected elements in sequence", "seq");
        }
        public NamingAuthority(DerObjectIdentifier namingAuthorityID, string namingAuthorityUrl, DirectoryString namingAuthorityText)
        {
            m_namingAuthorityID = namingAuthorityID;
            m_namingAuthorityUrl = ((namingAuthorityUrl == null) ? null : new DerIA5String(namingAuthorityUrl, true));
            m_namingAuthorityText = namingAuthorityText;
        }
        public override Asn1Object ToAsn1Object()
        {
            Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(3);
            asn1EncodableVector.AddOptional(m_namingAuthorityID);
            asn1EncodableVector.AddOptional(m_namingAuthorityUrl);
            asn1EncodableVector.AddOptional(m_namingAuthorityText);
            return new DerSequence(asn1EncodableVector);
        }
    }
}