CertificatePolicies.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using System.Text;
  5. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509
  6. {
  7. public class CertificatePolicies
  8. : Asn1Encodable
  9. {
  10. private static PolicyInformation[] Copy(PolicyInformation[] policyInfo)
  11. {
  12. return (PolicyInformation[])policyInfo.Clone();
  13. }
  14. public static CertificatePolicies GetInstance(object obj)
  15. {
  16. if (obj is CertificatePolicies)
  17. return (CertificatePolicies)obj;
  18. if (obj == null)
  19. return null;
  20. return new CertificatePolicies(Asn1Sequence.GetInstance(obj));
  21. }
  22. public static CertificatePolicies GetInstance(Asn1TaggedObject obj, bool isExplicit)
  23. {
  24. return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
  25. }
  26. public static CertificatePolicies FromExtensions(X509Extensions extensions)
  27. {
  28. return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.CertificatePolicies));
  29. }
  30. private readonly PolicyInformation[] policyInformation;
  31. /**
  32. * Construct a CertificatePolicies object containing one PolicyInformation.
  33. *
  34. * @param name the name to be contained.
  35. */
  36. public CertificatePolicies(PolicyInformation name)
  37. {
  38. this.policyInformation = new PolicyInformation[] { name };
  39. }
  40. public CertificatePolicies(PolicyInformation[] policyInformation)
  41. {
  42. this.policyInformation = Copy(policyInformation);
  43. }
  44. private CertificatePolicies(Asn1Sequence seq)
  45. {
  46. this.policyInformation = new PolicyInformation[seq.Count];
  47. for (int i = 0; i < seq.Count; ++i)
  48. {
  49. policyInformation[i] = PolicyInformation.GetInstance(seq[i]);
  50. }
  51. }
  52. public virtual PolicyInformation[] GetPolicyInformation()
  53. {
  54. return Copy(policyInformation);
  55. }
  56. public virtual PolicyInformation GetPolicyInformation(DerObjectIdentifier policyIdentifier)
  57. {
  58. for (int i = 0; i != policyInformation.Length; i++)
  59. {
  60. if (policyIdentifier.Equals(policyInformation[i].PolicyIdentifier))
  61. {
  62. return policyInformation[i];
  63. }
  64. }
  65. return null;
  66. }
  67. /**
  68. * Produce an object suitable for an ASN1OutputStream.
  69. * <pre>
  70. * CertificatePolicies ::= SEQUENCE SIZE {1..MAX} OF PolicyInformation
  71. * </pre>
  72. */
  73. public override Asn1Object ToAsn1Object()
  74. {
  75. return new DerSequence(policyInformation);
  76. }
  77. public override string ToString()
  78. {
  79. StringBuilder sb = new StringBuilder("CertificatePolicies:");
  80. if (policyInformation != null && policyInformation.Length > 0)
  81. {
  82. sb.Append(' ');
  83. sb.Append(policyInformation[0]);
  84. for (int i = 1; i < policyInformation.Length; ++i)
  85. {
  86. sb.Append(", ");
  87. sb.Append(policyInformation[i]);
  88. }
  89. }
  90. return sb.ToString();
  91. }
  92. }
  93. }
  94. #pragma warning restore
  95. #endif