DistributionPoint.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using System.Text;
  5. using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  6. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509
  7. {
  8. /**
  9. * The DistributionPoint object.
  10. * <pre>
  11. * DistributionPoint ::= Sequence {
  12. * distributionPoint [0] DistributionPointName OPTIONAL,
  13. * reasons [1] ReasonFlags OPTIONAL,
  14. * cRLIssuer [2] GeneralNames OPTIONAL
  15. * }
  16. * </pre>
  17. */
  18. public class DistributionPoint
  19. : Asn1Encodable
  20. {
  21. internal readonly DistributionPointName distributionPoint;
  22. internal readonly ReasonFlags reasons;
  23. internal readonly GeneralNames cRLIssuer;
  24. public static DistributionPoint GetInstance(
  25. Asn1TaggedObject obj,
  26. bool explicitly)
  27. {
  28. return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
  29. }
  30. public static DistributionPoint GetInstance(
  31. object obj)
  32. {
  33. if(obj == null || obj is DistributionPoint)
  34. {
  35. return (DistributionPoint) obj;
  36. }
  37. if(obj is Asn1Sequence)
  38. {
  39. return new DistributionPoint((Asn1Sequence) obj);
  40. }
  41. throw new ArgumentException("Invalid DistributionPoint: " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.GetTypeName(obj));
  42. }
  43. private DistributionPoint(
  44. Asn1Sequence seq)
  45. {
  46. for (int i = 0; i != seq.Count; i++)
  47. {
  48. Asn1TaggedObject t = Asn1TaggedObject.GetInstance(seq[i]);
  49. switch (t.TagNo)
  50. {
  51. case 0:
  52. distributionPoint = DistributionPointName.GetInstance(t, true);
  53. break;
  54. case 1:
  55. reasons = new ReasonFlags(DerBitString.GetInstance(t, false));
  56. break;
  57. case 2:
  58. cRLIssuer = GeneralNames.GetInstance(t, false);
  59. break;
  60. }
  61. }
  62. }
  63. public DistributionPoint(
  64. DistributionPointName distributionPointName,
  65. ReasonFlags reasons,
  66. GeneralNames crlIssuer)
  67. {
  68. this.distributionPoint = distributionPointName;
  69. this.reasons = reasons;
  70. this.cRLIssuer = crlIssuer;
  71. }
  72. public DistributionPointName DistributionPointName
  73. {
  74. get { return distributionPoint; }
  75. }
  76. public ReasonFlags Reasons
  77. {
  78. get { return reasons; }
  79. }
  80. public GeneralNames CrlIssuer
  81. {
  82. get { return cRLIssuer; }
  83. }
  84. public override Asn1Object ToAsn1Object()
  85. {
  86. Asn1EncodableVector v = new Asn1EncodableVector();
  87. // As this is a CHOICE it must be explicitly tagged
  88. v.AddOptionalTagged(true, 0, distributionPoint);
  89. v.AddOptionalTagged(false, 1, reasons);
  90. v.AddOptionalTagged(false, 2, cRLIssuer);
  91. return new DerSequence(v);
  92. }
  93. public override string ToString()
  94. {
  95. string sep = BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.NewLine;
  96. StringBuilder buf = new StringBuilder();
  97. buf.Append("DistributionPoint: [");
  98. buf.Append(sep);
  99. if (distributionPoint != null)
  100. {
  101. appendObject(buf, sep, "distributionPoint", distributionPoint.ToString());
  102. }
  103. if (reasons != null)
  104. {
  105. appendObject(buf, sep, "reasons", reasons.ToString());
  106. }
  107. if (cRLIssuer != null)
  108. {
  109. appendObject(buf, sep, "cRLIssuer", cRLIssuer.ToString());
  110. }
  111. buf.Append("]");
  112. buf.Append(sep);
  113. return buf.ToString();
  114. }
  115. private void appendObject(
  116. StringBuilder buf,
  117. string sep,
  118. string name,
  119. string val)
  120. {
  121. string indent = " ";
  122. buf.Append(indent);
  123. buf.Append(name);
  124. buf.Append(":");
  125. buf.Append(sep);
  126. buf.Append(indent);
  127. buf.Append(indent);
  128. buf.Append(val);
  129. buf.Append(sep);
  130. }
  131. }
  132. }
  133. #pragma warning restore
  134. #endif