mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-22 14:13:42 -07:00
added maxdataoutlen to 14a apdu
This commit is contained in:
parent
9691e3e0c9
commit
3128f56dca
3 changed files with 12 additions and 6 deletions
|
@ -648,7 +648,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) {
|
||||||
|
@ -686,6 +686,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) {
|
||||||
|
@ -779,7 +785,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;
|
||||||
|
|
|
@ -31,6 +31,6 @@ int CmdHF14ASnoop(const char *Cmd);
|
||||||
char* getTagInfo(uint8_t uid);
|
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);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -157,7 +157,7 @@ int EMVSelect(bool ActivateField, bool LeaveFieldON, uint8_t *AID, size_t AIDLen
|
||||||
if (APDULogging)
|
if (APDULogging)
|
||||||
PrintAndLog(">>>> %s", sprint_hex(data, AIDLen + 6));
|
PrintAndLog(">>>> %s", sprint_hex(data, AIDLen + 6));
|
||||||
|
|
||||||
int res = ExchangeAPDU14a(data, AIDLen + 6, ActivateField, LeaveFieldON, Result, (int *)ResultLen);
|
int res = ExchangeAPDU14a(data, AIDLen + 6, ActivateField, LeaveFieldON, Result, (int)MaxResultLen, (int *)ResultLen);
|
||||||
|
|
||||||
if (APDULogging)
|
if (APDULogging)
|
||||||
PrintAndLog("<<<< %s", sprint_hex(Result, *ResultLen));
|
PrintAndLog("<<<< %s", sprint_hex(Result, *ResultLen));
|
||||||
|
@ -381,7 +381,7 @@ int EMVGPO(bool LeaveFieldON, uint8_t *PDOL, size_t PDOLLen, uint8_t *Result, si
|
||||||
if (APDULogging)
|
if (APDULogging)
|
||||||
PrintAndLog(">>>> %s", sprint_hex(data, PDOLLen + 5));
|
PrintAndLog(">>>> %s", sprint_hex(data, PDOLLen + 5));
|
||||||
|
|
||||||
int res = ExchangeAPDU14a(data, PDOLLen + 5, false, LeaveFieldON, Result, (int *)ResultLen);
|
int res = ExchangeAPDU14a(data, PDOLLen + 5, false, LeaveFieldON, Result, (int)MaxResultLen, (int *)ResultLen);
|
||||||
|
|
||||||
if (APDULogging)
|
if (APDULogging)
|
||||||
PrintAndLog("<<<< %s", sprint_hex(Result, *ResultLen));
|
PrintAndLog("<<<< %s", sprint_hex(Result, *ResultLen));
|
||||||
|
@ -431,7 +431,7 @@ int EMVReadRecord(bool LeaveFieldON, uint8_t SFI, uint8_t SFIrec, uint8_t *Resul
|
||||||
if (APDULogging)
|
if (APDULogging)
|
||||||
PrintAndLog(">>>> %s", sprint_hex(data, 5));
|
PrintAndLog(">>>> %s", sprint_hex(data, 5));
|
||||||
|
|
||||||
int res = ExchangeAPDU14a(data, 5, false, LeaveFieldON, Result, (int *)ResultLen);
|
int res = ExchangeAPDU14a(data, 5, false, LeaveFieldON, Result, (int)MaxResultLen, (int *)ResultLen);
|
||||||
|
|
||||||
if (APDULogging)
|
if (APDULogging)
|
||||||
PrintAndLog("<<<< %s", sprint_hex(Result, *ResultLen));
|
PrintAndLog("<<<< %s", sprint_hex(Result, *ResultLen));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue