meshtastic 0.0.184 → 0.0.185

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +1 -0
  3. data/Gemfile +2 -1
  4. data/documentation/README.md +5 -0
  5. data/documentation/forwarder.md +149 -0
  6. data/documentation/mesh-interface.md +157 -1
  7. data/documentation/payload-formats.md +187 -0
  8. data/documentation/reticulum.md +89 -0
  9. data/lib/meshtastic/atak.rb +98 -13
  10. data/lib/meshtastic/atak_pb.rb +3 -1
  11. data/lib/meshtastic/config_pb.rb +1 -1
  12. data/lib/meshtastic/field_metadata_pb.rb +1 -1
  13. data/lib/meshtastic/forwarder.rb +190 -0
  14. data/lib/meshtastic/forwarder_pb.rb +77 -0
  15. data/lib/meshtastic/mesh_beacon_pb.rb +1 -1
  16. data/lib/meshtastic/mesh_interface.rb +115 -65
  17. data/lib/meshtastic/mesh_pb.rb +2 -1
  18. data/lib/meshtastic/module_config_pb.rb +1 -1
  19. data/lib/meshtastic/mqtt.rb +4 -34
  20. data/lib/meshtastic/payload_compression.rb +90 -0
  21. data/lib/meshtastic/payload_formats.rb +248 -0
  22. data/lib/meshtastic/reticulum.rb +71 -0
  23. data/lib/meshtastic/serial.rb +1 -19
  24. data/lib/meshtastic/telemetry_pb.rb +2 -2
  25. data/lib/meshtastic/unishox2.rb +467 -0
  26. data/lib/meshtastic/version.rb +1 -1
  27. data/lib/meshtastic.rb +4 -0
  28. data/meshtastic.gemspec +2 -0
  29. data/spec/lib/meshtastic/atak_spec.rb +50 -0
  30. data/spec/lib/meshtastic/bluetooth_spec.rb +14 -0
  31. data/spec/lib/meshtastic/forwarder_pb_spec.rb +11 -0
  32. data/spec/lib/meshtastic/forwarder_spec.rb +97 -0
  33. data/spec/lib/meshtastic/mesh_interface_spec.rb +169 -0
  34. data/spec/lib/meshtastic/mqtt_spec.rb +56 -0
  35. data/spec/lib/meshtastic/payload_compression_spec.rb +43 -0
  36. data/spec/lib/meshtastic/payload_formats_spec.rb +160 -0
  37. data/spec/lib/meshtastic/reticulum_spec.rb +91 -0
  38. data/spec/lib/meshtastic/serial_spec.rb +46 -0
  39. data/spec/lib/meshtastic/tcp_spec.rb +15 -0
  40. data/spec/lib/meshtastic/unishox2_spec.rb +34 -0
  41. data/spec/support/payload_fixtures.rb +124 -0
  42. data/spec/support/reticulum_fixtures.json +12 -0
  43. data/spec/support/tak_codec_fixtures.rb +4 -0
  44. data/spec/support/unishox_fixtures.rb +4 -0
  45. metadata +36 -3
@@ -137,40 +137,10 @@ module Meshtastic
137
137
  message[:public_key] = Base64.strict_encode64(raw_public_key)
138
138
  end
139
139
 
140
- # If encrypted_message is not nil, then decrypt
141
- # the message prior to decoding.
142
- encrypted_message = message[:encrypted]
143
- if encrypted_message.to_s.length.positive? &&
144
- message[:topic]
145
-
146
- # if message[:pki_encrypted]
147
- # # TODO: Display Decrypted PKI Message
148
- # public_key = message[:public_key]
149
- # dec_public_key = Base64.strict_decode64(public_key)
150
- # else
151
- packet_id = message[:id]
152
- packet_from = message[:from]
153
-
154
- nonce_packet_id = [packet_id].pack('V').ljust(8, "\x00")
155
- nonce_from_node = [packet_from].pack('V').ljust(8, "\x00")
156
- nonce = "#{nonce_packet_id}#{nonce_from_node}"
157
-
158
- psk = psks[:LongFast]
159
- target_channel = message[:topic].split('/')[-2].to_sym
160
- psk = psks[target_channel] if psks.keys.include?(target_channel)
161
- dec_psk = Base64.strict_decode64(psk)
162
-
163
- cipher = OpenSSL::Cipher.new('AES-128-CTR')
164
- cipher = OpenSSL::Cipher.new('AES-256-CTR') if dec_psk.length == 32
165
- cipher.decrypt
166
- cipher.key = dec_psk
167
- cipher.iv = nonce
168
-
169
- decrypted = cipher.update(encrypted_message) + cipher.final
170
- # end
171
- message[:decoded] = Meshtastic::Data.decode(decrypted).to_h
172
- message[:encrypted] = :decrypted
173
- end
140
+ mui.decrypt_packet(
141
+ message: message, psks: psks,
142
+ channel: decoded_payload_hash[:channel_id].to_s.empty? ? raw_topic.split('/')[-2].to_s : decoded_payload_hash[:channel_id]
143
+ )
174
144
 
175
145
  if message[:decoded]
176
146
  # payload = Meshtastic::Data.decode(message[:decoded][:payload]).to_h