mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-22 06:13:27 -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);
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
if (activateField) {
|
||||
|
@ -686,6 +686,12 @@ int ExchangeAPDU14a(uint8_t *datain, int datainlen, bool activateField, bool lea
|
|||
*dataoutlen = iLen - 2;
|
||||
if (*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);
|
||||
|
||||
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));
|
||||
|
||||
int res = ExchangeAPDU14a(data, datalen, activateField, leaveSignalON, data, &datalen);
|
||||
int res = ExchangeAPDU14a(data, datalen, activateField, leaveSignalON, data, USB_CMD_DATA_SIZE, &datalen);
|
||||
|
||||
if (res)
|
||||
return res;
|
||||
|
|
|
@ -31,6 +31,6 @@ int CmdHF14ASnoop(const char *Cmd);
|
|||
char* getTagInfo(uint8_t uid);
|
||||
|
||||
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
|
||||
|
|
|
@ -157,7 +157,7 @@ int EMVSelect(bool ActivateField, bool LeaveFieldON, uint8_t *AID, size_t AIDLen
|
|||
if (APDULogging)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
PrintAndLog("<<<< %s", sprint_hex(Result, *ResultLen));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue