Skip to content

Commit

Permalink
Picopass remove sentinel (#29)
Browse files Browse the repository at this point in the history
  • Loading branch information
bettse authored Aug 23, 2023
1 parent 0221e48 commit 0c3773e
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 5 deletions.
4 changes: 2 additions & 2 deletions application.fam
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ App(
"gui",
],
stack_size=4 * 1024,
fap_description="App to communicate with NFC tags using the PicoPass format",
fap_version="1.1",
fap_description="App to communicate with NFC tags using the PicoPass(iClass) format",
fap_version="1.2",
fap_icon="125_10px.png",
fap_category="NFC",
fap_libs=["mbedtls"],
Expand Down
14 changes: 11 additions & 3 deletions picopass_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -356,8 +356,8 @@ ReturnCode picopass_device_parse_credential(PicopassBlock* AA1, PicopassPacs* pa
return ERR_NONE;
}

ReturnCode picopass_device_parse_wiegand(uint8_t* data, PicopassWiegandRecord* record) {
uint32_t* halves = (uint32_t*)data;
ReturnCode picopass_device_parse_wiegand(uint8_t* credential, PicopassWiegandRecord* record) {
uint32_t* halves = (uint32_t*)credential;
if(halves[0] == 0) {
uint8_t leading0s = __builtin_clz(REVERSE_BYTES_U32(halves[1]));
record->bitLength = 31 - leading0s;
Expand All @@ -367,8 +367,16 @@ ReturnCode picopass_device_parse_wiegand(uint8_t* data, PicopassWiegandRecord* r
}
FURI_LOG_D(TAG, "bitLength: %d", record->bitLength);

// Remove sentinel bit from credential. Byteswapping to handle array of bytes vs 64bit value
uint64_t sentinel = __builtin_bswap64(1ULL << record->bitLength);
uint64_t swapped = 0;
memcpy(&swapped, credential, sizeof(uint64_t));
swapped = swapped ^ sentinel;
memcpy(credential, &swapped, sizeof(uint64_t));
FURI_LOG_D(TAG, "PACS: (%d) %016llx", record->bitLength, swapped);

if(record->bitLength == 26) {
uint8_t* v4 = data + 4;
uint8_t* v4 = credential + 4;
uint32_t bot = v4[3] | (v4[2] << 8) | (v4[1] << 16) | (v4[0] << 24);

record->CardNumber = (bot >> 1) & 0xFFFF;
Expand Down

0 comments on commit 0c3773e

Please sign in to comment.