TSTInfo.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  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(
  24. object o)
  25. {
  26. if (o == null || o is TstInfo)
  27. {
  28. return (TstInfo) o;
  29. }
  30. if (o is Asn1Sequence)
  31. {
  32. return new TstInfo((Asn1Sequence) o);
  33. }
  34. if (o is Asn1OctetString)
  35. {
  36. try
  37. {
  38. byte[] octets = ((Asn1OctetString)o).GetOctets();
  39. return GetInstance(Asn1Object.FromByteArray(octets));
  40. }
  41. catch (IOException)
  42. {
  43. throw new ArgumentException(
  44. "Bad object format in 'TstInfo' factory.");
  45. }
  46. }
  47. throw new ArgumentException(
  48. "Unknown object in 'TstInfo' factory: " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.GetTypeName(o));
  49. }
  50. private TstInfo(
  51. Asn1Sequence seq)
  52. {
  53. IEnumerator e = seq.GetEnumerator();
  54. // version
  55. e.MoveNext();
  56. version = DerInteger.GetInstance(e.Current);
  57. // tsaPolicy
  58. e.MoveNext();
  59. tsaPolicyId = DerObjectIdentifier.GetInstance(e.Current);
  60. // messageImprint
  61. e.MoveNext();
  62. messageImprint = MessageImprint.GetInstance(e.Current);
  63. // serialNumber
  64. e.MoveNext();
  65. serialNumber = DerInteger.GetInstance(e.Current);
  66. // genTime
  67. e.MoveNext();
  68. genTime = DerGeneralizedTime.GetInstance(e.Current);
  69. // default for ordering
  70. ordering = DerBoolean.False;
  71. while (e.MoveNext())
  72. {
  73. Asn1Object o = (Asn1Object) e.Current;
  74. if (o is Asn1TaggedObject)
  75. {
  76. DerTaggedObject tagged = (DerTaggedObject) o;
  77. switch (tagged.TagNo)
  78. {
  79. case 0:
  80. tsa = GeneralName.GetInstance(tagged, true);
  81. break;
  82. case 1:
  83. extensions = X509Extensions.GetInstance(tagged, false);
  84. break;
  85. default:
  86. throw new ArgumentException("Unknown tag value " + tagged.TagNo);
  87. }
  88. }
  89. if (o is DerSequence)
  90. {
  91. accuracy = Accuracy.GetInstance(o);
  92. }
  93. if (o is DerBoolean)
  94. {
  95. ordering = DerBoolean.GetInstance(o);
  96. }
  97. if (o is DerInteger)
  98. {
  99. nonce = DerInteger.GetInstance(o);
  100. }
  101. }
  102. }
  103. public TstInfo(
  104. DerObjectIdentifier tsaPolicyId,
  105. MessageImprint messageImprint,
  106. DerInteger serialNumber,
  107. DerGeneralizedTime genTime,
  108. Accuracy accuracy,
  109. DerBoolean ordering,
  110. DerInteger nonce,
  111. GeneralName tsa,
  112. X509Extensions extensions)
  113. {
  114. this.version = new DerInteger(1);
  115. this.tsaPolicyId = tsaPolicyId;
  116. this.messageImprint = messageImprint;
  117. this.serialNumber = serialNumber;
  118. this.genTime = genTime;
  119. this.accuracy = accuracy;
  120. this.ordering = ordering;
  121. this.nonce = nonce;
  122. this.tsa = tsa;
  123. this.extensions = extensions;
  124. }
  125. public DerInteger Version
  126. {
  127. get { return version; }
  128. }
  129. public MessageImprint MessageImprint
  130. {
  131. get { return messageImprint; }
  132. }
  133. public DerObjectIdentifier Policy
  134. {
  135. get { return tsaPolicyId; }
  136. }
  137. public DerInteger SerialNumber
  138. {
  139. get { return serialNumber; }
  140. }
  141. public Accuracy Accuracy
  142. {
  143. get { return accuracy; }
  144. }
  145. public DerGeneralizedTime GenTime
  146. {
  147. get { return genTime; }
  148. }
  149. public DerBoolean Ordering
  150. {
  151. get { return ordering; }
  152. }
  153. public DerInteger Nonce
  154. {
  155. get { return nonce; }
  156. }
  157. public GeneralName Tsa
  158. {
  159. get { return tsa; }
  160. }
  161. public X509Extensions Extensions
  162. {
  163. get { return extensions; }
  164. }
  165. /**
  166. * <pre>
  167. *
  168. * TstInfo ::= SEQUENCE {
  169. * version INTEGER { v1(1) },
  170. * policy TSAPolicyId,
  171. * messageImprint MessageImprint,
  172. * -- MUST have the same value as the similar field in
  173. * -- TimeStampReq
  174. * serialNumber INTEGER,
  175. * -- Time-Stamping users MUST be ready to accommodate integers
  176. * -- up to 160 bits.
  177. * genTime GeneralizedTime,
  178. * accuracy Accuracy OPTIONAL,
  179. * ordering BOOLEAN DEFAULT FALSE,
  180. * nonce INTEGER OPTIONAL,
  181. * -- MUST be present if the similar field was present
  182. * -- in TimeStampReq. In that case it MUST have the same value.
  183. * tsa [0] GeneralName OPTIONAL,
  184. * extensions [1] IMPLICIT Extensions OPTIONAL }
  185. *
  186. * </pre>
  187. */
  188. public override Asn1Object ToAsn1Object()
  189. {
  190. Asn1EncodableVector v = new Asn1EncodableVector(
  191. version, tsaPolicyId, messageImprint, serialNumber, genTime);
  192. if (accuracy != null)
  193. {
  194. v.Add(accuracy);
  195. }
  196. if (ordering != null && ordering.IsTrue)
  197. {
  198. v.Add(ordering);
  199. }
  200. if (nonce != null)
  201. {
  202. v.Add(nonce);
  203. }
  204. if (tsa != null)
  205. {
  206. v.Add(new DerTaggedObject(true, 0, tsa));
  207. }
  208. if (extensions != null)
  209. {
  210. v.Add(new DerTaggedObject(false, 1, extensions));
  211. }
  212. return new DerSequence(v);
  213. }
  214. }
  215. }
  216. #pragma warning restore
  217. #endif