add support for Mifare Classic with 7-byte UIDs #2319
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Mifare Classic cards can have either 4-byte or 7-byte UIDs (serial numbers). The existing implementation only supports cards with 4-byte UIDs (which are far more common). This PR adds support for cards with 7-byte UIDs.
There are two sets of changes in this PR:
SetCapacity
to match an ATQA of either 0x0004 (4-byte UID) or 0x0044 (7-byte UID).Serialize
to work with either length of theSerialNumber
. The arguments to theAuthenticationA
andAuthenticationB
commands are the command byte, block number, key (6 bytes), and last four digits of the serial number (which is the entire serial number in the case of a 4-byte UID). This code was also refactored so that the same code is used for both commands (differing only in the key that is used).Tested with Mifare Classic 1K (4-byte UID), Mifare Classic 1K (7-byte UID), and Mifare Classic 4K (4-byte UID) cards using the PN532 sample code (and a PN532 transceiver :-)).
Microsoft Reviewers: Open in CodeFlow