From: pwpiwi Date: Wed, 11 Mar 2015 19:17:24 +0000 (+0100) Subject: fix: hf 14a raw was broken X-Git-Tag: show~5 X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/04bc1c660b1c74672ed7535b0a79fece45e5e571?hp=58e93ff593ee67e1c41fa790110dc60f09b91cc4 fix: hf 14a raw was broken (see http://www.proxmark.org/forum/viewtopic.php?id=2351) --- diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index f2fa1ff2..ac839cfd 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -1890,8 +1890,9 @@ void ReaderIso14443a(UsbCommand *c) { iso14a_command_t param = c->arg[0]; uint8_t *cmd = c->d.asBytes; - size_t len = c->arg[1]; - size_t lenbits = c->arg[2]; + size_t len = c->arg[1] & 0xffff; + size_t lenbits = c->arg[1] >> 16; + uint32_t timeout = c->arg[2]; uint32_t arg0 = 0; byte_t buf[USB_CMD_DATA_SIZE]; uint8_t par[MAX_PARITY_SIZE]; @@ -1916,7 +1917,7 @@ void ReaderIso14443a(UsbCommand *c) } if(param & ISO14A_SET_TIMEOUT) { - iso14a_set_timeout(c->arg[2]); + iso14a_set_timeout(timeout); } if(param & ISO14A_APDU) { diff --git a/client/cmdhf14a.c b/client/cmdhf14a.c index 744b3875..d36ebb8b 100644 --- a/client/cmdhf14a.c +++ b/client/cmdhf14a.c @@ -560,7 +560,7 @@ int CmdHF14ACmdRaw(const char *cmd) { timeout = temp; i+=3; while(cmd[i]!=' ' && cmd[i]!='\0') { i++; } - i+=2; + i-=2; break; default: PrintAndLog("Invalid option"); @@ -605,6 +605,7 @@ int CmdHF14ACmdRaw(const char *cmd) { if(active) c.arg[0] |= ISO14A_NO_SELECT; } + if(bTimeout){ #define MAX_TIMEOUT 40542464 // (2^32-1) * (8*16) / 13560000Hz * 1000ms/s = c.arg[0] |= ISO14A_SET_TIMEOUT; @@ -612,7 +613,7 @@ int CmdHF14ACmdRaw(const char *cmd) { timeout = MAX_TIMEOUT; PrintAndLog("Set timeout to 40542 seconds (11.26 hours). The max we can wait for response"); } - c.arg[2] = 13560000 / 1000 / (8*16) * timeout; // timeout in ETUs (time to transfer 1 bit, approx. 9.4 us) + c.arg[2] = 13560000 / 1000 / (8*16) * timeout; // timeout in ETUs (time to transfer 1 bit, approx. 9.4 us) } if(power) c.arg[0] |= ISO14A_NO_DISCONNECT;