mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-02-13 02:34:48 +08:00
chg: emv commands should now compile. no testing done.
This commit is contained in:
parent
647411d10d
commit
9959d5c1e7
5 changed files with 21 additions and 12 deletions
|
@ -1070,7 +1070,7 @@ static command_t CommandTable[] = {
|
||||||
{"14b", CmdHF14B, 1, "{ ISO14443B RFIDs... }"},
|
{"14b", CmdHF14B, 1, "{ ISO14443B RFIDs... }"},
|
||||||
{"15", CmdHF15, 1, "{ ISO15693 RFIDs... }"},
|
{"15", CmdHF15, 1, "{ ISO15693 RFIDs... }"},
|
||||||
{"epa", CmdHFEPA, 1, "{ German Identification Card... }"},
|
{"epa", CmdHFEPA, 1, "{ German Identification Card... }"},
|
||||||
{"emv", CmdHFEmv, 1, "{ EMV RFIDs... }"},
|
{"emv", CmdHFEMV, 1, "{ EMV RFIDs... }"},
|
||||||
{"felica", CmdHFFelica, 1, "{ ISO18092 / Felica RFIDs... }"},
|
{"felica", CmdHFFelica, 1, "{ ISO18092 / Felica RFIDs... }"},
|
||||||
{"legic", CmdHFLegic, 1, "{ LEGIC RFIDs... }"},
|
{"legic", CmdHFLegic, 1, "{ LEGIC RFIDs... }"},
|
||||||
{"iclass", CmdHFiClass, 1, "{ ICLASS RFIDs... }"},
|
{"iclass", CmdHFiClass, 1, "{ ICLASS RFIDs... }"},
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// 2011, Merlok
|
|
||||||
// 2014, Peter Fillmore
|
|
||||||
// Copyright (C) 2010 iZsh <izsh at fail0verflow.com>, Hagen Fritsch
|
// Copyright (C) 2010 iZsh <izsh at fail0verflow.com>, Hagen Fritsch
|
||||||
|
// 2011, 2017 Merlok
|
||||||
|
// 2014, Peter Fillmore
|
||||||
|
// 2015, 2016, 2017 Iceman
|
||||||
//
|
//
|
||||||
// This code is licensed to you under the terms of the GNU GPL, version 2 or,
|
// This code is licensed to you under the terms of the GNU GPL, version 2 or,
|
||||||
// at your option, any later version. See the LICENSE.txt file for the text of
|
// at your option, any later version. See the LICENSE.txt file for the text of
|
||||||
|
@ -655,7 +656,7 @@ void DropField() {
|
||||||
SendCommand(&c);
|
SendCommand(&c);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ExchangeAPDU14a(uint8_t *datain, int datainlen, bool activateField, bool leaveSignalON, uint8_t *dataout, int *dataoutlen) {
|
int ExchangeAPDU14a(uint8_t *datain, int datainlen, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen) {
|
||||||
uint16_t cmdc = 0;
|
uint16_t cmdc = 0;
|
||||||
|
|
||||||
if (activateField) {
|
if (activateField) {
|
||||||
|
@ -667,8 +668,8 @@ int ExchangeAPDU14a(uint8_t *datain, int datainlen, bool activateField, bool lea
|
||||||
// "Command APDU" length should be 5+255+1, but javacard's APDU buffer might be smaller - 133 bytes
|
// "Command APDU" length should be 5+255+1, but javacard's APDU buffer might be smaller - 133 bytes
|
||||||
// https://stackoverflow.com/questions/32994936/safe-max-java-card-apdu-data-command-and-respond-size
|
// https://stackoverflow.com/questions/32994936/safe-max-java-card-apdu-data-command-and-respond-size
|
||||||
// here length USB_CMD_DATA_SIZE=512
|
// here length USB_CMD_DATA_SIZE=512
|
||||||
// timeout timeout14a * 1.06 / 100, true, size, &keyBlock[6 * c], e_sector); // timeout is (ms * 106)/10 or us*0.0106
|
// timeout must be authomatically set by "get ATS"
|
||||||
UsbCommand c = {CMD_READER_ISO_14443a, {ISO14A_APDU | ISO14A_SET_TIMEOUT | cmdc, (datainlen & 0xFFFF), 1000 * 1000 * 1.06 / 100}};
|
UsbCommand c = {CMD_READER_ISO_14443a, {ISO14A_APDU | cmdc, (datainlen & 0xFFFF), 0}};
|
||||||
memcpy(c.d.asBytes, datain, datainlen);
|
memcpy(c.d.asBytes, datain, datainlen);
|
||||||
SendCommand(&c);
|
SendCommand(&c);
|
||||||
|
|
||||||
|
@ -693,6 +694,12 @@ int ExchangeAPDU14a(uint8_t *datain, int datainlen, bool activateField, bool lea
|
||||||
*dataoutlen = iLen - 2;
|
*dataoutlen = iLen - 2;
|
||||||
if (*dataoutlen < 0)
|
if (*dataoutlen < 0)
|
||||||
*dataoutlen = 0;
|
*dataoutlen = 0;
|
||||||
|
|
||||||
|
if (maxdataoutlen && *dataoutlen > maxdataoutlen) {
|
||||||
|
PrintAndLog("APDU ERROR: Buffer too small(%d). Needs %d bytes", *dataoutlen, maxdataoutlen);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
memcpy(dataout, recv, *dataoutlen);
|
memcpy(dataout, recv, *dataoutlen);
|
||||||
|
|
||||||
if(!iLen) {
|
if(!iLen) {
|
||||||
|
@ -786,7 +793,7 @@ int CmdHF14AAPDU(const char *cmd) {
|
||||||
|
|
||||||
PrintAndLog(">>>>[%s%s%s] %s", activateField ? "sel ": "", leaveSignalON ? "keep ": "", decodeTLV ? "TLV": "", sprint_hex(data, datalen));
|
PrintAndLog(">>>>[%s%s%s] %s", activateField ? "sel ": "", leaveSignalON ? "keep ": "", decodeTLV ? "TLV": "", sprint_hex(data, datalen));
|
||||||
|
|
||||||
int res = ExchangeAPDU14a(data, datalen, activateField, leaveSignalON, data, &datalen);
|
int res = ExchangeAPDU14a(data, datalen, activateField, leaveSignalON, data, USB_CMD_DATA_SIZE, &datalen);
|
||||||
|
|
||||||
if (res)
|
if (res)
|
||||||
return res;
|
return res;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// 2011, Merlok
|
|
||||||
// Copyright (C) 2010 iZsh <izsh at fail0verflow.com>
|
// Copyright (C) 2010 iZsh <izsh at fail0verflow.com>
|
||||||
|
// 2011, Merlok
|
||||||
// 2015,216,2017 iceman, marshmellow, piwi
|
// 2015,216,2017 iceman, marshmellow, piwi
|
||||||
// This code is licensed to you under the terms of the GNU GPL, version 2 or,
|
// This code is licensed to you under the terms of the GNU GPL, version 2 or,
|
||||||
// at your option, any later version. See the LICENSE.txt file for the text of
|
// at your option, any later version. See the LICENSE.txt file for the text of
|
||||||
|
@ -50,7 +50,8 @@ extern int CmdHF14ACUIDs(const char *Cmd);
|
||||||
|
|
||||||
extern char* getTagInfo(uint8_t uid);
|
extern char* getTagInfo(uint8_t uid);
|
||||||
extern void DropField();
|
extern void DropField();
|
||||||
extern int ExchangeAPDU14a(uint8_t *datain, int datainlen, bool activateField, bool leaveSignalON, uint8_t *dataout, int *dataoutlen);
|
extern int ExchangeAPDU14a(uint8_t *datain, int datainlen, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern int usage_hf_14a_sim(void);
|
extern int usage_hf_14a_sim(void);
|
||||||
|
|
|
@ -10,6 +10,8 @@
|
||||||
|
|
||||||
#include "cmdemv.h"
|
#include "cmdemv.h"
|
||||||
|
|
||||||
|
static int CmdHelp(const char *Cmd);
|
||||||
|
|
||||||
int UsageCmdHFEMVSelect(void) {
|
int UsageCmdHFEMVSelect(void) {
|
||||||
PrintAndLog("HELP : Executes select applet command:\n");
|
PrintAndLog("HELP : Executes select applet command:\n");
|
||||||
PrintAndLog("Usage: hf emv select [-s][-k][-a][-t] <HEX applet AID>\n");
|
PrintAndLog("Usage: hf emv select [-s][-k][-a][-t] <HEX applet AID>\n");
|
||||||
|
@ -289,8 +291,6 @@ int UsageCmdHFEMVExec(void) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define TLV_ADD(tag, value)( tlvdb_add(tlvRoot, tlvdb_fixed(tag, sizeof(value) - 1, (const unsigned char *)value)) )
|
|
||||||
|
|
||||||
int CmdHFEMVExec(const char *cmd) {
|
int CmdHFEMVExec(const char *cmd) {
|
||||||
bool activateField = false;
|
bool activateField = false;
|
||||||
bool showAPDU = false;
|
bool showAPDU = false;
|
||||||
|
@ -531,7 +531,6 @@ return 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CmdHelp(const char *Cmd);
|
|
||||||
static command_t CommandTable[] = {
|
static command_t CommandTable[] = {
|
||||||
{"help", CmdHelp, 1, "This help"},
|
{"help", CmdHelp, 1, "This help"},
|
||||||
{"exec", CmdHFEMVExec, 0, "Executes EMV contactless transaction."},
|
{"exec", CmdHFEMVExec, 0, "Executes EMV contactless transaction."},
|
||||||
|
@ -542,6 +541,7 @@ static command_t CommandTable[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
int CmdHFEMV(const char *Cmd) {
|
int CmdHFEMV(const char *Cmd) {
|
||||||
|
clearCommandBuffer();
|
||||||
CmdsParse(CommandTable, Cmd);
|
CmdsParse(CommandTable, Cmd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,5 +27,6 @@
|
||||||
|
|
||||||
int CmdHFEMV(const char *Cmd);
|
int CmdHFEMV(const char *Cmd);
|
||||||
|
|
||||||
|
#define TLV_ADD(tag, value)( tlvdb_add(tlvRoot, tlvdb_fixed(tag, sizeof(value) - 1, (const unsigned char *)value)) )
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
Reference in a new issue