Asn1ObjectDescriptor.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using System.IO;
  5. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  6. namespace Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1
  7. {
  8. public sealed class Asn1ObjectDescriptor
  9. : Asn1Object
  10. {
  11. internal class Meta : Asn1UniversalType
  12. {
  13. internal static readonly Asn1UniversalType Instance = new Meta();
  14. private Meta() : base(typeof(Asn1ObjectDescriptor), Asn1Tags.ObjectDescriptor) {}
  15. internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString)
  16. {
  17. return new Asn1ObjectDescriptor(
  18. (DerGraphicString)DerGraphicString.Meta.Instance.FromImplicitPrimitive(octetString));
  19. }
  20. internal override Asn1Object FromImplicitConstructed(Asn1Sequence sequence)
  21. {
  22. return new Asn1ObjectDescriptor(
  23. (DerGraphicString)DerGraphicString.Meta.Instance.FromImplicitConstructed(sequence));
  24. }
  25. }
  26. /**
  27. * Return an ObjectDescriptor from the passed in object.
  28. *
  29. * @param obj an ASN1ObjectDescriptor or an object that can be converted into one.
  30. * @exception IllegalArgumentException if the object cannot be converted.
  31. * @return an ASN1ObjectDescriptor instance, or null.
  32. */
  33. public static Asn1ObjectDescriptor GetInstance(object obj)
  34. {
  35. if (obj == null)
  36. return null;
  37. if (obj is Asn1ObjectDescriptor asn1ObjectDescriptor)
  38. return asn1ObjectDescriptor;
  39. if (obj is IAsn1Convertible asn1Convertible)
  40. {
  41. Asn1Object asn1Object = asn1Convertible.ToAsn1Object();
  42. if (asn1Object is Asn1ObjectDescriptor converted)
  43. return converted;
  44. }
  45. else if (obj is byte[] bytes)
  46. {
  47. try
  48. {
  49. return (Asn1ObjectDescriptor)Meta.Instance.FromByteArray(bytes);
  50. }
  51. catch (IOException e)
  52. {
  53. throw new ArgumentException("failed to construct object descriptor from byte[]: " + e.Message);
  54. }
  55. }
  56. throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj");
  57. }
  58. /**
  59. * Return an ObjectDescriptor from a tagged object.
  60. *
  61. * @param taggedObject the tagged object holding the object we want.
  62. * @param declaredExplicit true if the object is meant to be explicitly tagged, false otherwise.
  63. * @exception IllegalArgumentException if the tagged object cannot be converted.
  64. * @return an ASN1ObjectDescriptor instance, or null.
  65. */
  66. public static Asn1ObjectDescriptor GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
  67. {
  68. return (Asn1ObjectDescriptor)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit);
  69. }
  70. private readonly DerGraphicString m_baseGraphicString;
  71. public Asn1ObjectDescriptor(DerGraphicString baseGraphicString)
  72. {
  73. if (null == baseGraphicString)
  74. throw new ArgumentNullException("baseGraphicString");
  75. this.m_baseGraphicString = baseGraphicString;
  76. }
  77. public DerGraphicString BaseGraphicString
  78. {
  79. get { return m_baseGraphicString; }
  80. }
  81. internal override IAsn1Encoding GetEncoding(int encoding)
  82. {
  83. return m_baseGraphicString.GetEncodingImplicit(encoding, Asn1Tags.Universal, Asn1Tags.ObjectDescriptor);
  84. }
  85. internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo)
  86. {
  87. return m_baseGraphicString.GetEncodingImplicit(encoding, tagClass, tagNo);
  88. }
  89. protected override int Asn1GetHashCode()
  90. {
  91. return ~m_baseGraphicString.CallAsn1GetHashCode();
  92. }
  93. protected override bool Asn1Equals(Asn1Object asn1Object)
  94. {
  95. Asn1ObjectDescriptor that = asn1Object as Asn1ObjectDescriptor;
  96. return null != that
  97. && this.m_baseGraphicString.Equals(that.m_baseGraphicString);
  98. }
  99. internal static Asn1ObjectDescriptor CreatePrimitive(byte[] contents)
  100. {
  101. return new Asn1ObjectDescriptor(DerGraphicString.CreatePrimitive(contents));
  102. }
  103. }
  104. }
  105. #pragma warning restore
  106. #endif