hex_checksum-v2.py 714 B

1234567891011121314151617181920212223
  1. #!/usr/bin/env python3
  2. import sys
  3. def compute_psa_checksum(data: bytes) -> bytes:
  4. var_e = 0x0000 # Correct seed from firmware logic
  5. for i in range(len(data)):
  6. var_e ^= (data[i] + i) & 0xFFFF
  7. return var_e.to_bytes(2, 'big') # 2-byte checksum, big-endian
  8. def add_checksum(hexstring: str) -> str:
  9. try:
  10. data = bytes.fromhex(hexstring.strip())
  11. except ValueError:
  12. return "Invalid hex input!"
  13. checksum = compute_psa_checksum(data)
  14. return (data + checksum).hex()
  15. if __name__ == "__main__":
  16. if len(sys.argv) != 2:
  17. print("Usage: ./hex_checksum.py <hexstring_without_checksum>")
  18. sys.exit(1)
  19. result = add_checksum(sys.argv[1])
  20. print(result)