From 7ceba5a0f3cbeb6ab15bc7f99aec87741ef177ea Mon Sep 17 00:00:00 2001 From: Sigma-Ohio Date: Sat, 7 Jun 2025 06:35:16 +0200 Subject: ich committe mit mienen besten --- .../testers/checksum_analyzer.py | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 research/sample-data/ip-butt-big-extract/testers/checksum_analyzer.py (limited to 'research/sample-data/ip-butt-big-extract/testers/checksum_analyzer.py') diff --git a/research/sample-data/ip-butt-big-extract/testers/checksum_analyzer.py b/research/sample-data/ip-butt-big-extract/testers/checksum_analyzer.py new file mode 100644 index 0000000..3760727 --- /dev/null +++ b/research/sample-data/ip-butt-big-extract/testers/checksum_analyzer.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +import sys + + +def compute_checksum(data: bytes) -> int: + # PSA checksum excludes first 4 bytes ("MEL\0") + relevant = data[4:] + total = sum(relevant) + folded = (total & 0xFF) + (total >> 8) + return (~folded) & 0xFF + + +def interactive_mode(): + print("PSA Checksum Generator (Melody 0x3001 packets)") + print("Paste the hex payload WITHOUT the checksum byte. Type 'exit' to quit.") + while True: + user_input = input("Payload> ").strip() + if user_input.lower() in ("exit", "quit"): + break + try: + data = bytes.fromhex(user_input) + checksum = compute_checksum(data) + completed = data + bytes([checksum]) + print("Checksum: {:02X}".format(checksum)) + print("Full Packet: {}".format(completed.hex())) + except ValueError: + print("Invalid hex input. Try again.") + + +if __name__ == "__main__": + if len(sys.argv) == 2 and sys.argv[1] == "--batch": + print("Batch mode not implemented. Run without arguments for interactive mode.") + else: + interactive_mode() -- cgit v1.2.3-70-g09d2