mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-14 10:37:23 -07:00
refactor: Move Hitag S cmds to protocols.h
This commit is contained in:
parent
3a3deaf3cb
commit
ad5a4134ec
2 changed files with 28 additions and 20 deletions
|
@ -32,6 +32,7 @@
|
|||
#include "hitag2/hitag2_crypto.h"
|
||||
#include "lfadc.h"
|
||||
#include "crc.h"
|
||||
#include <protocols.h>
|
||||
|
||||
#define CRC_PRESET 0xFF
|
||||
#define CRC_POLYNOM 0x1D
|
||||
|
@ -455,7 +456,7 @@ static void hitagS_handle_reader_command(uint8_t *rx, const size_t rxlen,
|
|||
|
||||
tag.pstate = HT_READY;
|
||||
tag.tstate = HT_NO_OP;
|
||||
if ((rx[0] & 0xf0) == 0x30) {
|
||||
if ((rx[0] & 0xf0) == HITAGS_UID_REQ_STD) {
|
||||
if (g_dbglevel >= DBG_EXTENDED)
|
||||
Dbprintf("HT_STANDARD");
|
||||
|
||||
|
@ -463,7 +464,7 @@ static void hitagS_handle_reader_command(uint8_t *rx, const size_t rxlen,
|
|||
sof_bits = 1;
|
||||
m = AC2K;
|
||||
}
|
||||
if ((rx[0] & 0xf0) == 0xc0) {
|
||||
if ((rx[0] & 0xf0) == HITAGS_UID_REQ_ADV) {
|
||||
tag.mode = HT_ADVANCED;
|
||||
if (g_dbglevel >= DBG_EXTENDED)
|
||||
Dbprintf("HT_ADVANCED");
|
||||
|
@ -472,7 +473,7 @@ static void hitagS_handle_reader_command(uint8_t *rx, const size_t rxlen,
|
|||
m = AC2K;
|
||||
}
|
||||
|
||||
if ((rx[0] & 0xf0) == 0xd0) {
|
||||
if ((rx[0] & 0xf0) == HITAGS_UID_REQ_FADV) {
|
||||
if (g_dbglevel >= DBG_EXTENDED)
|
||||
Dbprintf("HT_FAST_ADVANCED");
|
||||
|
||||
|
@ -493,7 +494,7 @@ static void hitagS_handle_reader_command(uint8_t *rx, const size_t rxlen,
|
|||
DbpString("SELECT");
|
||||
}
|
||||
|
||||
if (check_select(rx, tag.uid) == 1) {
|
||||
if ((rx[0] & 0xf8) == HITAGS_SELECT && check_select(rx, tag.uid) == 1) {
|
||||
if (g_dbglevel >= DBG_EXTENDED) {
|
||||
DbpString("SELECT match");
|
||||
}
|
||||
|
@ -581,7 +582,7 @@ static void hitagS_handle_reader_command(uint8_t *rx, const size_t rxlen,
|
|||
}
|
||||
case 40: {
|
||||
if (g_dbglevel >= DBG_EXTENDED)
|
||||
Dbprintf("WRITE");
|
||||
Dbprintf("WRITE DATA");
|
||||
//data received to be written
|
||||
if (tag.tstate == HT_WRITING_PAGE_DATA) {
|
||||
tag.tstate = HT_NO_OP;
|
||||
|
@ -616,7 +617,7 @@ static void hitagS_handle_reader_command(uint8_t *rx, const size_t rxlen,
|
|||
}
|
||||
case 20: {
|
||||
//write page, write block, read page or read block command received
|
||||
if ((rx[0] & 0xf0) == 0xc0) { //read page
|
||||
if ((rx[0] & 0xf0) == HITAGS_READ_PAGE) { //read page
|
||||
//send page data
|
||||
uint8_t page = ((rx[0] & 0x0f) * 16) + ((rx[1] & 0xf0) / 16);
|
||||
*txlen = 32;
|
||||
|
@ -647,7 +648,7 @@ static void hitagS_handle_reader_command(uint8_t *rx, const size_t rxlen,
|
|||
*txlen = 0;
|
||||
}
|
||||
|
||||
} else if ((rx[0] & 0xf0) == 0xd0) { //read block
|
||||
} else if ((rx[0] & 0xf0) == HITAGS_READ_BLOCK) { //read block
|
||||
|
||||
uint8_t page = ((rx[0] & 0x0f) * 16) + ((rx[1] & 0xf0) / 16);
|
||||
*txlen = 32 * 4;
|
||||
|
@ -677,7 +678,7 @@ static void hitagS_handle_reader_command(uint8_t *rx, const size_t rxlen,
|
|||
*txlen = 0;
|
||||
}
|
||||
|
||||
} else if ((rx[0] & 0xf0) == 0x80) { //write page
|
||||
} else if ((rx[0] & 0xf0) == HITAGS_WRITE_PAGE) { //write page
|
||||
|
||||
uint8_t page = ((rx[0] & 0x0f) * 16) + ((rx[1] & 0xf0) / 16);
|
||||
|
||||
|
@ -693,7 +694,7 @@ static void hitagS_handle_reader_command(uint8_t *rx, const size_t rxlen,
|
|||
tag.tstate = HT_WRITING_PAGE_DATA;
|
||||
}
|
||||
|
||||
} else if ((rx[0] & 0xf0) == 0x90) { //write block
|
||||
} else if ((rx[0] & 0xf0) == HITAGS_WRITE_BLOCK) { //write block
|
||||
|
||||
uint8_t page = ((rx[0] & 0x0f) * 6) + ((rx[1] & 0xf0) / 16);
|
||||
hitagS_set_frame_modulation();
|
||||
|
@ -1236,8 +1237,8 @@ static int selectHitagS(const lf_hitag_data_t *packet, uint8_t *tx, size_t sizeo
|
|||
// UID request FAdvanced 11010
|
||||
size_t txlen = 0;
|
||||
size_t rxlen = 0;
|
||||
uint8_t cmd = 0x18; // 11000 UID Request Advanced
|
||||
txlen = concatbits(tx, txlen, &cmd, 8 - 5, 5);
|
||||
uint8_t cmd = HITAGS_UID_REQ_ADV;
|
||||
txlen = concatbits(tx, txlen, &cmd, 0, 5);
|
||||
sendReceiveHitagS(tx, txlen, rx, sizeofrx, &rxlen, t_wait, ledcontrol, true);
|
||||
|
||||
if (rxlen != 32) {
|
||||
|
@ -1253,8 +1254,8 @@ static int selectHitagS(const lf_hitag_data_t *packet, uint8_t *tx, size_t sizeo
|
|||
|
||||
//select uid
|
||||
txlen = 0;
|
||||
cmd = 0x00; // 00000 SELECT UID
|
||||
txlen = concatbits(tx, txlen, &cmd, 8 - 5, 5);
|
||||
cmd = HITAGS_SELECT;
|
||||
txlen = concatbits(tx, txlen, &cmd, 0, 5);
|
||||
txlen = concatbits(tx, txlen, rx, 0, 32);
|
||||
uint8_t crc = CRC8Hitag1Bits(tx, txlen);
|
||||
txlen = concatbits(tx, txlen, &crc, 0, 8);
|
||||
|
@ -1432,8 +1433,8 @@ void ReadHitagS(const lf_hitag_data_t *payload, bool ledcontrol) {
|
|||
|
||||
//send read request
|
||||
size_t txlen = 0;
|
||||
uint8_t cmd = 0x0c; // 1100 READ PAGE
|
||||
txlen = concatbits(tx, txlen, &cmd, 8 - 4, 4);
|
||||
uint8_t cmd = HITAGS_READ_PAGE;
|
||||
txlen = concatbits(tx, txlen, &cmd, 0, 4);
|
||||
uint8_t addr = pageNum;
|
||||
txlen = concatbits(tx, txlen, &addr, 0, 8);
|
||||
uint8_t crc = CRC8Hitag1Bits(tx, txlen);
|
||||
|
@ -1537,8 +1538,8 @@ void WritePageHitagS(const lf_hitag_data_t *payload, bool ledcontrol) {
|
|||
//send write page request
|
||||
txlen = 0;
|
||||
|
||||
uint8_t cmd = 0x08; // 1000 WRITE PAGE
|
||||
txlen = concatbits(tx, txlen, &cmd, 8 - 4, 4);
|
||||
uint8_t cmd = HITAGS_WRITE_PAGE;
|
||||
txlen = concatbits(tx, txlen, &cmd, 0, 4);
|
||||
|
||||
uint8_t addr = payload->page;
|
||||
txlen = concatbits(tx, txlen, &addr, 0, 8);
|
||||
|
|
|
@ -918,9 +918,16 @@ ISO 7816-4 Basic interindustry commands. For command APDU's.
|
|||
#define HITAG2_HALT "00" // silence currently authenticated tag
|
||||
|
||||
// HITAG S commands
|
||||
#define HITAGS_QUIET 0x70
|
||||
//inverted in bit 0 and following 2 bits
|
||||
#define HITAGS_WRITE_BLOCK 0x90
|
||||
#define HITAGS_UID_REQ_STD 0x30 // 00110 UID REQUEST Std
|
||||
#define HITAGS_UID_REQ_ADV 0xC0 // 11000 UID REQUEST Adv
|
||||
#define HITAGS_UID_REQ_ADV2 0xC8 // 11001 UID REQUEST Adv
|
||||
#define HITAGS_UID_REQ_FADV 0xD0 // 11010 UID REQUEST FAdv
|
||||
#define HITAGS_SELECT 0x00 // 00000 SELECT (UID)
|
||||
#define HITAGS_READ_PAGE 0xC0 // 1100 READ PAGE
|
||||
#define HITAGS_READ_BLOCK 0xD0 // 1101 READ BLOCK
|
||||
#define HITAGS_WRITE_PAGE 0x80 // 1000 WRITE PAGE
|
||||
#define HITAGS_WRITE_BLOCK 0x90 // 1001 WRITE BLOCK
|
||||
#define HITAGS_QUIET 0x70 // 0111 QUIET
|
||||
|
||||
// LTO-CM commands
|
||||
#define LTO_REQ_STANDARD 0x45
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue