From 2d3cff48e73c7ffedec435273831d04740c7d374 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 29 Jan 2013 23:26:32 +0100 Subject: [PATCH] Add support for 7-byte UID MIFARE Classic cards --- libfreefare/mifare_classic.c | 3 ++- test/test_mifare_classic.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/libfreefare/mifare_classic.c b/libfreefare/mifare_classic.c index 3cfb367..aaf2d64 100644 --- a/libfreefare/mifare_classic.c +++ b/libfreefare/mifare_classic.c @@ -289,7 +289,8 @@ mifare_classic_authenticate (MifareTag tag, const MifareClassicBlockNumber block BUFFER_APPEND(cmd, block); BUFFER_APPEND_BYTES (cmd, key, 6); - BUFFER_APPEND_BYTES (cmd, tag->info.abtUid, 4); + // To support both 4-byte & 7-byte UID cards: + BUFFER_APPEND_BYTES (cmd, tag->info.abtUid + tag->info.szUidLen - 4, 4); CLASSIC_TRANSCEIVE_EX (tag, cmd, res, 1); diff --git a/test/test_mifare_classic.c b/test/test_mifare_classic.c index f8180b8..a52e517 100644 --- a/test/test_mifare_classic.c +++ b/test/test_mifare_classic.c @@ -361,7 +361,7 @@ test_mifare_classic_get_uid (void) uid = freefare_get_tag_uid (tag); cut_assert_not_null (uid, cut_message ("freefare_get_tag_uid() failed")); - cut_assert_equal_int (8, strlen (uid), cut_message ("Wrong UID length")); + cut_assert (((strlen (uid) == 8)||(strlen (uid) == 14)), cut_message ("Wrong UID length")); free (uid); }