DerSet.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. namespace Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1
  5. {
  6. /**
  7. * A Der encoded set object
  8. */
  9. public class DerSet
  10. : Asn1Set
  11. {
  12. public static readonly DerSet Empty = new DerSet();
  13. public static DerSet FromVector(Asn1EncodableVector elementVector)
  14. {
  15. return elementVector.Count < 1 ? Empty : new DerSet(elementVector);
  16. }
  17. /**
  18. * create an empty set
  19. */
  20. public DerSet()
  21. : base()
  22. {
  23. }
  24. /**
  25. * @param obj - a single object that makes up the set.
  26. */
  27. public DerSet(Asn1Encodable element)
  28. : base(element)
  29. {
  30. }
  31. public DerSet(params Asn1Encodable[] elements)
  32. : base(elements, true)
  33. {
  34. }
  35. internal DerSet(Asn1Encodable[] elements, bool doSort)
  36. : base(elements, doSort)
  37. {
  38. }
  39. /**
  40. * @param v - a vector of objects making up the set.
  41. */
  42. public DerSet(Asn1EncodableVector elementVector)
  43. : base(elementVector, true)
  44. {
  45. }
  46. internal DerSet(Asn1EncodableVector elementVector, bool doSort)
  47. : base(elementVector, doSort)
  48. {
  49. }
  50. internal DerSet(bool isSorted, Asn1Encodable[] elements)
  51. : base(isSorted, elements)
  52. {
  53. }
  54. internal override IAsn1Encoding GetEncoding(int encoding)
  55. {
  56. return new ConstructedDLEncoding(Asn1Tags.Universal, Asn1Tags.Set,
  57. Asn1OutputStream.GetContentsEncodings(Asn1OutputStream.EncodingDer, GetSortedElements()));
  58. }
  59. internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo)
  60. {
  61. return new ConstructedDLEncoding(tagClass, tagNo,
  62. Asn1OutputStream.GetContentsEncodings(Asn1OutputStream.EncodingDer, GetSortedElements()));
  63. }
  64. private Asn1Encodable[] GetSortedElements()
  65. {
  66. if (isSorted)
  67. return elements;
  68. int count = elements.Length;
  69. Asn1Object[] asn1Objects = new Asn1Object[count];
  70. for (int i = 0; i < count; ++i)
  71. {
  72. asn1Objects[i] = elements[i].ToAsn1Object();
  73. }
  74. return Sort(asn1Objects);
  75. }
  76. }
  77. }
  78. #pragma warning restore
  79. #endif