ExtendedKeyUsage.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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. public static ExtendedKeyUsage GetInstance(
  18. Asn1TaggedObject obj,
  19. bool explicitly)
  20. {
  21. return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
  22. }
  23. public static ExtendedKeyUsage GetInstance(
  24. object obj)
  25. {
  26. if (obj is ExtendedKeyUsage)
  27. return (ExtendedKeyUsage)obj;
  28. if (obj is X509Extension)
  29. return GetInstance(X509Extension.ConvertValueToObject((X509Extension)obj));
  30. if (obj == null)
  31. return null;
  32. return new ExtendedKeyUsage(Asn1Sequence.GetInstance(obj));
  33. }
  34. public static ExtendedKeyUsage FromExtensions(X509Extensions extensions)
  35. {
  36. return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.ExtendedKeyUsage));
  37. }
  38. internal readonly IDictionary usageTable = BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.CreateHashtable();
  39. internal readonly Asn1Sequence seq;
  40. private ExtendedKeyUsage(
  41. Asn1Sequence seq)
  42. {
  43. this.seq = seq;
  44. foreach (Asn1Encodable element in seq)
  45. {
  46. DerObjectIdentifier oid = DerObjectIdentifier.GetInstance(element);
  47. this.usageTable[oid] = oid;
  48. }
  49. }
  50. public ExtendedKeyUsage(
  51. params KeyPurposeID[] usages)
  52. {
  53. this.seq = new DerSequence(usages);
  54. foreach (KeyPurposeID usage in usages)
  55. {
  56. this.usageTable[usage] = usage;
  57. }
  58. }
  59. #if !(SILVERLIGHT || PORTABLE || NETFX_CORE)
  60. [Obsolete]
  61. public ExtendedKeyUsage(
  62. ArrayList usages)
  63. : this((IEnumerable)usages)
  64. {
  65. }
  66. #endif
  67. public ExtendedKeyUsage(
  68. IEnumerable usages)
  69. {
  70. Asn1EncodableVector v = new Asn1EncodableVector();
  71. foreach (object usage in usages)
  72. {
  73. DerObjectIdentifier oid = DerObjectIdentifier.GetInstance(usage);
  74. v.Add(oid);
  75. this.usageTable[oid] = oid;
  76. }
  77. this.seq = new DerSequence(v);
  78. }
  79. public bool HasKeyPurposeId(
  80. KeyPurposeID keyPurposeId)
  81. {
  82. return usageTable.Contains(keyPurposeId);
  83. }
  84. #if !(SILVERLIGHT || PORTABLE || NETFX_CORE)
  85. public ArrayList GetUsages()
  86. {
  87. return new ArrayList(usageTable.Values);
  88. }
  89. #endif
  90. /**
  91. * Returns all extended key usages.
  92. * The returned ArrayList contains DerObjectIdentifier instances.
  93. * @return An ArrayList with all key purposes.
  94. */
  95. public IList GetAllUsages()
  96. {
  97. return BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.CreateArrayList(usageTable.Values);
  98. }
  99. public int Count
  100. {
  101. get { return usageTable.Count; }
  102. }
  103. public override Asn1Object ToAsn1Object()
  104. {
  105. return seq;
  106. }
  107. }
  108. }
  109. #pragma warning restore
  110. #endif