<PackageReference Include="BouncyCastle.Cryptography" Version="2.4.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(new DerSequence())); public static readonly int CMP_1999 = 1; public static readonly int CMP_2000 = 2; private readonly DerInteger pvno; private readonly GeneralName sender; private readonly GeneralName recipient; private readonly Asn1GeneralizedTime messageTime; private readonly AlgorithmIdentifier protectionAlg; private readonly Asn1OctetString senderKID; private readonly Asn1OctetString recipKID; private readonly Asn1OctetString transactionID; private readonly Asn1OctetString senderNonce; private readonly Asn1OctetString recipNonce; private readonly PkiFreeText freeText; private readonly Asn1Sequence generalInfo; public virtual DerInteger Pvno => pvno; public virtual GeneralName Sender => sender; public virtual GeneralName Recipient => recipient; public virtual Asn1GeneralizedTime MessageTime => messageTime; public virtual AlgorithmIdentifier ProtectionAlg => protectionAlg; public virtual Asn1OctetString SenderKID => senderKID; public virtual Asn1OctetString RecipKID => recipKID; public virtual Asn1OctetString TransactionID => transactionID; public virtual Asn1OctetString SenderNonce => senderNonce; public virtual Asn1OctetString RecipNonce => recipNonce; public virtual PkiFreeText FreeText => 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)); } private PkiHeader(Asn1Sequence seq) { pvno = DerInteger.GetInstance(seq[0]); sender = GeneralName.GetInstance(seq[1]); recipient = GeneralName.GetInstance(seq[2]); int num = 3; Asn1TaggedObject instance; while (true) { if (num >= seq.Count) return; instance = Asn1TaggedObject.GetInstance(seq[num]); if (!instance.HasContextTag()) break; switch (instance.TagNo) { case 0: messageTime = Asn1GeneralizedTime.GetInstance(instance, true); break; case 1: protectionAlg = AlgorithmIdentifier.GetInstance(instance, true); break; case 2: senderKID = Asn1OctetString.GetInstance(instance, true); break; case 3: recipKID = Asn1OctetString.GetInstance(instance, true); break; case 4: transactionID = Asn1OctetString.GetInstance(instance, true); break; case 5: senderNonce = Asn1OctetString.GetInstance(instance, true); break; case 6: recipNonce = Asn1OctetString.GetInstance(instance, true); break; case 7: freeText = PkiFreeText.GetInstance(instance, true); break; case 8: generalInfo = Asn1Sequence.GetInstance(instance, true); break; default: throw new ArgumentException("unknown tag number: " + instance.TagNo.ToString()); } num++; } throw new ArgumentException("unknown tag: " + Asn1Utilities.GetTagText(instance)); } public PkiHeader(int pvno, GeneralName sender, GeneralName recipient) : this(new DerInteger(pvno), sender, recipient) { } private PkiHeader(DerInteger pvno, GeneralName sender, GeneralName recipient) { this.pvno = pvno; this.sender = sender; this.recipient = recipient; } public virtual InfoTypeAndValue[] GetGeneralInfo() { return generalInfo?.MapElements(InfoTypeAndValue.GetInstance); } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(pvno, sender, recipient); asn1EncodableVector.AddOptionalTagged(true, 0, messageTime); asn1EncodableVector.AddOptionalTagged(true, 1, protectionAlg); asn1EncodableVector.AddOptionalTagged(true, 2, senderKID); asn1EncodableVector.AddOptionalTagged(true, 3, recipKID); asn1EncodableVector.AddOptionalTagged(true, 4, transactionID); asn1EncodableVector.AddOptionalTagged(true, 5, senderNonce); asn1EncodableVector.AddOptionalTagged(true, 6, recipNonce); asn1EncodableVector.AddOptionalTagged(true, 7, freeText); asn1EncodableVector.AddOptionalTagged(true, 8, generalInfo); return new DerSequence(asn1EncodableVector); } } }