CertTemplateBuilder.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf
  6. {
  7. public class CertTemplateBuilder
  8. {
  9. private DerInteger version;
  10. private DerInteger serialNumber;
  11. private AlgorithmIdentifier signingAlg;
  12. private X509Name issuer;
  13. private OptionalValidity validity;
  14. private X509Name subject;
  15. private SubjectPublicKeyInfo publicKey;
  16. private DerBitString issuerUID;
  17. private DerBitString subjectUID;
  18. private X509Extensions extensions;
  19. /** Sets the X.509 version. Note: for X509v3, use 2 here. */
  20. public virtual CertTemplateBuilder SetVersion(int ver)
  21. {
  22. version = new DerInteger(ver);
  23. return this;
  24. }
  25. public virtual CertTemplateBuilder SetSerialNumber(DerInteger ser)
  26. {
  27. serialNumber = ser;
  28. return this;
  29. }
  30. public virtual CertTemplateBuilder SetSigningAlg(AlgorithmIdentifier aid)
  31. {
  32. signingAlg = aid;
  33. return this;
  34. }
  35. public virtual CertTemplateBuilder SetIssuer(X509Name name)
  36. {
  37. issuer = name;
  38. return this;
  39. }
  40. public virtual CertTemplateBuilder SetValidity(OptionalValidity v)
  41. {
  42. validity = v;
  43. return this;
  44. }
  45. public virtual CertTemplateBuilder SetSubject(X509Name name)
  46. {
  47. subject = name;
  48. return this;
  49. }
  50. public virtual CertTemplateBuilder SetPublicKey(SubjectPublicKeyInfo spki)
  51. {
  52. publicKey = spki;
  53. return this;
  54. }
  55. /** Sets the issuer unique ID (deprecated in X.509v3) */
  56. public virtual CertTemplateBuilder SetIssuerUID(DerBitString uid)
  57. {
  58. issuerUID = uid;
  59. return this;
  60. }
  61. /** Sets the subject unique ID (deprecated in X.509v3) */
  62. public virtual CertTemplateBuilder SetSubjectUID(DerBitString uid)
  63. {
  64. subjectUID = uid;
  65. return this;
  66. }
  67. public virtual CertTemplateBuilder SetExtensions(X509Extensions extens)
  68. {
  69. extensions = extens;
  70. return this;
  71. }
  72. /**
  73. * <pre>
  74. * CertTemplate ::= SEQUENCE {
  75. * version [0] Version OPTIONAL,
  76. * serialNumber [1] INTEGER OPTIONAL,
  77. * signingAlg [2] AlgorithmIdentifier OPTIONAL,
  78. * issuer [3] Name OPTIONAL,
  79. * validity [4] OptionalValidity OPTIONAL,
  80. * subject [5] Name OPTIONAL,
  81. * publicKey [6] SubjectPublicKeyInfo OPTIONAL,
  82. * issuerUID [7] UniqueIdentifier OPTIONAL,
  83. * subjectUID [8] UniqueIdentifier OPTIONAL,
  84. * extensions [9] Extensions OPTIONAL }
  85. * </pre>
  86. * @return a basic ASN.1 object representation.
  87. */
  88. public virtual CertTemplate Build()
  89. {
  90. Asn1EncodableVector v = new Asn1EncodableVector();
  91. AddOptional(v, 0, false, version);
  92. AddOptional(v, 1, false, serialNumber);
  93. AddOptional(v, 2, false, signingAlg);
  94. AddOptional(v, 3, true, issuer); // CHOICE
  95. AddOptional(v, 4, false, validity);
  96. AddOptional(v, 5, true, subject); // CHOICE
  97. AddOptional(v, 6, false, publicKey);
  98. AddOptional(v, 7, false, issuerUID);
  99. AddOptional(v, 8, false, subjectUID);
  100. AddOptional(v, 9, false, extensions);
  101. return CertTemplate.GetInstance(new DerSequence(v));
  102. }
  103. private void AddOptional(Asn1EncodableVector v, int tagNo, bool isExplicit, Asn1Encodable obj)
  104. {
  105. if (obj != null)
  106. {
  107. v.Add(new DerTaggedObject(isExplicit, tagNo, obj));
  108. }
  109. }
  110. }
  111. }
  112. #pragma warning restore
  113. #endif