From 599c66f436bcf5d74860a10b611b0250498913d0 Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Tue, 20 Feb 2024 14:53:24 -0500 Subject: [PATCH] Add an aprs passcode generator --- scripts/aprs-passcode | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100755 scripts/aprs-passcode diff --git a/scripts/aprs-passcode b/scripts/aprs-passcode new file mode 100755 index 0000000..a19f1dc --- /dev/null +++ b/scripts/aprs-passcode @@ -0,0 +1,28 @@ +#! /usr/bin/env python3 +import argparse +import sys + + +def main() -> int: + # Handle program arguments + ap = argparse.ArgumentParser( + prog="aprs-passcode", + description="Calculate the passcode used for APRS-IS authentication", + ) + ap.add_argument("callsign", help="APRS callsign") + args = ap.parse_args() + + # Perform passcode calculation + callsign = args.callsign.upper().split("-")[0] + code = 0x73E2 + for i, char in enumerate(callsign): + code ^= ord(char) << (8 if not i % 2 else 0) + passcode = code & 0x7FFF + + print(passcode) + + return 0 + + +if __name__ == "__main__": + sys.exit(main())