PKIBody.cs 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf;
  5. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs;
  6. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  7. namespace Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp
  8. {
  9. /**
  10. * PKIBody ::= CHOICE { -- message-specific body elements
  11. * ir [0] CertReqMessages, --Initialization Request
  12. * ip [1] CertRepMessage, --Initialization Response
  13. * cr [2] CertReqMessages, --Certification Request
  14. * cp [3] CertRepMessage, --Certification Response
  15. * p10cr [4] CertificationRequest, --imported from [PKCS10]
  16. * popdecc [5] POPODecKeyChallContent, --pop Challenge
  17. * popdecr [6] POPODecKeyRespContent, --pop Response
  18. * kur [7] CertReqMessages, --Key Update Request
  19. * kup [8] CertRepMessage, --Key Update Response
  20. * krr [9] CertReqMessages, --Key Recovery Request
  21. * krp [10] KeyRecRepContent, --Key Recovery Response
  22. * rr [11] RevReqContent, --Revocation Request
  23. * rp [12] RevRepContent, --Revocation Response
  24. * ccr [13] CertReqMessages, --Cross-Cert. Request
  25. * ccp [14] CertRepMessage, --Cross-Cert. Response
  26. * ckuann [15] CAKeyUpdAnnContent, --CA Key Update Ann.
  27. * cann [16] CertAnnContent, --Certificate Ann.
  28. * rann [17] RevAnnContent, --Revocation Ann.
  29. * crlann [18] CRLAnnContent, --CRL Announcement
  30. * pkiconf [19] PKIConfirmContent, --Confirmation
  31. * nested [20] NestedMessageContent, --Nested Message
  32. * genm [21] GenMsgContent, --General Message
  33. * genp [22] GenRepContent, --General Response
  34. * error [23] ErrorMsgContent, --Error Message
  35. * certConf [24] CertConfirmContent, --Certificate confirm
  36. * pollReq [25] PollReqContent, --Polling request
  37. * pollRep [26] PollRepContent --Polling response
  38. * }
  39. */
  40. public class PkiBody
  41. : Asn1Encodable, IAsn1Choice
  42. {
  43. public const int TYPE_INIT_REQ = 0;
  44. public const int TYPE_INIT_REP = 1;
  45. public const int TYPE_CERT_REQ = 2;
  46. public const int TYPE_CERT_REP = 3;
  47. public const int TYPE_P10_CERT_REQ = 4;
  48. public const int TYPE_POPO_CHALL = 5;
  49. public const int TYPE_POPO_REP = 6;
  50. public const int TYPE_KEY_UPDATE_REQ = 7;
  51. public const int TYPE_KEY_UPDATE_REP = 8;
  52. public const int TYPE_KEY_RECOVERY_REQ = 9;
  53. public const int TYPE_KEY_RECOVERY_REP = 10;
  54. public const int TYPE_REVOCATION_REQ = 11;
  55. public const int TYPE_REVOCATION_REP = 12;
  56. public const int TYPE_CROSS_CERT_REQ = 13;
  57. public const int TYPE_CROSS_CERT_REP = 14;
  58. public const int TYPE_CA_KEY_UPDATE_ANN = 15;
  59. public const int TYPE_CERT_ANN = 16;
  60. public const int TYPE_REVOCATION_ANN = 17;
  61. public const int TYPE_CRL_ANN = 18;
  62. public const int TYPE_CONFIRM = 19;
  63. public const int TYPE_NESTED = 20;
  64. public const int TYPE_GEN_MSG = 21;
  65. public const int TYPE_GEN_REP = 22;
  66. public const int TYPE_ERROR = 23;
  67. public const int TYPE_CERT_CONFIRM = 24;
  68. public const int TYPE_POLL_REQ = 25;
  69. public const int TYPE_POLL_REP = 26;
  70. public static PkiBody GetInstance(object obj)
  71. {
  72. if (obj == null)
  73. return null;
  74. if (obj is PkiBody pkiBody)
  75. return pkiBody;
  76. if (obj is Asn1TaggedObject taggedObject)
  77. return new PkiBody(taggedObject);
  78. throw new ArgumentException("Invalid object: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), nameof(obj));
  79. }
  80. private readonly int m_tagNo;
  81. private readonly Asn1Encodable m_body;
  82. private PkiBody(Asn1TaggedObject taggedObject)
  83. {
  84. m_tagNo = taggedObject.TagNo;
  85. m_body = GetBodyForType(m_tagNo, taggedObject.GetObject());
  86. }
  87. /**
  88. * Creates a new PkiBody.
  89. * @param type one of the TYPE_* constants
  90. * @param content message content
  91. */
  92. public PkiBody(int type, Asn1Encodable content)
  93. {
  94. m_tagNo = type;
  95. m_body = GetBodyForType(type, content);
  96. }
  97. private static Asn1Encodable GetBodyForType(int type, Asn1Encodable o)
  98. {
  99. switch (type)
  100. {
  101. case TYPE_INIT_REQ:
  102. return CertReqMessages.GetInstance(o);
  103. case TYPE_INIT_REP:
  104. return CertRepMessage.GetInstance(o);
  105. case TYPE_CERT_REQ:
  106. return CertReqMessages.GetInstance(o);
  107. case TYPE_CERT_REP:
  108. return CertRepMessage.GetInstance(o);
  109. case TYPE_P10_CERT_REQ:
  110. return CertificationRequest.GetInstance(o);
  111. case TYPE_POPO_CHALL:
  112. return PopoDecKeyChallContent.GetInstance(o);
  113. case TYPE_POPO_REP:
  114. return PopoDecKeyRespContent.GetInstance(o);
  115. case TYPE_KEY_UPDATE_REQ:
  116. return CertReqMessages.GetInstance(o);
  117. case TYPE_KEY_UPDATE_REP:
  118. return CertRepMessage.GetInstance(o);
  119. case TYPE_KEY_RECOVERY_REQ:
  120. return CertReqMessages.GetInstance(o);
  121. case TYPE_KEY_RECOVERY_REP:
  122. return KeyRecRepContent.GetInstance(o);
  123. case TYPE_REVOCATION_REQ:
  124. return RevReqContent.GetInstance(o);
  125. case TYPE_REVOCATION_REP:
  126. return RevRepContent.GetInstance(o);
  127. case TYPE_CROSS_CERT_REQ:
  128. return CertReqMessages.GetInstance(o);
  129. case TYPE_CROSS_CERT_REP:
  130. return CertRepMessage.GetInstance(o);
  131. case TYPE_CA_KEY_UPDATE_ANN:
  132. return CAKeyUpdAnnContent.GetInstance(o);
  133. case TYPE_CERT_ANN:
  134. return CmpCertificate.GetInstance(o);
  135. case TYPE_REVOCATION_ANN:
  136. return RevAnnContent.GetInstance(o);
  137. case TYPE_CRL_ANN:
  138. return CrlAnnContent.GetInstance(o);
  139. case TYPE_CONFIRM:
  140. return PkiConfirmContent.GetInstance(o);
  141. case TYPE_NESTED:
  142. return PkiMessages.GetInstance(o);
  143. case TYPE_GEN_MSG:
  144. return GenMsgContent.GetInstance(o);
  145. case TYPE_GEN_REP:
  146. return GenRepContent.GetInstance(o);
  147. case TYPE_ERROR:
  148. return ErrorMsgContent.GetInstance(o);
  149. case TYPE_CERT_CONFIRM:
  150. return CertConfirmContent.GetInstance(o);
  151. case TYPE_POLL_REQ:
  152. return PollReqContent.GetInstance(o);
  153. case TYPE_POLL_REP:
  154. return PollRepContent.GetInstance(o);
  155. default:
  156. throw new ArgumentException("unknown tag number: " + type, nameof(type));
  157. }
  158. }
  159. public virtual Asn1Encodable Content => m_body;
  160. public virtual int Type => m_tagNo;
  161. /**
  162. * <pre>
  163. * PkiBody ::= CHOICE { -- message-specific body elements
  164. * ir [0] CertReqMessages, --Initialization Request
  165. * ip [1] CertRepMessage, --Initialization Response
  166. * cr [2] CertReqMessages, --Certification Request
  167. * cp [3] CertRepMessage, --Certification Response
  168. * p10cr [4] CertificationRequest, --imported from [PKCS10]
  169. * popdecc [5] POPODecKeyChallContent, --pop Challenge
  170. * popdecr [6] POPODecKeyRespContent, --pop Response
  171. * kur [7] CertReqMessages, --Key Update Request
  172. * kup [8] CertRepMessage, --Key Update Response
  173. * krr [9] CertReqMessages, --Key Recovery Request
  174. * krp [10] KeyRecRepContent, --Key Recovery Response
  175. * rr [11] RevReqContent, --Revocation Request
  176. * rp [12] RevRepContent, --Revocation Response
  177. * ccr [13] CertReqMessages, --Cross-Cert. Request
  178. * ccp [14] CertRepMessage, --Cross-Cert. Response
  179. * ckuann [15] CAKeyUpdAnnContent, --CA Key Update Ann.
  180. * cann [16] CertAnnContent, --Certificate Ann.
  181. * rann [17] RevAnnContent, --Revocation Ann.
  182. * crlann [18] CRLAnnContent, --CRL Announcement
  183. * pkiconf [19] PKIConfirmContent, --Confirmation
  184. * nested [20] NestedMessageContent, --Nested Message
  185. * genm [21] GenMsgContent, --General Message
  186. * genp [22] GenRepContent, --General Response
  187. * error [23] ErrorMsgContent, --Error Message
  188. * certConf [24] CertConfirmContent, --Certificate confirm
  189. * pollReq [25] PollReqContent, --Polling request
  190. * pollRep [26] PollRepContent --Polling response
  191. * }
  192. * </pre>
  193. * @return a basic ASN.1 object representation.
  194. */
  195. public override Asn1Object ToAsn1Object()
  196. {
  197. return new DerTaggedObject(true, m_tagNo, m_body);
  198. }
  199. }
  200. }
  201. #pragma warning restore
  202. #endif