mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-21 22:03:19 -07:00
small refactoring
This commit is contained in:
parent
ef8e6a94ad
commit
9fae7350e5
3 changed files with 42 additions and 31 deletions
|
@ -136,6 +136,45 @@ int CmdHF14AList(const char *Cmd)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Hf14443_4aGetCardData(iso14a_card_select_t * card) {
|
||||||
|
UsbCommand c = {CMD_READER_ISO_14443a, {ISO14A_CONNECT, 0, 0}};
|
||||||
|
SendCommand(&c);
|
||||||
|
|
||||||
|
UsbCommand resp;
|
||||||
|
WaitForResponse(CMD_ACK,&resp);
|
||||||
|
|
||||||
|
memcpy(card, (iso14a_card_select_t *)resp.d.asBytes, sizeof(iso14a_card_select_t));
|
||||||
|
|
||||||
|
uint64_t select_status = resp.arg[0]; // 0: couldn't read, 1: OK, with ATS, 2: OK, no ATS, 3: proprietary Anticollision
|
||||||
|
|
||||||
|
if(select_status == 0) {
|
||||||
|
PrintAndLog("E->iso14443a card select failed");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(select_status == 2) {
|
||||||
|
PrintAndLog("E->Card doesn't support iso14443-4 mode");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(select_status == 3) {
|
||||||
|
PrintAndLog("E->Card doesn't support standard iso14443-3 anticollision");
|
||||||
|
PrintAndLog("\tATQA : %02x %02x", card->atqa[1], card->atqa[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
PrintAndLog(" UID: %s", sprint_hex(card->uid, card->uidlen));
|
||||||
|
PrintAndLog("ATQA: %02x %02x", card->atqa[1], card->atqa[0]);
|
||||||
|
PrintAndLog(" SAK: %02x [%" PRIu64 "]", card->sak, resp.arg[0]);
|
||||||
|
if(card->ats_len < 3) { // a valid ATS consists of at least the length byte (TL) and 2 CRC bytes
|
||||||
|
PrintAndLog("E-> Error ATS length(%d) : %s", card->ats_len, sprint_hex(card->ats, card->ats_len));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
PrintAndLog(" ATS: %s", sprint_hex(card->ats, card->ats_len));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int CmdHF14AReader(const char *Cmd) {
|
int CmdHF14AReader(const char *Cmd) {
|
||||||
uint32_t cm = ISO14A_CONNECT;
|
uint32_t cm = ISO14A_CONNECT;
|
||||||
bool leaveSignalON = false;
|
bool leaveSignalON = false;
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include "mifare.h"
|
||||||
|
|
||||||
int CmdHF14A(const char *Cmd);
|
int CmdHF14A(const char *Cmd);
|
||||||
int CmdHF14AList(const char *Cmd);
|
int CmdHF14AList(const char *Cmd);
|
||||||
|
@ -25,6 +26,7 @@ int CmdHF14ASnoop(const char *Cmd);
|
||||||
char* getTagInfo(uint8_t uid);
|
char* getTagInfo(uint8_t uid);
|
||||||
|
|
||||||
extern void DropField();
|
extern void DropField();
|
||||||
|
extern int Hf14443_4aGetCardData(iso14a_card_select_t * card);
|
||||||
extern int ExchangeAPDU14a(uint8_t *datain, int datainlen, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen);
|
extern int ExchangeAPDU14a(uint8_t *datain, int datainlen, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1171,41 +1171,11 @@ int CmdHFEMVScan(const char *cmd) {
|
||||||
|
|
||||||
PrintAndLog("--> GET UID, ATS.");
|
PrintAndLog("--> GET UID, ATS.");
|
||||||
|
|
||||||
UsbCommand c = {CMD_READER_ISO_14443a, {ISO14A_CONNECT, 0, 0}};
|
|
||||||
SendCommand(&c);
|
|
||||||
|
|
||||||
UsbCommand resp;
|
|
||||||
WaitForResponse(CMD_ACK,&resp);
|
|
||||||
|
|
||||||
iso14a_card_select_t card;
|
iso14a_card_select_t card;
|
||||||
memcpy(&card, (iso14a_card_select_t *)resp.d.asBytes, sizeof(iso14a_card_select_t));
|
if (Hf14443_4aGetCardData(&card)) {
|
||||||
|
|
||||||
uint64_t select_status = resp.arg[0]; // 0: couldn't read, 1: OK, with ATS, 2: OK, no ATS, 3: proprietary Anticollision
|
|
||||||
|
|
||||||
if(select_status == 0) {
|
|
||||||
PrintAndLog("E->iso14443a card select failed");
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(select_status == 2) {
|
|
||||||
PrintAndLog("E->Card doesn't support iso14443-4 mode");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(select_status == 3) {
|
|
||||||
PrintAndLog("E->Card doesn't support standard iso14443-3 anticollision");
|
|
||||||
PrintAndLog("\tATQA : %02x %02x", card.atqa[1], card.atqa[0]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
PrintAndLog(" UID: %s", sprint_hex(card.uid, card.uidlen));
|
|
||||||
PrintAndLog("ATQA: %02x %02x", card.atqa[1], card.atqa[0]);
|
|
||||||
PrintAndLog(" SAK: %02x [%" PRIu64 "]", card.sak, resp.arg[0]);
|
|
||||||
if(card.ats_len < 3) { // a valid ATS consists of at least the length byte (TL) and 2 CRC bytes
|
|
||||||
PrintAndLog("E-> Error ATS length(%d) : %s", card.ats_len, sprint_hex(card.ats, card.ats_len));
|
|
||||||
}
|
|
||||||
PrintAndLog(" ATS: %s", sprint_hex(card.ats, card.ats_len));
|
|
||||||
|
|
||||||
// init applets list tree
|
// init applets list tree
|
||||||
const char *al = "Applets list";
|
const char *al = "Applets list";
|
||||||
struct tlvdb *tlvSelect = tlvdb_fixed(1, strlen(al), (const unsigned char *)al);
|
struct tlvdb *tlvSelect = tlvdb_fixed(1, strlen(al), (const unsigned char *)al);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue