import enum import binascii import protoparser class HazelPacketType(enum.IntEnum): UNRELIABLE = (0,) RELIABLE = (1,) HELLO = (8,) PING = (12,) ACK = (10,) FIN = (9,) FRAGMENT = (11,) # not observed yet, maybe unused in among us? def int_big_endian(data: bytes) -> int: return int.from_bytes(data, "big") Parser = protoparser.Parser() Parser.register("Ping", HazelPacketType.PING, ("nonce", 2, int_big_endian)) Parser.register("Ack", HazelPacketType.ACK, ("nonce", 2, int_big_endian), 0xFF) Parser.register("Fin", HazelPacketType.FIN) Parser.register( "Hello", HazelPacketType.HELLO, (None, 7, None), ("name_len", 1, int_big_endian), ("name", "name_len", bytes.decode), )