Nenhuma descrição
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

RelativeOid.cs 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System;
  2. using System.IO;
  3. namespace LipingShare.LCLib.Asn1Processor
  4. {
  5. /// <summary>
  6. /// Summary description for RelativeOid.
  7. /// </summary>
  8. internal class RelativeOid : Oid
  9. {
  10. /// <summary>
  11. /// Constructor.
  12. /// </summary>
  13. public RelativeOid()
  14. {
  15. }
  16. /// <summary>
  17. /// Encode relative OID string and put result into <see cref="Stream"/>
  18. /// </summary>
  19. /// <param name="bt">output stream.</param>
  20. /// <param name="oidStr">source OID string.</param>
  21. public override void Encode(Stream bt, string oidStr)
  22. {
  23. string[] oidList = oidStr.Split('.');
  24. ulong[] values = new ulong[oidList.Length];
  25. for (int i = 0; i < oidList.Length; i++)
  26. {
  27. values[i] = Convert.ToUInt64(oidList[i]);
  28. }
  29. for (int i = 0; i < values.Length; i++)
  30. EncodeValue(bt, values[i]);
  31. }
  32. /// <summary>
  33. /// Decode relative OID <see cref="Stream"/> and return OID string.
  34. /// </summary>
  35. /// <param name="bt">source stream.</param>
  36. /// <returns>result OID string.</returns>
  37. public override string Decode(Stream bt)
  38. {
  39. string retval = "";
  40. ulong v = 0;
  41. bool isFirst = true;
  42. while (bt.Position < bt.Length)
  43. {
  44. try
  45. {
  46. DecodeValue(bt, ref v);
  47. if (isFirst)
  48. {
  49. retval = v.ToString();
  50. isFirst = false;
  51. }
  52. else
  53. {
  54. retval += "." + v.ToString();
  55. }
  56. }
  57. catch (Exception e)
  58. {
  59. throw new Exception("Failed to decode OID value: " + e.Message);
  60. }
  61. }
  62. return retval;
  63. }
  64. }
  65. }