diff options
author | Sigma-Ohio <crt@teleco.ch> | 2025-06-07 06:35:16 +0200 |
---|---|---|
committer | Sigma-Ohio <crt@teleco.ch> | 2025-06-07 06:35:16 +0200 |
commit | 7ceba5a0f3cbeb6ab15bc7f99aec87741ef177ea (patch) | |
tree | fd7bcd69b477eb6cb641abafb0b686204aede3c9 /research/sample-data/ip-butt-big-extract/testers/checksum_analyzer.py | |
parent | 9413cc24ab623f7d7959f18310262eb3b792ff9d (diff) |
ich committe mit mienen besten
Diffstat (limited to 'research/sample-data/ip-butt-big-extract/testers/checksum_analyzer.py')
-rw-r--r-- | research/sample-data/ip-butt-big-extract/testers/checksum_analyzer.py | 34 |
1 files changed, 34 insertions, 0 deletions
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() |