PKIMessage.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp
  5. {
  6. public class PkiMessage
  7. : Asn1Encodable
  8. {
  9. private readonly PkiHeader header;
  10. private readonly PkiBody body;
  11. private readonly DerBitString protection;
  12. private readonly Asn1Sequence extraCerts;
  13. private PkiMessage(Asn1Sequence seq)
  14. {
  15. header = PkiHeader.GetInstance(seq[0]);
  16. body = PkiBody.GetInstance(seq[1]);
  17. for (int pos = 2; pos < seq.Count; ++pos)
  18. {
  19. Asn1TaggedObject tObj = (Asn1TaggedObject)seq[pos].ToAsn1Object();
  20. if (tObj.TagNo == 0)
  21. {
  22. protection = DerBitString.GetInstance(tObj, true);
  23. }
  24. else
  25. {
  26. extraCerts = Asn1Sequence.GetInstance(tObj, true);
  27. }
  28. }
  29. }
  30. public static PkiMessage GetInstance(object obj)
  31. {
  32. if (obj is PkiMessage)
  33. return (PkiMessage)obj;
  34. if (obj != null)
  35. return new PkiMessage(Asn1Sequence.GetInstance(obj));
  36. return null;
  37. }
  38. /**
  39. * Creates a new PkiMessage.
  40. *
  41. * @param header message header
  42. * @param body message body
  43. * @param protection message protection (may be null)
  44. * @param extraCerts extra certificates (may be null)
  45. */
  46. public PkiMessage(
  47. PkiHeader header,
  48. PkiBody body,
  49. DerBitString protection,
  50. CmpCertificate[] extraCerts)
  51. {
  52. this.header = header;
  53. this.body = body;
  54. this.protection = protection;
  55. if (extraCerts != null)
  56. {
  57. this.extraCerts = new DerSequence(extraCerts);
  58. }
  59. }
  60. public PkiMessage(
  61. PkiHeader header,
  62. PkiBody body,
  63. DerBitString protection)
  64. : this(header, body, protection, null)
  65. {
  66. }
  67. public PkiMessage(
  68. PkiHeader header,
  69. PkiBody body)
  70. : this(header, body, null, null)
  71. {
  72. }
  73. public virtual PkiHeader Header
  74. {
  75. get { return header; }
  76. }
  77. public virtual PkiBody Body
  78. {
  79. get { return body; }
  80. }
  81. public virtual DerBitString Protection
  82. {
  83. get { return protection; }
  84. }
  85. public virtual CmpCertificate[] GetExtraCerts()
  86. {
  87. if (extraCerts == null)
  88. return null;
  89. CmpCertificate[] results = new CmpCertificate[extraCerts.Count];
  90. for (int i = 0; i < results.Length; ++i)
  91. {
  92. results[i] = CmpCertificate.GetInstance(extraCerts[i]);
  93. }
  94. return results;
  95. }
  96. /**
  97. * <pre>
  98. * PkiMessage ::= SEQUENCE {
  99. * header PKIHeader,
  100. * body PKIBody,
  101. * protection [0] PKIProtection OPTIONAL,
  102. * extraCerts [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
  103. * OPTIONAL
  104. * }
  105. * </pre>
  106. * @return a basic ASN.1 object representation.
  107. */
  108. public override Asn1Object ToAsn1Object()
  109. {
  110. Asn1EncodableVector v = new Asn1EncodableVector(header, body);
  111. v.AddOptionalTagged(true, 0, protection);
  112. v.AddOptionalTagged(true, 1, extraCerts);
  113. return new DerSequence(v);
  114. }
  115. }
  116. }
  117. #pragma warning restore
  118. #endif