V2AttributeCertificateInfoGenerator.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509
  5. {
  6. /**
  7. * Generator for Version 2 AttributeCertificateInfo
  8. * <pre>
  9. * AttributeCertificateInfo ::= Sequence {
  10. * version AttCertVersion -- version is v2,
  11. * holder Holder,
  12. * issuer AttCertIssuer,
  13. * signature AlgorithmIdentifier,
  14. * serialNumber CertificateSerialNumber,
  15. * attrCertValidityPeriod AttCertValidityPeriod,
  16. * attributes Sequence OF Attr,
  17. * issuerUniqueID UniqueIdentifier OPTIONAL,
  18. * extensions Extensions OPTIONAL
  19. * }
  20. * </pre>
  21. *
  22. */
  23. public class V2AttributeCertificateInfoGenerator
  24. {
  25. internal DerInteger version;
  26. internal Holder holder;
  27. internal AttCertIssuer issuer;
  28. internal AlgorithmIdentifier signature;
  29. internal DerInteger serialNumber;
  30. // internal AttCertValidityPeriod attrCertValidityPeriod;
  31. internal Asn1EncodableVector attributes;
  32. internal DerBitString issuerUniqueID;
  33. internal X509Extensions extensions;
  34. internal DerGeneralizedTime startDate, endDate;
  35. public V2AttributeCertificateInfoGenerator()
  36. {
  37. this.version = new DerInteger(1);
  38. attributes = new Asn1EncodableVector();
  39. }
  40. public void SetHolder(
  41. Holder holder)
  42. {
  43. this.holder = holder;
  44. }
  45. public void AddAttribute(
  46. string oid,
  47. Asn1Encodable value)
  48. {
  49. attributes.Add(new AttributeX509(new DerObjectIdentifier(oid), new DerSet(value)));
  50. }
  51. /**
  52. * @param attribute
  53. */
  54. public void AddAttribute(AttributeX509 attribute)
  55. {
  56. attributes.Add(attribute);
  57. }
  58. public void SetSerialNumber(
  59. DerInteger serialNumber)
  60. {
  61. this.serialNumber = serialNumber;
  62. }
  63. public void SetSignature(
  64. AlgorithmIdentifier signature)
  65. {
  66. this.signature = signature;
  67. }
  68. public void SetIssuer(
  69. AttCertIssuer issuer)
  70. {
  71. this.issuer = issuer;
  72. }
  73. public void SetStartDate(
  74. DerGeneralizedTime startDate)
  75. {
  76. this.startDate = startDate;
  77. }
  78. public void SetEndDate(
  79. DerGeneralizedTime endDate)
  80. {
  81. this.endDate = endDate;
  82. }
  83. public void SetIssuerUniqueID(
  84. DerBitString issuerUniqueID)
  85. {
  86. this.issuerUniqueID = issuerUniqueID;
  87. }
  88. public void SetExtensions(
  89. X509Extensions extensions)
  90. {
  91. this.extensions = extensions;
  92. }
  93. public AttributeCertificateInfo GenerateAttributeCertificateInfo()
  94. {
  95. if ((serialNumber == null) || (signature == null)
  96. || (issuer == null) || (startDate == null) || (endDate == null)
  97. || (holder == null) || (attributes == null))
  98. {
  99. throw new InvalidOperationException("not all mandatory fields set in V2 AttributeCertificateInfo generator");
  100. }
  101. Asn1EncodableVector v = new Asn1EncodableVector(
  102. version, holder, issuer, signature, serialNumber);
  103. //
  104. // before and after dates => AttCertValidityPeriod
  105. //
  106. v.Add(new AttCertValidityPeriod(startDate, endDate));
  107. // Attributes
  108. v.Add(new DerSequence(attributes));
  109. if (issuerUniqueID != null)
  110. {
  111. v.Add(issuerUniqueID);
  112. }
  113. if (extensions != null)
  114. {
  115. v.Add(extensions);
  116. }
  117. return AttributeCertificateInfo.GetInstance(new DerSequence(v));
  118. }
  119. }
  120. }
  121. #pragma warning restore
  122. #endif