BerBitStringParser.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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.IO;
  6. namespace Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1
  7. {
  8. /// <summary>A parser for indefinite-length BIT STRINGs.</summary>
  9. internal class BerBitStringParser
  10. : Asn1BitStringParser
  11. {
  12. private readonly Asn1StreamParser m_parser;
  13. private ConstructedBitStream m_bitStream;
  14. internal BerBitStringParser(Asn1StreamParser parser)
  15. {
  16. m_parser = parser;
  17. }
  18. public Stream GetOctetStream()
  19. {
  20. return m_bitStream = new ConstructedBitStream(m_parser, true);
  21. }
  22. public Stream GetBitStream()
  23. {
  24. return m_bitStream = new ConstructedBitStream(m_parser, false);
  25. }
  26. public int PadBits
  27. {
  28. get { return m_bitStream.PadBits; }
  29. }
  30. public Asn1Object ToAsn1Object()
  31. {
  32. try
  33. {
  34. return Parse(m_parser);
  35. }
  36. catch (IOException e)
  37. {
  38. throw new Asn1ParsingException("IOException converting stream to byte array: " + e.Message, e);
  39. }
  40. }
  41. internal static BerBitString Parse(Asn1StreamParser sp)
  42. {
  43. ConstructedBitStream bitStream = new ConstructedBitStream(sp, false);
  44. byte[] data = Streams.ReadAll(bitStream);
  45. int padBits = bitStream.PadBits;
  46. return new BerBitString(data, padBits);
  47. }
  48. }
  49. }
  50. #pragma warning restore
  51. #endif