ExtendedKeyUsage.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using System.Collections;
  5. using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  6. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509
  7. {
  8. /**
  9. * The extendedKeyUsage object.
  10. * <pre>
  11. * extendedKeyUsage ::= Sequence SIZE (1..MAX) OF KeyPurposeId
  12. * </pre>
  13. */
  14. public class ExtendedKeyUsage
  15. : Asn1Encodable
  16. {
  17. internal readonly IDictionary usageTable = BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.CreateHashtable();
  18. internal readonly Asn1Sequence seq;
  19. public static ExtendedKeyUsage GetInstance(
  20. Asn1TaggedObject obj,
  21. bool explicitly)
  22. {
  23. return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
  24. }
  25. public static ExtendedKeyUsage GetInstance(
  26. object obj)
  27. {
  28. if (obj is ExtendedKeyUsage)
  29. {
  30. return (ExtendedKeyUsage) obj;
  31. }
  32. if (obj is Asn1Sequence)
  33. {
  34. return new ExtendedKeyUsage((Asn1Sequence) obj);
  35. }
  36. if (obj is X509Extension)
  37. {
  38. return GetInstance(X509Extension.ConvertValueToObject((X509Extension) obj));
  39. }
  40. throw new ArgumentException("Invalid ExtendedKeyUsage: " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.GetTypeName(obj));
  41. }
  42. private ExtendedKeyUsage(
  43. Asn1Sequence seq)
  44. {
  45. this.seq = seq;
  46. foreach (object o in seq)
  47. {
  48. if (!(o is DerObjectIdentifier))
  49. throw new ArgumentException("Only DerObjectIdentifier instances allowed in ExtendedKeyUsage.");
  50. this.usageTable[o] = o;
  51. }
  52. }
  53. public ExtendedKeyUsage(
  54. params KeyPurposeID[] usages)
  55. {
  56. this.seq = new DerSequence(usages);
  57. foreach (KeyPurposeID usage in usages)
  58. {
  59. this.usageTable[usage] = usage;
  60. }
  61. }
  62. #if !(SILVERLIGHT || PORTABLE || NETFX_CORE)
  63. [Obsolete]
  64. public ExtendedKeyUsage(
  65. ArrayList usages)
  66. : this((IEnumerable)usages)
  67. {
  68. }
  69. #endif
  70. public ExtendedKeyUsage(
  71. IEnumerable usages)
  72. {
  73. Asn1EncodableVector v = new Asn1EncodableVector();
  74. foreach (object usage in usages)
  75. {
  76. Asn1Encodable o = KeyPurposeID.GetInstance(usage);
  77. v.Add(o);
  78. this.usageTable[o] = o;
  79. }
  80. this.seq = new DerSequence(v);
  81. }
  82. public bool HasKeyPurposeId(
  83. KeyPurposeID keyPurposeId)
  84. {
  85. return usageTable.Contains(keyPurposeId);
  86. }
  87. #if !(SILVERLIGHT || PORTABLE || NETFX_CORE)
  88. [Obsolete("Use 'GetAllUsages'")]
  89. public ArrayList GetUsages()
  90. {
  91. return new ArrayList(usageTable.Values);
  92. }
  93. #endif
  94. /**
  95. * Returns all extended key usages.
  96. * The returned ArrayList contains DerObjectIdentifier instances.
  97. * @return An ArrayList with all key purposes.
  98. */
  99. public IList GetAllUsages()
  100. {
  101. return BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.CreateArrayList(usageTable.Values);
  102. }
  103. public int Count
  104. {
  105. get { return usageTable.Count; }
  106. }
  107. public override Asn1Object ToAsn1Object()
  108. {
  109. return seq;
  110. }
  111. }
  112. }
  113. #pragma warning restore
  114. #endif