<PackageReference Include="BouncyCastle.Cryptography" Version="2.6.0" />

PkiMessage

public class PkiMessage : Asn1Encodable
using System; namespace Org.BouncyCastle.Asn1.Cmp { public class PkiMessage : Asn1Encodable { private readonly PkiHeader m_header; private readonly PkiBody m_body; private readonly DerBitString m_protection; private readonly Asn1Sequence m_extraCerts; public virtual PkiHeader Header => m_header; public virtual PkiBody Body => m_body; public virtual DerBitString Protection => m_protection; public static PkiMessage GetInstance(object obj) { if (obj == null) return null; PkiMessage pkiMessage = obj as PkiMessage; if (pkiMessage != null) return pkiMessage; return new PkiMessage(Asn1Sequence.GetInstance(obj)); } public static PkiMessage GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new PkiMessage(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } public static PkiMessage GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new PkiMessage(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } private PkiMessage(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 2 || count > 4) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_header = PkiHeader.GetInstance(seq[sequencePosition++]); m_body = PkiBody.GetInstance(seq[sequencePosition++]); m_protection = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, true, DerBitString.GetTagged); m_extraCerts = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, true, Asn1Sequence.GetTagged); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } public PkiMessage(PkiHeader header, PkiBody body, DerBitString protection, CmpCertificate[] extraCerts) { if (header == null) throw new ArgumentNullException("header"); m_header = header; if (body == null) throw new ArgumentNullException("body"); m_body = body; m_protection = protection; m_extraCerts = DerSequence.FromElementsOptional(extraCerts); } public PkiMessage(PkiHeader header, PkiBody body, DerBitString protection) : this(header, body, protection, null) { } public PkiMessage(PkiHeader header, PkiBody body) : this(header, body, null, null) { } public virtual CmpCertificate[] GetExtraCerts() { return m_extraCerts?.MapElements(CmpCertificate.GetInstance); } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(4); asn1EncodableVector.Add(m_header, m_body); asn1EncodableVector.AddOptionalTagged(true, 0, m_protection); asn1EncodableVector.AddOptionalTagged(true, 1, m_extraCerts); return new DerSequence(asn1EncodableVector); } } }