Skip to content

Commit fe33746

Browse files
committed
epacket: packet: UDP decryption function
Add the ability to decrypt UDP packets for debugging purposes. Signed-off-by: Jordan Yates <jordan@embeint.com>
1 parent a1d48ae commit fe33746

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

src/infuse_iot/epacket/packet.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,21 @@ def decrypt(cls, database: DeviceDatabase, bt_addr: Address.BluetoothLeAddr | No
503503
return header, decrypted
504504

505505

506+
class CtypeUdpFrame(CtypeV0UnversionedFrame):
507+
@classmethod
508+
def decrypt(cls, database: DeviceDatabase, frame: bytes):
509+
header = cls.from_buffer_copy(frame)
510+
if header.flags & Flags.ENCR_DEVICE:
511+
database.observe_device(header.device_id, device_id=header.key_metadata)
512+
key = database.udp_device_key(header.device_id, header.gps_time)
513+
else:
514+
database.observe_device(header.device_id, network_id=header.key_metadata)
515+
key = database.udp_network_key(header.device_id, header.gps_time)
516+
517+
decrypted = chachapoly_decrypt(key, frame[:10], frame[10:22], frame[22:])
518+
return header, decrypted
519+
520+
506521
class CtypePacketReceived:
507522
class CommonHeader(ctypes.Structure):
508523
_fields_ = [

0 commit comments

Comments
 (0)