AuthorityInformationAccess
using Org.BouncyCastle.Utilities;
using System;
using System.Text;
namespace Org.BouncyCastle.Asn1.X509
{
    public class AuthorityInformationAccess : Asn1Encodable
    {
        private readonly AccessDescription[] m_descriptions;
        public static AuthorityInformationAccess GetInstance(object obj)
        {
            if (obj == null)
                return null;
            AuthorityInformationAccess authorityInformationAccess = obj as AuthorityInformationAccess;
            if (authorityInformationAccess != null)
                return authorityInformationAccess;
            return new AuthorityInformationAccess(Asn1Sequence.GetInstance(obj));
        }
        public static AuthorityInformationAccess GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
        {
            return new AuthorityInformationAccess(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
        }
        public static AuthorityInformationAccess GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
        {
            return new AuthorityInformationAccess(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
        }
        public static AuthorityInformationAccess FromExtensions(X509Extensions extensions)
        {
            return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.AuthorityInfoAccess));
        }
        private AuthorityInformationAccess(Asn1Sequence seq)
        {
            if (seq.Count < 1)
                throw new ArgumentException("sequence may not be empty");
            m_descriptions = seq.MapElements(AccessDescription.GetInstance);
        }
        public AuthorityInformationAccess(AccessDescription description)
        {
            AccessDescription[] obj = new AccessDescription[1];
            if (description == null)
                throw new ArgumentNullException("description");
            obj[0] = description;
            m_descriptions = obj;
        }
        public AuthorityInformationAccess(AccessDescription[] descriptions)
        {
            if (Arrays.IsNullOrContainsNull(descriptions))
                throw new NullReferenceException("'descriptions' cannot be null, or contain null");
            m_descriptions = Copy(descriptions);
        }
        public AuthorityInformationAccess(DerObjectIdentifier oid, GeneralName location)
            : this(new AccessDescription(oid, location))
        {
        }
        public AccessDescription[] GetAccessDescriptions()
        {
            return Copy(m_descriptions);
        }
        public override Asn1Object ToAsn1Object()
        {
            Asn1Encodable[] descriptions = m_descriptions;
            return new DerSequence(descriptions);
        }
        public override string ToString()
        {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.AppendLine("AuthorityInformationAccess:");
            AccessDescription[] descriptions = m_descriptions;
            foreach (AccessDescription value in descriptions) {
                stringBuilder.Append("    ").Append(value).AppendLine();
            }
            return stringBuilder.ToString();
        }
        private static AccessDescription[] Copy(AccessDescription[] descriptions)
        {
            return (AccessDescription[])descriptions.Clone();
        }
    }
}