SingleResponse.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
  5. using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  6. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp
  7. {
  8. public class SingleResponse
  9. : Asn1Encodable
  10. {
  11. private readonly CertID certID;
  12. private readonly CertStatus certStatus;
  13. private readonly DerGeneralizedTime thisUpdate;
  14. private readonly DerGeneralizedTime nextUpdate;
  15. private readonly X509Extensions singleExtensions;
  16. public SingleResponse(
  17. CertID certID,
  18. CertStatus certStatus,
  19. DerGeneralizedTime thisUpdate,
  20. DerGeneralizedTime nextUpdate,
  21. X509Extensions singleExtensions)
  22. {
  23. this.certID = certID;
  24. this.certStatus = certStatus;
  25. this.thisUpdate = thisUpdate;
  26. this.nextUpdate = nextUpdate;
  27. this.singleExtensions = singleExtensions;
  28. }
  29. public SingleResponse(
  30. Asn1Sequence seq)
  31. {
  32. this.certID = CertID.GetInstance(seq[0]);
  33. this.certStatus = CertStatus.GetInstance(seq[1]);
  34. this.thisUpdate = (DerGeneralizedTime)seq[2];
  35. if (seq.Count > 4)
  36. {
  37. this.nextUpdate = DerGeneralizedTime.GetInstance(
  38. (Asn1TaggedObject) seq[3], true);
  39. this.singleExtensions = X509Extensions.GetInstance(
  40. (Asn1TaggedObject) seq[4], true);
  41. }
  42. else if (seq.Count > 3)
  43. {
  44. Asn1TaggedObject o = (Asn1TaggedObject) seq[3];
  45. if (o.TagNo == 0)
  46. {
  47. this.nextUpdate = DerGeneralizedTime.GetInstance(o, true);
  48. }
  49. else
  50. {
  51. this.singleExtensions = X509Extensions.GetInstance(o, true);
  52. }
  53. }
  54. }
  55. public static SingleResponse GetInstance(
  56. Asn1TaggedObject obj,
  57. bool explicitly)
  58. {
  59. return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
  60. }
  61. public static SingleResponse GetInstance(
  62. object obj)
  63. {
  64. if (obj == null || obj is SingleResponse)
  65. {
  66. return (SingleResponse)obj;
  67. }
  68. if (obj is Asn1Sequence)
  69. {
  70. return new SingleResponse((Asn1Sequence)obj);
  71. }
  72. throw new ArgumentException("unknown object in factory: " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj");
  73. }
  74. public CertID CertId
  75. {
  76. get { return certID; }
  77. }
  78. public CertStatus CertStatus
  79. {
  80. get { return certStatus; }
  81. }
  82. public DerGeneralizedTime ThisUpdate
  83. {
  84. get { return thisUpdate; }
  85. }
  86. public DerGeneralizedTime NextUpdate
  87. {
  88. get { return nextUpdate; }
  89. }
  90. public X509Extensions SingleExtensions
  91. {
  92. get { return singleExtensions; }
  93. }
  94. /**
  95. * Produce an object suitable for an Asn1OutputStream.
  96. * <pre>
  97. * SingleResponse ::= Sequence {
  98. * certID CertID,
  99. * certStatus CertStatus,
  100. * thisUpdate GeneralizedTime,
  101. * nextUpdate [0] EXPLICIT GeneralizedTime OPTIONAL,
  102. * singleExtensions [1] EXPLICIT Extensions OPTIONAL }
  103. * </pre>
  104. */
  105. public override Asn1Object ToAsn1Object()
  106. {
  107. Asn1EncodableVector v = new Asn1EncodableVector(certID, certStatus, thisUpdate);
  108. v.AddOptionalTagged(true, 0, nextUpdate);
  109. v.AddOptionalTagged(true, 1, singleExtensions);
  110. return new DerSequence(v);
  111. }
  112. }
  113. }
  114. #pragma warning restore
  115. #endif