toprf_update_msg_parser.py
1 #!/usr/bin/env python 2 3 import sys 4 from construct import * 5 6 dkg_msg = Struct( 7 "signature" / Array(64, Byte), 8 "type" / Int8ub, 9 "version" / Int8ub, 10 "msgno" / Int8ub, 11 "size" / Int32ub, 12 "sender" / Int8ub, 13 "to" / Int8ub, 14 "ts" / Timestamp(Int64ub, 1., 1970), 15 "sessionid" / Array(32, Byte), 16 "data" / Array(this.size - 113, Byte), 17 ) 18 19 messages = GreedyRange(dkg_msg) 20 21 with open(sys.argv[1], 'rb') as fd: 22 raw = fd.read() 23 24 while len(raw) > 0: 25 print(raw[:113].hex()) 26 try: 27 msg = dkg_msg.parse(raw) 28 print(f"{str(msg.ts)[:-6]} type: {msg.type}, version: {msg.version}, msgno: {msg.msgno}, len: {msg.size}, from: {msg.sender}, to: {msg.to:x}\nsessionid: {bytes(msg.sessionid).hex()}\ndata: {bytes(msg.data).hex()}") 29 raw = raw[msg.size:] 30 except: 31 print(raw[67:71].hex()) 32 raw = raw[113:]