Pfx
using System;
namespace Org.BouncyCastle.Asn1.Pkcs
{
    public class Pfx : Asn1Encodable
    {
        private readonly ContentInfo m_contentInfo;
        private readonly MacData m_macData;
        public ContentInfo AuthSafe => m_contentInfo;
        public MacData MacData => m_macData;
        public static Pfx GetInstance(object obj)
        {
            if (obj == null)
                return null;
            Pfx pfx = obj as Pfx;
            if (pfx != null)
                return pfx;
            return new Pfx(Asn1Sequence.GetInstance(obj));
        }
        public static Pfx GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
        {
            return new Pfx(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
        }
        public static Pfx GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
        {
            return new Pfx(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
        }
        private Pfx(Asn1Sequence seq)
        {
            int count = seq.Count;
            if (count < 2 || count > 3)
                throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
            if (!DerInteger.GetInstance(seq[0]).HasValue(3))
                throw new ArgumentException("wrong version for PFX PDU");
            m_contentInfo = ContentInfo.GetInstance(seq[1]);
            m_macData = ((count <= 2) ? null : MacData.GetInstance(seq[2]));
        }
        public Pfx(ContentInfo contentInfo, MacData macData)
        {
            if (contentInfo == null)
                throw new ArgumentNullException("contentInfo");
            m_contentInfo = contentInfo;
            m_macData = macData;
        }
        public override Asn1Object ToAsn1Object()
        {
            if (m_macData != null)
                return new BerSequence(DerInteger.Three, m_contentInfo, m_macData);
            return new BerSequence(DerInteger.Three, m_contentInfo);
        }
    }
}