You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
2.6 KiB

  1. using JT808.Protocol.Exceptions;
  2. using JT808.Protocol.Extensions;
  3. using JT808.Protocol.Formatters;
  4. using JT808.Protocol.Interfaces;
  5. using JT808.Protocol.MessagePack;
  6. using System.Text.Json;
  7. namespace JT808.Protocol.MessageBody
  8. {
  9. /// <summary>
  10. /// 平台RSA公钥
  11. /// 0x8A00
  12. /// </summary>
  13. public class JT808_0x8A00 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x8A00>, IJT808Analyze
  14. {
  15. /// <summary>
  16. /// 0x8A00
  17. /// </summary>
  18. public override ushort MsgId { get; } = 0x8A00;
  19. /// <summary>
  20. /// 平台RSA公钥
  21. /// </summary>
  22. public override string Description => "平台RSA公钥";
  23. /// <summary>
  24. /// e
  25. /// 平台 RSA 公钥{e,n}中的 e
  26. /// </summary>
  27. public uint E { get; set; }
  28. /// <summary>
  29. /// n
  30. /// RSA 公钥{e,n}中的 n
  31. /// </summary>
  32. public byte[] N { get; set; }
  33. /// <summary>
  34. ///
  35. /// </summary>
  36. /// <param name="reader"></param>
  37. /// <param name="config"></param>
  38. /// <returns></returns>
  39. public JT808_0x8A00 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  40. {
  41. JT808_0x8A00 jT808_0X8A00 = new JT808_0x8A00();
  42. jT808_0X8A00.E = reader.ReadUInt32();
  43. jT808_0X8A00.N = reader.ReadArray(128).ToArray();
  44. return jT808_0X8A00;
  45. }
  46. /// <summary>
  47. ///
  48. /// </summary>
  49. /// <param name="writer"></param>
  50. /// <param name="value"></param>
  51. /// <param name="config"></param>
  52. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8A00 value, IJT808Config config)
  53. {
  54. writer.WriteUInt32(value.E);
  55. if (value.N.Length != 128)
  56. {
  57. throw new JT808Exception(Enums.JT808ErrorCode.NotEnoughLength, $"{nameof(value.N)}->128");
  58. }
  59. writer.WriteArray(value.N);
  60. }
  61. /// <summary>
  62. ///
  63. /// </summary>
  64. /// <param name="reader"></param>
  65. /// <param name="writer"></param>
  66. /// <param name="config"></param>
  67. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  68. {
  69. JT808_0x8A00 jT808_0X8A00 = new JT808_0x8A00();
  70. jT808_0X8A00.E = reader.ReadUInt32();
  71. jT808_0X8A00.N = reader.ReadArray(128).ToArray();
  72. writer.WriteNumber($"[{jT808_0X8A00.E.ReadNumber()}]RSA公钥e", jT808_0X8A00.E);
  73. writer.WriteString($"RSA公钥N", jT808_0X8A00.N.ToHexString());
  74. }
  75. }
  76. }