TSTInfo.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using System.Collections;
  5. using System.IO;
  6. using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
  7. using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  8. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Tsp
  9. {
  10. public class TstInfo
  11. : Asn1Encodable
  12. {
  13. private readonly DerInteger version;
  14. private readonly DerObjectIdentifier tsaPolicyId;
  15. private readonly MessageImprint messageImprint;
  16. private readonly DerInteger serialNumber;
  17. private readonly DerGeneralizedTime genTime;
  18. private readonly Accuracy accuracy;
  19. private readonly DerBoolean ordering;
  20. private readonly DerInteger nonce;
  21. private readonly GeneralName tsa;
  22. private readonly X509Extensions extensions;
  23. public static TstInfo GetInstance(object obj)
  24. {
  25. if (obj is TstInfo)
  26. return (TstInfo)obj;
  27. if (obj == null)
  28. return null;
  29. return new TstInfo(Asn1Sequence.GetInstance(obj));
  30. }
  31. private TstInfo(
  32. Asn1Sequence seq)
  33. {
  34. IEnumerator e = seq.GetEnumerator();
  35. // version
  36. e.MoveNext();
  37. version = DerInteger.GetInstance(e.Current);
  38. // tsaPolicy
  39. e.MoveNext();
  40. tsaPolicyId = DerObjectIdentifier.GetInstance(e.Current);
  41. // messageImprint
  42. e.MoveNext();
  43. messageImprint = MessageImprint.GetInstance(e.Current);
  44. // serialNumber
  45. e.MoveNext();
  46. serialNumber = DerInteger.GetInstance(e.Current);
  47. // genTime
  48. e.MoveNext();
  49. genTime = DerGeneralizedTime.GetInstance(e.Current);
  50. // default for ordering
  51. ordering = DerBoolean.False;
  52. while (e.MoveNext())
  53. {
  54. Asn1Object o = (Asn1Object) e.Current;
  55. if (o is Asn1TaggedObject)
  56. {
  57. DerTaggedObject tagged = (DerTaggedObject) o;
  58. switch (tagged.TagNo)
  59. {
  60. case 0:
  61. tsa = GeneralName.GetInstance(tagged, true);
  62. break;
  63. case 1:
  64. extensions = X509Extensions.GetInstance(tagged, false);
  65. break;
  66. default:
  67. throw new ArgumentException("Unknown tag value " + tagged.TagNo);
  68. }
  69. }
  70. if (o is DerSequence)
  71. {
  72. accuracy = Accuracy.GetInstance(o);
  73. }
  74. if (o is DerBoolean)
  75. {
  76. ordering = DerBoolean.GetInstance(o);
  77. }
  78. if (o is DerInteger)
  79. {
  80. nonce = DerInteger.GetInstance(o);
  81. }
  82. }
  83. }
  84. public TstInfo(
  85. DerObjectIdentifier tsaPolicyId,
  86. MessageImprint messageImprint,
  87. DerInteger serialNumber,
  88. DerGeneralizedTime genTime,
  89. Accuracy accuracy,
  90. DerBoolean ordering,
  91. DerInteger nonce,
  92. GeneralName tsa,
  93. X509Extensions extensions)
  94. {
  95. this.version = new DerInteger(1);
  96. this.tsaPolicyId = tsaPolicyId;
  97. this.messageImprint = messageImprint;
  98. this.serialNumber = serialNumber;
  99. this.genTime = genTime;
  100. this.accuracy = accuracy;
  101. this.ordering = ordering;
  102. this.nonce = nonce;
  103. this.tsa = tsa;
  104. this.extensions = extensions;
  105. }
  106. public DerInteger Version
  107. {
  108. get { return version; }
  109. }
  110. public MessageImprint MessageImprint
  111. {
  112. get { return messageImprint; }
  113. }
  114. public DerObjectIdentifier Policy
  115. {
  116. get { return tsaPolicyId; }
  117. }
  118. public DerInteger SerialNumber
  119. {
  120. get { return serialNumber; }
  121. }
  122. public Accuracy Accuracy
  123. {
  124. get { return accuracy; }
  125. }
  126. public DerGeneralizedTime GenTime
  127. {
  128. get { return genTime; }
  129. }
  130. public DerBoolean Ordering
  131. {
  132. get { return ordering; }
  133. }
  134. public DerInteger Nonce
  135. {
  136. get { return nonce; }
  137. }
  138. public GeneralName Tsa
  139. {
  140. get { return tsa; }
  141. }
  142. public X509Extensions Extensions
  143. {
  144. get { return extensions; }
  145. }
  146. /**
  147. * <pre>
  148. *
  149. * TstInfo ::= SEQUENCE {
  150. * version INTEGER { v1(1) },
  151. * policy TSAPolicyId,
  152. * messageImprint MessageImprint,
  153. * -- MUST have the same value as the similar field in
  154. * -- TimeStampReq
  155. * serialNumber INTEGER,
  156. * -- Time-Stamping users MUST be ready to accommodate integers
  157. * -- up to 160 bits.
  158. * genTime GeneralizedTime,
  159. * accuracy Accuracy OPTIONAL,
  160. * ordering BOOLEAN DEFAULT FALSE,
  161. * nonce INTEGER OPTIONAL,
  162. * -- MUST be present if the similar field was present
  163. * -- in TimeStampReq. In that case it MUST have the same value.
  164. * tsa [0] GeneralName OPTIONAL,
  165. * extensions [1] IMPLICIT Extensions OPTIONAL }
  166. *
  167. * </pre>
  168. */
  169. public override Asn1Object ToAsn1Object()
  170. {
  171. Asn1EncodableVector v = new Asn1EncodableVector(version, tsaPolicyId, messageImprint, serialNumber, genTime);
  172. v.AddOptional(accuracy);
  173. if (ordering != null && ordering.IsTrue)
  174. {
  175. v.Add(ordering);
  176. }
  177. v.AddOptional(nonce);
  178. v.AddOptionalTagged(true, 0, tsa);
  179. v.AddOptionalTagged(false, 1, extensions);
  180. return new DerSequence(v);
  181. }
  182. }
  183. }
  184. #pragma warning restore
  185. #endif