Skip to content

Commit 9ee3236

Browse files
committed
Addressing the ACK/NAK keep-alive exchanges from some NXP readers noted by \@lvandenb in emsec#313
1 parent b6be1b8 commit 9ee3236

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

Firmware/Chameleon-Mini/Application/DESFire/DESFireInstructions.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -2020,7 +2020,7 @@ uint16_t ISO7816CmdSelect(uint8_t *Buffer, uint16_t ByteCount) {
20202020
return ISO7816CmdSelectDF(Buffer, ByteCount);
20212021
}
20222022
Buffer[0] = ISO7816_ERROR_SW1_INS_UNSUPPORTED;
2023-
Buffer[1] = ISO7816_ERROR_SW2_INS_UNSUPPORTED;
2023+
Buffer[1] = ISO7816_ERROR_SW2_FUNC_UNSUPPORTED;
20242024
return ISO7816_STATUS_RESPONSE_SIZE;
20252025
}
20262026

Firmware/Chameleon-Mini/Application/MifareDESFire.c

+7
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,13 @@ uint16_t MifareDesfireAppProcess(uint8_t *Buffer, uint16_t BitCount) {
226226
} else if (ByteCount >= 6 && DesfireCLA(Buffer[0]) && Buffer[2] == 0x00 &&
227227
Buffer[3] == 0x00 && Buffer[4] == ByteCount - 6) {
228228
return MifareDesfireProcess(Buffer, BitCount);
229+
} else if (ByteCount == 4 && Buffer[2] == 0x37 && Buffer[3] == 0xC8) {
230+
// NXP-based PCD sent a "keep alive" response of ACK,
231+
// so we respond with a corresponding NAK (with CRCA bytes appended):
232+
Buffer[2] = 0x7E;
233+
Buffer[3] = 0x44;
234+
ISO14443AAppendCRCA(Buffer, 4);
235+
return 6 * BITS_PER_BYTE;
229236
} else if (IsWrappedISO7816CommandType(Buffer, ByteCount)) {
230237
uint8_t ISO7816PrologueBytes[2];
231238
memcpy(&ISO7816PrologueBytes[0], Buffer, 2);

0 commit comments

Comments
 (0)