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

PkiBody

using Org.BouncyCastle.Asn1.Crmf; using Org.BouncyCastle.Asn1.Pkcs; using System; namespace Org.BouncyCastle.Asn1.Cmp { public class PkiBody : Asn1Encodable, IAsn1Choice { public const int TYPE_INIT_REQ = 0; public const int TYPE_INIT_REP = 1; public const int TYPE_CERT_REQ = 2; public const int TYPE_CERT_REP = 3; public const int TYPE_P10_CERT_REQ = 4; public const int TYPE_POPO_CHALL = 5; public const int TYPE_POPO_REP = 6; public const int TYPE_KEY_UPDATE_REQ = 7; public const int TYPE_KEY_UPDATE_REP = 8; public const int TYPE_KEY_RECOVERY_REQ = 9; public const int TYPE_KEY_RECOVERY_REP = 10; public const int TYPE_REVOCATION_REQ = 11; public const int TYPE_REVOCATION_REP = 12; public const int TYPE_CROSS_CERT_REQ = 13; public const int TYPE_CROSS_CERT_REP = 14; public const int TYPE_CA_KEY_UPDATE_ANN = 15; public const int TYPE_CERT_ANN = 16; public const int TYPE_REVOCATION_ANN = 17; public const int TYPE_CRL_ANN = 18; public const int TYPE_CONFIRM = 19; public const int TYPE_NESTED = 20; public const int TYPE_GEN_MSG = 21; public const int TYPE_GEN_REP = 22; public const int TYPE_ERROR = 23; public const int TYPE_CERT_CONFIRM = 24; public const int TYPE_POLL_REQ = 25; public const int TYPE_POLL_REP = 26; private readonly int m_tagNo; private readonly Asn1Encodable m_baseObject; public virtual Asn1Encodable Content => m_baseObject; public virtual int Type => m_tagNo; public static PkiBody GetInstance(object obj) { return Asn1Utilities.GetInstanceChoice(obj, GetOptional); } public static PkiBody GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return Asn1Utilities.GetInstanceChoice(taggedObject, declaredExplicit, GetInstance); } public static PkiBody GetOptional(Asn1Encodable element) { if (element == null) throw new ArgumentNullException("element"); PkiBody pkiBody = element as PkiBody; if (pkiBody != null) return pkiBody; Asn1TaggedObject optional = Asn1TaggedObject.GetOptional(element); if (optional != null) { Asn1Encodable optionalBaseObject = GetOptionalBaseObject(optional); if (optionalBaseObject != null) return new PkiBody(optional.TagNo, optionalBaseObject); } return null; } public static PkiBody GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return Asn1Utilities.GetTaggedChoice(taggedObject, declaredExplicit, GetInstance); } private static Asn1Encodable GetOptionalBaseObject(Asn1TaggedObject taggedObject) { if (taggedObject.HasContextTag()) { switch (taggedObject.TagNo) { case 0: return CertReqMessages.GetTagged(taggedObject, true); case 1: return CertRepMessage.GetTagged(taggedObject, true); case 2: return CertReqMessages.GetTagged(taggedObject, true); case 3: return CertRepMessage.GetTagged(taggedObject, true); case 4: return CertificationRequest.GetTagged(taggedObject, true); case 5: return PopoDecKeyChallContent.GetTagged(taggedObject, true); case 6: return PopoDecKeyRespContent.GetTagged(taggedObject, true); case 7: return CertReqMessages.GetTagged(taggedObject, true); case 8: return CertRepMessage.GetTagged(taggedObject, true); case 9: return CertReqMessages.GetTagged(taggedObject, true); case 10: return KeyRecRepContent.GetTagged(taggedObject, true); case 11: return RevReqContent.GetTagged(taggedObject, true); case 12: return RevRepContent.GetTagged(taggedObject, true); case 13: return CertReqMessages.GetTagged(taggedObject, true); case 14: return CertRepMessage.GetTagged(taggedObject, true); case 15: return CAKeyUpdAnnContent.GetTagged(taggedObject, true); case 16: return CmpCertificate.GetTagged(taggedObject, true); case 17: return RevAnnContent.GetTagged(taggedObject, true); case 18: return CrlAnnContent.GetTagged(taggedObject, true); case 19: return PkiConfirmContent.GetTagged(taggedObject, true); case 20: return PkiMessages.GetTagged(taggedObject, true); case 21: return GenMsgContent.GetTagged(taggedObject, true); case 22: return GenRepContent.GetTagged(taggedObject, true); case 23: return ErrorMsgContent.GetTagged(taggedObject, true); case 24: return CertConfirmContent.GetTagged(taggedObject, true); case 25: return PollReqContent.GetTagged(taggedObject, true); case 26: return PollRepContent.GetTagged(taggedObject, true); } } return null; } public PkiBody(int type, Asn1Encodable content) : this(GetBodyForType(type, content), type) { } private PkiBody(Asn1Encodable baseObject, int tagNo) { m_tagNo = tagNo; if (baseObject == null) throw new ArgumentNullException("baseObject"); m_baseObject = baseObject; } private static Asn1Encodable GetBodyForType(int type, Asn1Encodable o) { switch (type) { case 0: return CertReqMessages.GetInstance(o); case 1: return CertRepMessage.GetInstance(o); case 2: return CertReqMessages.GetInstance(o); case 3: return CertRepMessage.GetInstance(o); case 4: return CertificationRequest.GetInstance(o); case 5: return PopoDecKeyChallContent.GetInstance(o); case 6: return PopoDecKeyRespContent.GetInstance(o); case 7: return CertReqMessages.GetInstance(o); case 8: return CertRepMessage.GetInstance(o); case 9: return CertReqMessages.GetInstance(o); case 10: return KeyRecRepContent.GetInstance(o); case 11: return RevReqContent.GetInstance(o); case 12: return RevRepContent.GetInstance(o); case 13: return CertReqMessages.GetInstance(o); case 14: return CertRepMessage.GetInstance(o); case 15: return CAKeyUpdAnnContent.GetInstance(o); case 16: return CmpCertificate.GetInstance(o); case 17: return RevAnnContent.GetInstance(o); case 18: return CrlAnnContent.GetInstance(o); case 19: return PkiConfirmContent.GetInstance(o); case 20: return PkiMessages.GetInstance(o); case 21: return GenMsgContent.GetInstance(o); case 22: return GenRepContent.GetInstance(o); case 23: return ErrorMsgContent.GetInstance(o); case 24: return CertConfirmContent.GetInstance(o); case 25: return PollReqContent.GetInstance(o); case 26: return PollRepContent.GetInstance(o); default: throw new ArgumentException("unknown tag number: " + type.ToString(), "type"); } } public override Asn1Object ToAsn1Object() { return new DerTaggedObject(true, m_tagNo, m_baseObject); } } }