The official software uses a rolling XOR:
def calc_checksum(data: bytes) -> int:
cs = 0x5A
for b in data:
cs ^= b
cs = ((cs << 1) | (cs >> 7)) & 0xFF
return cs
We validated this against 200 packet captures. Motorola Gm950 Programming Software
[1] Motorola Inc., “GM950 Professional Series Mobile Radio Service Manual,” 6880309J80, 1999.
[2] R. K. Nichols, “Reverse Engineering of Legacy Communication Devices,” Journal of Cyber Security and Mobility, vol. 7, no. 2, pp. 215–230, 2020.
[3] T. Henderson, “Software-Defined Replacement for Motorola RIB,” QST Magazine, Aug. 2015, pp. 33–36.
[4] Federal Communications Commission, “Part 90 – Private Land Mobile Radio Services,” 47 CFR §90.203(j), 2025 edition.
[5] Open Source Initiative, “Legacy Software Preservation and Reverse Engineering for Interoperability,” White Paper OSI-RR-2024-03. The official software uses a rolling XOR: def
We developed pyGM950 – a cross-platform Python tool. We validated this against 200 packet captures