TimeStampRequestGenerator.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using System.Collections.Generic;
  5. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1;
  6. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1.Tsp;
  7. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
  8. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Math;
  9. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  10. namespace Best.HTTP.SecureProtocol.Org.BouncyCastle.Tsp
  11. {
  12. /**
  13. * Generator for RFC 3161 Time Stamp Request objects.
  14. */
  15. public class TimeStampRequestGenerator
  16. {
  17. private DerObjectIdentifier reqPolicy;
  18. private DerBoolean certReq;
  19. private Dictionary<DerObjectIdentifier, X509Extension> m_extensions =
  20. new Dictionary<DerObjectIdentifier, X509Extension>();
  21. private List<DerObjectIdentifier> m_ordering = new List<DerObjectIdentifier>();
  22. public void SetReqPolicy(string reqPolicy)
  23. {
  24. this.reqPolicy = new DerObjectIdentifier(reqPolicy);
  25. }
  26. public void SetCertReq(bool certReq)
  27. {
  28. this.certReq = DerBoolean.GetInstance(certReq);
  29. }
  30. /**
  31. * add a given extension field for the standard extensions tag (tag 3)
  32. * @throws IOException
  33. */
  34. public virtual void AddExtension(DerObjectIdentifier oid, bool critical, Asn1Encodable extValue)
  35. {
  36. this.AddExtension(oid, critical, extValue.GetEncoded());
  37. }
  38. /**
  39. * add a given extension field for the standard extensions tag
  40. * The value parameter becomes the contents of the octet string associated
  41. * with the extension.
  42. */
  43. public virtual void AddExtension(DerObjectIdentifier oid, bool critical, byte[] extValue)
  44. {
  45. m_extensions.Add(oid, new X509Extension(critical, new DerOctetString(extValue)));
  46. m_ordering.Add(oid);
  47. }
  48. public TimeStampRequest Generate(string digestAlgorithm, byte[] digest)
  49. {
  50. return Generate(digestAlgorithm, digest, null);
  51. }
  52. public TimeStampRequest Generate(string digestAlgorithmOid, byte[] digest, BigInteger nonce)
  53. {
  54. if (digestAlgorithmOid == null)
  55. throw new ArgumentException("No digest algorithm specified");
  56. DerObjectIdentifier digestAlgOid = new DerObjectIdentifier(digestAlgorithmOid);
  57. AlgorithmIdentifier algID = new AlgorithmIdentifier(digestAlgOid, DerNull.Instance);
  58. MessageImprint messageImprint = new MessageImprint(algID, digest);
  59. X509Extensions ext = null;
  60. if (m_ordering.Count > 0)
  61. {
  62. ext = new X509Extensions(m_ordering, m_extensions);
  63. }
  64. DerInteger derNonce = nonce == null ? null : new DerInteger(nonce);
  65. return new TimeStampRequest(
  66. new TimeStampReq(messageImprint, reqPolicy, derNonce, certReq, ext));
  67. }
  68. public virtual TimeStampRequest Generate(DerObjectIdentifier digestAlgorithm, byte[] digest)
  69. {
  70. return Generate(digestAlgorithm.Id, digest);
  71. }
  72. public virtual TimeStampRequest Generate(DerObjectIdentifier digestAlgorithm, byte[] digest, BigInteger nonce)
  73. {
  74. return Generate(digestAlgorithm.Id, digest, nonce);
  75. }
  76. }
  77. }
  78. #pragma warning restore
  79. #endif