Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

57 rader
1.9 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. public override ushort MsgId { get; } = 0x8A00;
  16. public override string Description => "平台RSA公钥";
  17. /// <summary>
  18. /// e
  19. /// 平台 RSA 公钥{e,n}中的 e
  20. /// </summary>
  21. public uint E { get; set; }
  22. /// <summary>
  23. /// n
  24. /// RSA 公钥{e,n}中的 n
  25. /// </summary>
  26. public byte[] N { get; set; }
  27. public JT808_0x8A00 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  28. {
  29. JT808_0x8A00 jT808_0X8A00 = new JT808_0x8A00();
  30. jT808_0X8A00.E = reader.ReadUInt32();
  31. jT808_0X8A00.N = reader.ReadArray(128).ToArray();
  32. return jT808_0X8A00;
  33. }
  34. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8A00 value, IJT808Config config)
  35. {
  36. writer.WriteUInt32(value.E);
  37. if (value.N.Length != 128)
  38. {
  39. throw new JT808Exception(Enums.JT808ErrorCode.NotEnoughLength, $"{nameof(value.N)}->128");
  40. }
  41. writer.WriteArray(value.N);
  42. }
  43. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  44. {
  45. JT808_0x8A00 jT808_0X8A00 = new JT808_0x8A00();
  46. jT808_0X8A00.E = reader.ReadUInt32();
  47. jT808_0X8A00.N = reader.ReadArray(128).ToArray();
  48. writer.WriteNumber($"[{jT808_0X8A00.E.ReadNumber()}]RSA公钥e", jT808_0X8A00.E);
  49. writer.WriteString($"RSA公钥n", jT808_0X8A00.N.ToHexString());
  50. }
  51. }
  52. }