/ src / tests / fuzz-toprf-update / toprf_update_msg_parser.py
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:]