ExtendedKeyUsage.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using System.Collections.Generic;
  5. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  6. namespace Best.HTTP.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 ISet<DerObjectIdentifier> m_usageTable = new HashSet<DerObjectIdentifier>();
  39. internal readonly Asn1Sequence seq;
  40. private ExtendedKeyUsage(Asn1Sequence seq)
  41. {
  42. this.seq = seq;
  43. foreach (Asn1Encodable element in seq)
  44. {
  45. DerObjectIdentifier oid = DerObjectIdentifier.GetInstance(element);
  46. m_usageTable.Add(oid);
  47. }
  48. }
  49. public ExtendedKeyUsage(params KeyPurposeID[] usages)
  50. {
  51. this.seq = new DerSequence(usages);
  52. foreach (KeyPurposeID usage in usages)
  53. {
  54. m_usageTable.Add(usage);
  55. }
  56. }
  57. public ExtendedKeyUsage(IEnumerable<DerObjectIdentifier> usages)
  58. {
  59. Asn1EncodableVector v = new Asn1EncodableVector();
  60. foreach (object usage in usages)
  61. {
  62. DerObjectIdentifier oid = DerObjectIdentifier.GetInstance(usage);
  63. v.Add(oid);
  64. m_usageTable.Add(oid);
  65. }
  66. this.seq = new DerSequence(v);
  67. }
  68. public bool HasKeyPurposeId(KeyPurposeID keyPurposeId)
  69. {
  70. return m_usageTable.Contains(keyPurposeId);
  71. }
  72. /**
  73. * Returns all extended key usages.
  74. * The returned ArrayList contains DerObjectIdentifier instances.
  75. * @return An ArrayList with all key purposes.
  76. */
  77. public IList<DerObjectIdentifier> GetAllUsages()
  78. {
  79. return new List<DerObjectIdentifier>(m_usageTable);
  80. }
  81. public int Count
  82. {
  83. get { return m_usageTable.Count; }
  84. }
  85. public override Asn1Object ToAsn1Object()
  86. {
  87. return seq;
  88. }
  89. }
  90. }
  91. #pragma warning restore
  92. #endif