From 43dc10e7f0e5b251fd0b5224d9922def8d91f0d1 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 18 Dec 2020 02:37:31 +0100 Subject: [PATCH] hf trace list: fix 14b CRC & accept 14a/14b crcs in 7816 --- client/src/cmdtrace.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/client/src/cmdtrace.c b/client/src/cmdtrace.c index ad5b38df7..f934caebe 100644 --- a/client/src/cmdtrace.c +++ b/client/src/cmdtrace.c @@ -184,6 +184,8 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr break; case ISO_14443B: case TOPAZ: + crcStatus = iso14443B_CRC_check(frame, data_len); + break; case FELICA: crcStatus = !felica_CRC_check(frame + 2, data_len - 4); break; @@ -193,9 +195,12 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr case ISO_14443A: case MFDES: case LTO: - case ISO_7816_4: crcStatus = iso14443A_CRC_check(hdr->isResponse, frame, data_len); break; + case ISO_7816_4: + crcStatus = iso14443A_CRC_check(hdr->isResponse, frame, data_len) == 1 ? 3 : 0; + crcStatus = iso14443B_CRC_check(frame, data_len) == 1 ? 4 : crcStatus; + break; case THINFILM: frame[data_len - 1] ^= frame[data_len - 2]; frame[data_len - 2] ^= frame[data_len - 1]; @@ -280,7 +285,8 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr } // Draw the CRC column - const char *crc = (crcStatus == 0 ? "!crc" : (crcStatus == 1 ? " ok " : " ")); + const char *crcstrings[] = { "!crc", " ok ", " ", "A ok", "B ok" }; + const char *crc = crcstrings[crcStatus]; // mark short bytes (less than 8 Bit + Parity) if (protocol == ISO_14443A ||