V2AttributeCertificateInfoGenerator.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. namespace Best.HTTP.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 Asn1EncodableVector attributes;
  31. internal DerBitString issuerUniqueID;
  32. internal X509Extensions extensions;
  33. // Note: validity period start/end dates stored directly
  34. //internal AttCertValidityPeriod attrCertValidityPeriod;
  35. internal Asn1GeneralizedTime startDate, endDate;
  36. public V2AttributeCertificateInfoGenerator()
  37. {
  38. this.version = new DerInteger(1);
  39. attributes = new Asn1EncodableVector();
  40. }
  41. public void SetHolder(
  42. Holder holder)
  43. {
  44. this.holder = holder;
  45. }
  46. public void AddAttribute(
  47. string oid,
  48. Asn1Encodable value)
  49. {
  50. attributes.Add(new AttributeX509(new DerObjectIdentifier(oid), new DerSet(value)));
  51. }
  52. /**
  53. * @param attribute
  54. */
  55. public void AddAttribute(AttributeX509 attribute)
  56. {
  57. attributes.Add(attribute);
  58. }
  59. public void SetSerialNumber(
  60. DerInteger serialNumber)
  61. {
  62. this.serialNumber = serialNumber;
  63. }
  64. public void SetSignature(
  65. AlgorithmIdentifier signature)
  66. {
  67. this.signature = signature;
  68. }
  69. public void SetIssuer(
  70. AttCertIssuer issuer)
  71. {
  72. this.issuer = issuer;
  73. }
  74. public void SetStartDate(
  75. Asn1GeneralizedTime startDate)
  76. {
  77. this.startDate = startDate;
  78. }
  79. public void SetEndDate(
  80. Asn1GeneralizedTime endDate)
  81. {
  82. this.endDate = endDate;
  83. }
  84. public void SetIssuerUniqueID(
  85. DerBitString issuerUniqueID)
  86. {
  87. this.issuerUniqueID = issuerUniqueID;
  88. }
  89. public void SetExtensions(
  90. X509Extensions extensions)
  91. {
  92. this.extensions = extensions;
  93. }
  94. public AttributeCertificateInfo GenerateAttributeCertificateInfo()
  95. {
  96. if ((serialNumber == null) || (signature == null)
  97. || (issuer == null) || (startDate == null) || (endDate == null)
  98. || (holder == null) || (attributes == null))
  99. {
  100. throw new InvalidOperationException("not all mandatory fields set in V2 AttributeCertificateInfo generator");
  101. }
  102. Asn1EncodableVector v = new Asn1EncodableVector(
  103. version, holder, issuer, signature, serialNumber);
  104. //
  105. // before and after dates => AttCertValidityPeriod
  106. //
  107. v.Add(new AttCertValidityPeriod(startDate, endDate));
  108. // Attributes
  109. v.Add(new DerSequence(attributes));
  110. if (issuerUniqueID != null)
  111. {
  112. v.Add(issuerUniqueID);
  113. }
  114. if (extensions != null)
  115. {
  116. v.Add(extensions);
  117. }
  118. return AttributeCertificateInfo.GetInstance(new DerSequence(v));
  119. }
  120. }
  121. }
  122. #pragma warning restore
  123. #endif