ProtectedPart
using System;
namespace Org.BouncyCastle.Asn1.Cmp
{
    public class ProtectedPart : Asn1Encodable
    {
        private readonly PkiHeader m_header;
        private readonly PkiBody m_body;
        public virtual PkiHeader Header => m_header;
        public virtual PkiBody Body => m_body;
        public static ProtectedPart GetInstance(object obj)
        {
            if (obj == null)
                return null;
            ProtectedPart protectedPart = obj as ProtectedPart;
            if (protectedPart != null)
                return protectedPart;
            return new ProtectedPart(Asn1Sequence.GetInstance(obj));
        }
        public static ProtectedPart GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
        {
            return new ProtectedPart(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
        }
        public static ProtectedPart GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
        {
            return new ProtectedPart(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
        }
        private ProtectedPart(Asn1Sequence seq)
        {
            int count = seq.Count;
            if (count != 2)
                throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
            m_header = PkiHeader.GetInstance(seq[0]);
            m_body = PkiBody.GetInstance(seq[1]);
        }
        public ProtectedPart(PkiHeader header, PkiBody body)
        {
            if (header == null)
                throw new ArgumentNullException("header");
            m_header = header;
            if (body == null)
                throw new ArgumentNullException("body");
            m_body = body;
        }
        public override Asn1Object ToAsn1Object()
        {
            return new DerSequence(m_header, m_body);
        }
    }
}