CompressedData
using Org.BouncyCastle.Asn1.X509;
using System;
namespace Org.BouncyCastle.Asn1.Cms
{
    public class CompressedData : Asn1Encodable
    {
        private readonly DerInteger m_version;
        private readonly AlgorithmIdentifier m_compressionAlgorithm;
        private readonly ContentInfo m_encapContentInfo;
        public DerInteger Version => m_version;
        public AlgorithmIdentifier CompressionAlgorithmIdentifier => m_compressionAlgorithm;
        public ContentInfo EncapContentInfo => m_encapContentInfo;
        public static CompressedData GetInstance(object obj)
        {
            if (obj == null)
                return null;
            CompressedData compressedData = obj as CompressedData;
            if (compressedData != null)
                return compressedData;
            return new CompressedData(Asn1Sequence.GetInstance(obj));
        }
        public static CompressedData GetInstance(Asn1TaggedObject ato, bool explicitly)
        {
            return new CompressedData(Asn1Sequence.GetInstance(ato, explicitly));
        }
        public static CompressedData GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
        {
            return new CompressedData(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
        }
        public CompressedData(AlgorithmIdentifier compressionAlgorithm, ContentInfo encapContentInfo)
        {
            m_version = DerInteger.Zero;
            if (compressionAlgorithm == null)
                throw new ArgumentNullException("compressionAlgorithm");
            m_compressionAlgorithm = compressionAlgorithm;
            if (encapContentInfo == null)
                throw new ArgumentNullException("encapContentInfo");
            m_encapContentInfo = encapContentInfo;
        }
        [Obsolete("Use 'GetInstance' instead")]
        public CompressedData(Asn1Sequence seq)
        {
            int count = seq.Count;
            if (count != 3)
                throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
            m_version = DerInteger.GetInstance(seq[0]);
            m_compressionAlgorithm = AlgorithmIdentifier.GetInstance(seq[1]);
            m_encapContentInfo = ContentInfo.GetInstance(seq[2]);
        }
        public override Asn1Object ToAsn1Object()
        {
            return new BerSequence(m_version, m_compressionAlgorithm, m_encapContentInfo);
        }
    }
}