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

PkiHeader

public class PkiHeader : Asn1Encodable
using Org.BouncyCastle.Asn1.X509; using System; namespace Org.BouncyCastle.Asn1.Cmp { public class PkiHeader : Asn1Encodable { public static readonly GeneralName NULL_NAME = new GeneralName(X509Name.GetInstance(DerSequence.Empty)); public static readonly int CMP_1999 = 1; public static readonly int CMP_2000 = 2; private readonly DerInteger m_pvno; private readonly GeneralName m_sender; private readonly GeneralName m_recipient; private readonly Asn1GeneralizedTime m_messageTime; private readonly AlgorithmIdentifier m_protectionAlg; private readonly Asn1OctetString m_senderKID; private readonly Asn1OctetString m_recipKID; private readonly Asn1OctetString m_transactionID; private readonly Asn1OctetString m_senderNonce; private readonly Asn1OctetString m_recipNonce; private readonly PkiFreeText m_freeText; private readonly Asn1Sequence m_generalInfo; public virtual DerInteger Pvno => m_pvno; public virtual GeneralName Sender => m_sender; public virtual GeneralName Recipient => m_recipient; public virtual Asn1GeneralizedTime MessageTime => m_messageTime; public virtual AlgorithmIdentifier ProtectionAlg => m_protectionAlg; public virtual Asn1OctetString SenderKID => m_senderKID; public virtual Asn1OctetString RecipKID => m_recipKID; public virtual Asn1OctetString TransactionID => m_transactionID; public virtual Asn1OctetString SenderNonce => m_senderNonce; public virtual Asn1OctetString RecipNonce => m_recipNonce; public virtual PkiFreeText FreeText => m_freeText; public static PkiHeader GetInstance(object obj) { if (obj == null) return null; PkiHeader pkiHeader = obj as PkiHeader; if (pkiHeader != null) return pkiHeader; return new PkiHeader(Asn1Sequence.GetInstance(obj)); } public static PkiHeader GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new PkiHeader(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } public static PkiHeader GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new PkiHeader(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } private PkiHeader(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 3 || count > 12) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_pvno = DerInteger.GetInstance(seq[sequencePosition++]); m_sender = GeneralName.GetInstance(seq[sequencePosition++]); m_recipient = GeneralName.GetInstance(seq[sequencePosition++]); m_messageTime = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, true, Asn1GeneralizedTime.GetTagged); m_protectionAlg = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, true, AlgorithmIdentifier.GetTagged); m_senderKID = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 2, true, Asn1OctetString.GetTagged); m_recipKID = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 3, true, Asn1OctetString.GetTagged); m_transactionID = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 4, true, Asn1OctetString.GetTagged); m_senderNonce = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 5, true, Asn1OctetString.GetTagged); m_recipNonce = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 6, true, Asn1OctetString.GetTagged); m_freeText = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 7, true, PkiFreeText.GetTagged); m_generalInfo = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 8, true, Asn1Sequence.GetTagged); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } public PkiHeader(int pvno, GeneralName sender, GeneralName recipient) : this(new DerInteger(pvno), sender, recipient) { } private PkiHeader(DerInteger pvno, GeneralName sender, GeneralName recipient) { if (pvno == null) throw new ArgumentNullException("pvno"); m_pvno = pvno; if (sender == null) throw new ArgumentNullException("sender"); m_sender = sender; if (recipient == null) throw new ArgumentNullException("recipient"); m_recipient = recipient; } public virtual InfoTypeAndValue[] GetGeneralInfo() { return m_generalInfo?.MapElements(InfoTypeAndValue.GetInstance); } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(12); asn1EncodableVector.Add(m_pvno, m_sender, m_recipient); asn1EncodableVector.AddOptionalTagged(true, 0, m_messageTime); asn1EncodableVector.AddOptionalTagged(true, 1, m_protectionAlg); asn1EncodableVector.AddOptionalTagged(true, 2, m_senderKID); asn1EncodableVector.AddOptionalTagged(true, 3, m_recipKID); asn1EncodableVector.AddOptionalTagged(true, 4, m_transactionID); asn1EncodableVector.AddOptionalTagged(true, 5, m_senderNonce); asn1EncodableVector.AddOptionalTagged(true, 6, m_recipNonce); asn1EncodableVector.AddOptionalTagged(true, 7, m_freeText); asn1EncodableVector.AddOptionalTagged(true, 8, m_generalInfo); return new DerSequence(asn1EncodableVector); } } }