TimeStampReq.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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.Tsp
  7. {
  8. public class TimeStampReq
  9. : Asn1Encodable
  10. {
  11. private readonly DerInteger version;
  12. private readonly MessageImprint messageImprint;
  13. private readonly DerObjectIdentifier tsaPolicy;
  14. private readonly DerInteger nonce;
  15. private readonly DerBoolean certReq;
  16. private readonly X509Extensions extensions;
  17. public static TimeStampReq GetInstance(
  18. object o)
  19. {
  20. if (o == null || o is TimeStampReq)
  21. {
  22. return (TimeStampReq) o;
  23. }
  24. if (o is Asn1Sequence)
  25. {
  26. return new TimeStampReq((Asn1Sequence) o);
  27. }
  28. throw new ArgumentException(
  29. "Unknown object in 'TimeStampReq' factory: " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.GetTypeName(o));
  30. }
  31. private TimeStampReq(
  32. Asn1Sequence seq)
  33. {
  34. int nbObjects = seq.Count;
  35. int seqStart = 0;
  36. // version
  37. version = DerInteger.GetInstance(seq[seqStart++]);
  38. // messageImprint
  39. messageImprint = MessageImprint.GetInstance(seq[seqStart++]);
  40. for (int opt = seqStart; opt < nbObjects; opt++)
  41. {
  42. // tsaPolicy
  43. if (seq[opt] is DerObjectIdentifier)
  44. {
  45. tsaPolicy = DerObjectIdentifier.GetInstance(seq[opt]);
  46. }
  47. // nonce
  48. else if (seq[opt] is DerInteger)
  49. {
  50. nonce = DerInteger.GetInstance(seq[opt]);
  51. }
  52. // certReq
  53. else if (seq[opt] is DerBoolean)
  54. {
  55. certReq = DerBoolean.GetInstance(seq[opt]);
  56. }
  57. // extensions
  58. else if (seq[opt] is Asn1TaggedObject)
  59. {
  60. Asn1TaggedObject tagged = (Asn1TaggedObject) seq[opt];
  61. if (tagged.TagNo == 0)
  62. {
  63. extensions = X509Extensions.GetInstance(tagged, false);
  64. }
  65. }
  66. }
  67. }
  68. public TimeStampReq(
  69. MessageImprint messageImprint,
  70. DerObjectIdentifier tsaPolicy,
  71. DerInteger nonce,
  72. DerBoolean certReq,
  73. X509Extensions extensions)
  74. {
  75. // default
  76. this.version = new DerInteger(1);
  77. this.messageImprint = messageImprint;
  78. this.tsaPolicy = tsaPolicy;
  79. this.nonce = nonce;
  80. this.certReq = certReq;
  81. this.extensions = extensions;
  82. }
  83. public DerInteger Version
  84. {
  85. get { return version; }
  86. }
  87. public MessageImprint MessageImprint
  88. {
  89. get { return messageImprint; }
  90. }
  91. public DerObjectIdentifier ReqPolicy
  92. {
  93. get { return tsaPolicy; }
  94. }
  95. public DerInteger Nonce
  96. {
  97. get { return nonce; }
  98. }
  99. public DerBoolean CertReq
  100. {
  101. get { return certReq; }
  102. }
  103. public X509Extensions Extensions
  104. {
  105. get { return extensions; }
  106. }
  107. /**
  108. * <pre>
  109. * TimeStampReq ::= SEQUENCE {
  110. * version INTEGER { v1(1) },
  111. * messageImprint MessageImprint,
  112. * --a hash algorithm OID and the hash value of the data to be
  113. * --time-stamped
  114. * reqPolicy TSAPolicyId OPTIONAL,
  115. * nonce INTEGER OPTIONAL,
  116. * certReq BOOLEAN DEFAULT FALSE,
  117. * extensions [0] IMPLICIT Extensions OPTIONAL
  118. * }
  119. * </pre>
  120. */
  121. public override Asn1Object ToAsn1Object()
  122. {
  123. Asn1EncodableVector v = new Asn1EncodableVector(
  124. version, messageImprint);
  125. if (tsaPolicy != null)
  126. {
  127. v.Add(tsaPolicy);
  128. }
  129. if (nonce != null)
  130. {
  131. v.Add(nonce);
  132. }
  133. if (certReq != null && certReq.IsTrue)
  134. {
  135. v.Add(certReq);
  136. }
  137. if (extensions != null)
  138. {
  139. v.Add(new DerTaggedObject(false, 0, extensions));
  140. }
  141. return new DerSequence(v);
  142. }
  143. }
  144. }
  145. #pragma warning restore
  146. #endif