mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-20 13:23:51 -07:00
code style, and make less output for hf search
This commit is contained in:
parent
9a063d75fe
commit
e8d5d81178
4 changed files with 46 additions and 30 deletions
|
@ -181,7 +181,7 @@ static const hintAIDListT hintAIDList[] = {
|
|||
};
|
||||
|
||||
// iso14a apdu input frame length
|
||||
static uint16_t frameLength = 0;
|
||||
static uint16_t g_frame_len = 0;
|
||||
uint16_t atsFSC[] = {16, 24, 32, 40, 48, 64, 96, 128, 256};
|
||||
|
||||
static int CmdHF14AList(const char *Cmd) {
|
||||
|
@ -857,31 +857,35 @@ int ExchangeRAW14a(uint8_t *datain, int datainlen, bool activateField, bool leav
|
|||
return 0;
|
||||
}
|
||||
|
||||
int SelectCard14443A_4(bool disconnect, iso14a_card_select_t *card) {
|
||||
PacketResponseNG resp;
|
||||
int SelectCard14443A_4(bool disconnect, bool verbose, iso14a_card_select_t *card) {
|
||||
|
||||
frameLength = 0;
|
||||
// global vars should be prefixed with g_
|
||||
g_frame_len = 0;
|
||||
|
||||
if (card)
|
||||
if (card) {
|
||||
memset(card, 0, sizeof(iso14a_card_select_t));
|
||||
}
|
||||
|
||||
DropField();
|
||||
|
||||
// Anticollision + SELECT card
|
||||
PacketResponseNG resp;
|
||||
SendCommandMIX(CMD_HF_ISO14443A_READER, ISO14A_CONNECT | ISO14A_NO_DISCONNECT, 0, 0, NULL, 0);
|
||||
if (WaitForResponseTimeout(CMD_ACK, &resp, 1500) == false) {
|
||||
PrintAndLogEx(ERR, "Proxmark3 connection timeout");
|
||||
PrintAndLogEx(WARNING, "Command execute timeout");
|
||||
return PM3_ETIMEOUT;
|
||||
}
|
||||
|
||||
// check result
|
||||
if (resp.oldarg[0] == 0) {
|
||||
PrintAndLogEx(ERR, "No card in field");
|
||||
if (verbose) {
|
||||
PrintAndLogEx(FAILED, "No card in field");
|
||||
}
|
||||
return PM3_ECARDEXCHANGE;
|
||||
}
|
||||
|
||||
if (resp.oldarg[0] != 1 && resp.oldarg[0] != 2) {
|
||||
PrintAndLogEx(ERR, "Card not in iso14443-4, res=%" PRId64 ".", resp.oldarg[0]);
|
||||
PrintAndLogEx(WARNING, "Card not in iso14443-4, res=%" PRId64 ".", resp.oldarg[0]);
|
||||
return PM3_ECARDEXCHANGE;
|
||||
}
|
||||
|
||||
|
@ -890,36 +894,44 @@ int SelectCard14443A_4(bool disconnect, iso14a_card_select_t *card) {
|
|||
uint8_t rats[] = { 0xE0, 0x80 }; // FSDI=8 (FSD=256), CID=0
|
||||
SendCommandMIX(CMD_HF_ISO14443A_READER, ISO14A_RAW | ISO14A_APPEND_CRC | ISO14A_NO_DISCONNECT, sizeof(rats), 0, rats, sizeof(rats));
|
||||
if (WaitForResponseTimeout(CMD_ACK, &resp, 1500) == false) {
|
||||
PrintAndLogEx(ERR, "Proxmark3 connection timeout");
|
||||
PrintAndLogEx(WARNING, "Command execute timeout");
|
||||
return PM3_ETIMEOUT;
|
||||
}
|
||||
|
||||
if (resp.oldarg[0] == 0) { // ats_len
|
||||
PrintAndLogEx(ERR, "Can't get ATS");
|
||||
if (verbose) {
|
||||
PrintAndLogEx(FAILED, "Can't get ATS");
|
||||
}
|
||||
return PM3_ECARDEXCHANGE;
|
||||
}
|
||||
|
||||
// get frame length from ATS in data field
|
||||
if (resp.oldarg[0] > 1) {
|
||||
uint8_t fsci = resp.data.asBytes[1] & 0x0f;
|
||||
if (fsci < ARRAYLEN(atsFSC))
|
||||
frameLength = atsFSC[fsci];
|
||||
if (fsci < ARRAYLEN(atsFSC)) {
|
||||
g_frame_len = atsFSC[fsci];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// get frame length from ATS in card data structure
|
||||
iso14a_card_select_t *vcard = (iso14a_card_select_t *) resp.data.asBytes;
|
||||
if (vcard->ats_len > 1) {
|
||||
uint8_t fsci = vcard->ats[1] & 0x0f;
|
||||
if (fsci < ARRAYLEN(atsFSC))
|
||||
frameLength = atsFSC[fsci];
|
||||
if (fsci < ARRAYLEN(atsFSC)) {
|
||||
g_frame_len = atsFSC[fsci];
|
||||
}
|
||||
}
|
||||
|
||||
if (card)
|
||||
if (card) {
|
||||
memcpy(card, vcard, sizeof(iso14a_card_select_t));
|
||||
}
|
||||
}
|
||||
|
||||
SetISODEPState(ISODEP_NFCA);
|
||||
if (disconnect)
|
||||
|
||||
if (disconnect) {
|
||||
DropField();
|
||||
}
|
||||
|
||||
return PM3_SUCCESS;
|
||||
}
|
||||
|
@ -928,8 +940,8 @@ static int CmdExchangeAPDU(bool chainingin, uint8_t *datain, int datainlen, bool
|
|||
*chainingout = false;
|
||||
|
||||
if (activateField) {
|
||||
// select with no disconnect and set frameLength
|
||||
int selres = SelectCard14443A_4(false, NULL);
|
||||
// select with no disconnect and set g_frame_len
|
||||
int selres = SelectCard14443A_4(false, true, NULL);
|
||||
if (selres != PM3_SUCCESS)
|
||||
return selres;
|
||||
}
|
||||
|
@ -965,7 +977,7 @@ static int CmdExchangeAPDU(bool chainingin, uint8_t *datain, int datainlen, bool
|
|||
}
|
||||
|
||||
// I-block ACK
|
||||
if ((res & 0xf2) == 0xa2) {
|
||||
if ((res & 0xF2) == 0xA2) {
|
||||
*dataoutlen = 0;
|
||||
*chainingout = true;
|
||||
return PM3_SUCCESS;
|
||||
|
@ -1015,13 +1027,14 @@ int ExchangeAPDU14a(uint8_t *datain, int datainlen, bool activateField, bool lea
|
|||
|
||||
// 3 byte here - 1b framing header, 2b crc16
|
||||
if (APDUInFramingEnable &&
|
||||
((frameLength && (datainlen > frameLength - 3)) || (datainlen > PM3_CMD_DATA_SIZE - 3))) {
|
||||
((g_frame_len && (datainlen > g_frame_len - 3)) || (datainlen > PM3_CMD_DATA_SIZE - 3))) {
|
||||
|
||||
int clen = 0;
|
||||
|
||||
bool vActivateField = activateField;
|
||||
|
||||
do {
|
||||
int vlen = MIN(frameLength - 3, datainlen - clen);
|
||||
int vlen = MIN(g_frame_len - 3, datainlen - clen);
|
||||
bool chainBlockNotLast = ((clen + vlen) < datainlen);
|
||||
|
||||
*dataoutlen = 0;
|
||||
|
@ -1045,17 +1058,19 @@ int ExchangeAPDU14a(uint8_t *datain, int datainlen, bool activateField, bool lea
|
|||
clen += vlen;
|
||||
vActivateField = false;
|
||||
if (*dataoutlen) {
|
||||
if (clen != datainlen)
|
||||
if (clen != datainlen) {
|
||||
PrintAndLogEx(ERR, "APDU: I-block/R-block sequence error. Data len=%d, Sent=%d, Last packet len=%d", datainlen, clen, *dataoutlen);
|
||||
}
|
||||
break;
|
||||
}
|
||||
} while (clen < datainlen);
|
||||
|
||||
} else {
|
||||
res = CmdExchangeAPDU(false, datain, datainlen, activateField, dataout, maxdataoutlen, dataoutlen, &chaining);
|
||||
if (res != PM3_SUCCESS) {
|
||||
if (leaveSignalON == false)
|
||||
if (leaveSignalON == false) {
|
||||
DropField();
|
||||
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
@ -1064,15 +1079,16 @@ int ExchangeAPDU14a(uint8_t *datain, int datainlen, bool activateField, bool lea
|
|||
// I-block with chaining
|
||||
res = CmdExchangeAPDU(false, NULL, 0, false, &dataout[*dataoutlen], maxdataoutlen, dataoutlen, &chaining);
|
||||
if (res != PM3_SUCCESS) {
|
||||
if (leaveSignalON == false)
|
||||
if (leaveSignalON == false) {
|
||||
DropField();
|
||||
|
||||
}
|
||||
return 100;
|
||||
}
|
||||
}
|
||||
|
||||
if (!leaveSignalON)
|
||||
if (leaveSignalON == false) {
|
||||
DropField();
|
||||
}
|
||||
|
||||
return PM3_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -43,5 +43,5 @@ int Hf14443_4aGetCardData(iso14a_card_select_t *card);
|
|||
int ExchangeAPDU14a(uint8_t *datain, int datainlen, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen);
|
||||
int ExchangeRAW14a(uint8_t *datain, int datainlen, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen, bool silentMode);
|
||||
|
||||
int SelectCard14443A_4(bool disconnect, iso14a_card_select_t *card);
|
||||
int SelectCard14443A_4(bool disconnect, bool verbose, iso14a_card_select_t *card);
|
||||
#endif
|
||||
|
|
|
@ -3685,7 +3685,7 @@ static int CmdHF14ADesInfo(const char *Cmd) {
|
|||
|
||||
|
||||
iso14a_card_select_t card;
|
||||
res = SelectCard14443A_4(true, &card);
|
||||
res = SelectCard14443A_4(true, false, &card);
|
||||
if (res == PM3_SUCCESS) {
|
||||
static const char STANDALONE_DESFIRE[] = { 0x75, 0x77, 0x81, 0x02};
|
||||
static const char JCOP_DESFIRE[] = { 0x75, 0xf7, 0xb1, 0x02 };
|
||||
|
|
|
@ -55,7 +55,7 @@ int Iso7816Connect(Iso7816CommandChannel channel) {
|
|||
}
|
||||
// Try to 14a
|
||||
// select with no disconnect and set frameLength
|
||||
int res = SelectCard14443A_4(false, NULL);
|
||||
int res = SelectCard14443A_4(false, false, NULL);
|
||||
if (res == PM3_SUCCESS) {
|
||||
SetISODEPState(ISODEP_NFCA);
|
||||
return PM3_SUCCESS;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue