mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-02-24 08:05:13 +08:00
refactor: Move Hitag 1 cmds to protocols.h
This commit is contained in:
parent
c279f88f13
commit
75420482e4
2 changed files with 23 additions and 22 deletions
|
@ -448,13 +448,13 @@ void fix_ac_decoding(uint8_t *input, size_t len) {
|
|||
// looks at number of received bits.
|
||||
// 0 = collision?
|
||||
// 32 = good response
|
||||
static bool hitag_plain(uint8_t *rx, const size_t rxlen, uint8_t *tx, size_t *txlen, bool hitag_s) {
|
||||
static bool hitag1_plain(uint8_t *rx, const size_t rxlen, uint8_t *tx, size_t *txlen, bool hitag_s) {
|
||||
*txlen = 0;
|
||||
switch (rxlen) {
|
||||
case 0: {
|
||||
// retry waking up card
|
||||
/*tx[0] = 0xb0; // Rev 3.0*/
|
||||
tx[0] = 0x30; // Rev 2.0
|
||||
tx[0] = HITAG1_SET_CC; // Rev 2.0
|
||||
*txlen = 5;
|
||||
if (!bCollision) blocknr--;
|
||||
if (blocknr < 0) {
|
||||
|
@ -472,7 +472,7 @@ static bool hitag_plain(uint8_t *rx, const size_t rxlen, uint8_t *tx, size_t *tx
|
|||
uint8_t crc;
|
||||
if (bCollision) {
|
||||
// Select card by serial from response
|
||||
tx[0] = 0x00 | rx[0] >> 5;
|
||||
tx[0] = HITAG1_SELECT | rx[0] >> 5;
|
||||
tx[1] = rx[0] << 3 | rx[1] >> 5;
|
||||
tx[2] = rx[1] << 3 | rx[2] >> 5;
|
||||
tx[3] = rx[2] << 3 | rx[3] >> 5;
|
||||
|
@ -498,7 +498,7 @@ static bool hitag_plain(uint8_t *rx, const size_t rxlen, uint8_t *tx, size_t *tx
|
|||
}
|
||||
// read next page of card until done
|
||||
Dbprintf("Reading page %02u", blocknr);
|
||||
tx[0] = 0xc0 | blocknr >> 4; // RDPPAGE
|
||||
tx[0] = HITAG1_RDPPAGE | blocknr >> 4; // RDPPAGE
|
||||
tx[1] = blocknr << 4;
|
||||
crc = hitag_crc(tx, 12);
|
||||
tx[1] |= crc >> 4;
|
||||
|
@ -524,7 +524,7 @@ static bool hitag1_authenticate(uint8_t *rx, const size_t rxlen, uint8_t *tx, si
|
|||
case 0: {
|
||||
// retry waking up card
|
||||
/*tx[0] = 0xb0; // Rev 3.0*/
|
||||
tx[0] = 0x30; // Rev 2.0
|
||||
tx[0] = HITAG1_SELECT; // Rev 2.0
|
||||
*txlen = 5;
|
||||
if (bCrypto && byte_value <= 0xff) {
|
||||
// to retry
|
||||
|
@ -554,7 +554,7 @@ static bool hitag1_authenticate(uint8_t *rx, const size_t rxlen, uint8_t *tx, si
|
|||
// will receive 32 bit encrypted Logdata
|
||||
} else if (bCrypto) {
|
||||
// authed, start reading
|
||||
tx[0] = 0xe0 | blocknr >> 4; // RDCPAGE
|
||||
tx[0] = HITAG1_RDCPAGE | blocknr >> 4; // RDCPAGE
|
||||
tx[1] = blocknr << 4;
|
||||
crc = hitag_crc(tx, 12);
|
||||
tx[1] |= crc >> 4;
|
||||
|
@ -567,7 +567,7 @@ static bool hitag1_authenticate(uint8_t *rx, const size_t rxlen, uint8_t *tx, si
|
|||
case 32: {
|
||||
if (bCollision) {
|
||||
// Select card by serial from response
|
||||
tx[0] = 0x00 | rx[0] >> 5;
|
||||
tx[0] = HITAG1_SELECT | rx[0] >> 5;
|
||||
tx[1] = rx[0] << 3 | rx[1] >> 5;
|
||||
tx[2] = rx[1] << 3 | rx[2] >> 5;
|
||||
tx[3] = rx[2] << 3 | rx[3] >> 5;
|
||||
|
@ -581,7 +581,7 @@ static bool hitag1_authenticate(uint8_t *rx, const size_t rxlen, uint8_t *tx, si
|
|||
// will receive 32-bit configuration page
|
||||
} else if (bSelecting) {
|
||||
// Initiate auth
|
||||
tx[0] = 0xa0 | (key_no); // WRCPAGE
|
||||
tx[0] = HITAG1_WRCPAGE | (key_no); // WRCPAGE
|
||||
tx[1] = blocknr << 4;
|
||||
crc = hitag_crc(tx, 12);
|
||||
tx[1] |= crc >> 4;
|
||||
|
@ -621,7 +621,7 @@ static bool hitag1_authenticate(uint8_t *rx, const size_t rxlen, uint8_t *tx, si
|
|||
return false;
|
||||
/*
|
||||
// read next page of card until done
|
||||
tx[0] = 0xe0 | blocknr >> 4; // RDCPAGE
|
||||
tx[0] = HITAG1_RDCPAGE | blocknr >> 4; // RDCPAGE
|
||||
tx[1] = blocknr << 4;
|
||||
crc = hitag_crc(tx, 12);
|
||||
tx[1] |= crc >> 4;
|
||||
|
@ -1820,7 +1820,7 @@ void ReaderHitag(const lf_hitag_data_t *payload, bool ledcontrol) {
|
|||
tx = txbuf;
|
||||
switch (payload->cmd) {
|
||||
case RHT1F_PLAIN: {
|
||||
bStop = !hitag_plain(rx, rxlen, tx, &txlen, false);
|
||||
bStop = !hitag1_plain(rx, rxlen, tx, &txlen, false);
|
||||
break;
|
||||
}
|
||||
case RHT1F_AUTHENTICATE: {
|
||||
|
@ -2629,7 +2629,7 @@ int ht2_read_uid(uint8_t *uid, bool ledcontrol, bool send_answer, bool keep_fiel
|
|||
|
||||
// start AUTH command
|
||||
size_t txlen = 5;
|
||||
uint8_t tx[0] = {HITAG2_START_AUTH};
|
||||
uint8_t tx[] = {HITAG2_START_AUTH};
|
||||
|
||||
// Transmit as reader
|
||||
ht2_send(turn_on, &command_start, &command_duration, &response_start, tx, txlen, false);
|
||||
|
|
|
@ -897,18 +897,19 @@ ISO 7816-4 Basic interindustry commands. For command APDU's.
|
|||
#define CALYPSO_SAM_SV_RELOAD 0x56
|
||||
|
||||
// HITAG 1 commands
|
||||
#define HITAG1_SET_CCNEW 0xC2 // left 5 bits only
|
||||
#define HITAG1_SET_CC 0x30 // higher 5 bits only
|
||||
#define HITAG1_SET_CCNEW 0xC8 // higher 5 bits only
|
||||
#define HITAG1_READ_ID 0x00 // not a real command, consists of 5 bits length, <length> bits partial SN, 8 bits CRC
|
||||
#define HITAG1_SELECT 0x00 // left 5 bits only, followed by 32 bits SN and 8 bits CRC
|
||||
#define HITAG1_WRPPAGE 0x80 // left 4 bits only, followed by 8 bits page and 8 bits CRC
|
||||
#define HITAG1_WRPBLK 0x90 // left 4 bits only, followed by 8 bits block and 8 bits CRC
|
||||
#define HITAG1_WRCPAGE 0xA0 // left 4 bits only, followed by 8 bits page or key information and 8 bits CRC
|
||||
#define HITAG1_WRCBLK 0xB0 // left 4 bits only, followed by 8 bits block and 8 bits CRC
|
||||
#define HITAG1_RDPPAGE 0xC0 // left 4 bits only, followed by 8 bits page and 8 bits CRC
|
||||
#define HITAG1_RDPBLK 0xD0 // left 4 bits only, followed by 8 bits block and 8 bits CRC
|
||||
#define HITAG1_RDCPAGE 0xE0 // left 4 bits only, followed by 8 bits page and 8 bits CRC
|
||||
#define HITAG1_RDCBLK 0xF0 // left 4 bits only, followed by 8 bits block and 8 bits CRC
|
||||
#define HITAG1_HALT 0x70 // left 4 bits only, followed by 8 bits (dummy) page and 8 bits CRC
|
||||
#define HITAG1_SELECT 0x00 // higher 5 bits only, followed by 32 bits SN and 8 bits CRC
|
||||
#define HITAG1_WRPPAGE 0x80 // higher 4 bits only, followed by 8 bits page and 8 bits CRC
|
||||
#define HITAG1_WRPBLK 0x90 // higher 4 bits only, followed by 8 bits block and 8 bits CRC
|
||||
#define HITAG1_WRCPAGE 0xA0 // higher 4 bits only, followed by 8 bits page or key information and 8 bits CRC
|
||||
#define HITAG1_WRCBLK 0xB0 // higher 4 bits only, followed by 8 bits block and 8 bits CRC
|
||||
#define HITAG1_RDPPAGE 0xC0 // higher 4 bits only, followed by 8 bits page and 8 bits CRC
|
||||
#define HITAG1_RDPBLK 0xD0 // higher 4 bits only, followed by 8 bits block and 8 bits CRC
|
||||
#define HITAG1_RDCPAGE 0xE0 // higher 4 bits only, followed by 8 bits page and 8 bits CRC
|
||||
#define HITAG1_RDCBLK 0xF0 // higher 4 bits only, followed by 8 bits block and 8 bits CRC
|
||||
#define HITAG1_HALT 0x70 // higher 4 bits only, followed by 8 bits (dummy) page and 8 bits CRC
|
||||
|
||||
// HITAG 2 commands
|
||||
#define HITAG2_START_AUTH 0xC0 // left 5 bits only
|
||||
|
|
Loading…
Reference in a new issue