From 7a6f503161f91b0d5b952f410ff5d1ce92b6a682 Mon Sep 17 00:00:00 2001 From: Richard Knoll Date: Sat, 28 Aug 2021 14:28:06 +0100 Subject: [PATCH] Fix PAC/Stanley checksum calculation The parity bit needs to be discarded when calculating the final checksum byte value of PAC/Stanley card IDs. Verified by scanning a tag which is now correctly identified. --- client/src/cmdlfpac.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/cmdlfpac.c b/client/src/cmdlfpac.c index b751b2af3..f1891cfc1 100644 --- a/client/src/cmdlfpac.c +++ b/client/src/cmdlfpac.c @@ -54,7 +54,7 @@ static int pac_buf_to_cardid(uint8_t *src, const size_t src_size, uint8_t *dst, PrintAndLogEx(DEBUG, "DEBUG: Error - PAC: Parity check failed"); return PM3_ESOFT; } - if (idx < dataLength - 1) checksum ^= byte; + if (idx < dataLength - 1) checksum ^= dst[idx]; } if (dst[dataLength - 1] != checksum) { PrintAndLogEx(DEBUG, "DEBUG: Error - PAC: Bad checksum - expected: %02X, actual: %02X", dst[dataLength - 1], checksum);