TSTInfo.cs 5.1 KB

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