fix "hf mf chk" <t|d|s|ss> flags (based on PR #700) (#718)
authorpwpiwi <pwpiwi@users.noreply.github.com>
Fri, 30 Nov 2018 06:45:01 +0000 (07:45 +0100)
committerGitHub <noreply@github.com>
Fri, 30 Nov 2018 06:45:01 +0000 (07:45 +0100)
client/cmdhfmf.c

index 83180e7d096975cc8d0a41a4b12ddbac9368bc2f..c382664ba44aee0b08b0c58e3087d841e6b969ad 100644 (file)
@@ -534,7 +534,7 @@ int CmdHF14AMfRestore(const char *Cmd)
 //----------------------------------------------\r
 \r
 static void parseParamTDS(const char *Cmd, const uint8_t indx, bool *paramT, bool *paramD, uint8_t *timeout) {\r
-       char ctmp3[3] = {0};\r
+       char ctmp3[4] = {0};\r
        int len = param_getlength(Cmd, indx);\r
        if (len > 0 && len < 4){\r
                param_getstr(Cmd, indx, ctmp3, sizeof(ctmp3));\r
@@ -1018,10 +1018,10 @@ int CmdHF14AMfChk(const char *Cmd)
                PrintAndLog("Usage:  hf mf chk <block number>|<*card memory> <key type (A/B/?)> [t|d|s|ss] [<key (12 hex symbols)>] [<dic (*.dic)>]");\r
                PrintAndLog("          * - all sectors");\r
                PrintAndLog("card memory - 0 - MINI(320 bytes), 1 - 1K, 2 - 2K, 4 - 4K, <other> - 1K");\r
-               PrintAndLog("d - write keys to binary file\n");\r
-               PrintAndLog("t - write keys to emulator memory");\r
-               PrintAndLog("s - slow execute. timeout 1ms");\r
-               PrintAndLog("ss- very slow execute. timeout 5ms");\r
+               PrintAndLog("d  - write keys to binary file\n");\r
+               PrintAndLog("t  - write keys to emulator memory");\r
+               PrintAndLog("s  - slow execute. timeout 1ms");\r
+               PrintAndLog("ss - very slow execute. timeout 5ms");\r
                PrintAndLog("      sample: hf mf chk 0 A 1234567890ab keys.dic");\r
                PrintAndLog("              hf mf chk *1 ? t");\r
                PrintAndLog("              hf mf chk *1 ? d");\r
@@ -1040,16 +1040,16 @@ int CmdHF14AMfChk(const char *Cmd)
        int     keycnt = 0;\r
        char ctmp       = 0x00;\r
        int clen = 0;\r
-       char ctmp3[3]   = {0x00};\r
        uint8_t blockNo = 0;\r
        uint8_t SectorsCnt = 0;\r
        uint8_t keyType = 0;\r
        uint64_t key64 = 0;\r
-       uint32_t timeout14a = 0; // timeout in us\r
+       // timeout in units. (ms * 106)/10 or us*0.0106\r
+       uint8_t btimeout14a = MF_CHKKEYS_DEFTIMEOUT; // fast by default\r
        bool param3InUse = false;\r
 \r
-       int transferToEml = 0;\r
-       int createDumpFile = 0;\r
+       bool transferToEml = 0;\r
+       bool createDumpFile = 0;\r
        \r
        sector_t *e_sector = NULL;\r
 \r
@@ -1087,33 +1087,13 @@ int CmdHF14AMfChk(const char *Cmd)
                };\r
        }\r
 \r
-       // transfer to emulator & create dump file\r
-       ctmp = param_getchar(Cmd, 2);\r
-       clen = param_getlength(Cmd, 2);\r
-       if (clen == 1 && (ctmp == 't' || ctmp == 'T')) transferToEml = 1;\r
-       if (clen == 1 && (ctmp == 'd' || ctmp == 'D')) createDumpFile = 1;\r
-       \r
-       param3InUse = transferToEml | createDumpFile;\r
+       parseParamTDS(Cmd, 2, &transferToEml, &createDumpFile, &btimeout14a);\r
        \r
-       timeout14a = 500; // fast by default\r
-       // double parameters - ts, ds\r
-       clen = param_getlength(Cmd, 2);\r
-       if (clen == 2 || clen == 3){\r
-               param_getstr(Cmd, 2, ctmp3, sizeof(ctmp3));\r
-               ctmp = ctmp3[1];\r
-       }\r
-       //parse\r
-       if (ctmp == 's' || ctmp == 'S') {\r
-               timeout14a = 1000; // slow\r
-               if (!param3InUse && clen == 2 && (ctmp3[1] == 's' || ctmp3[1] == 'S')) {\r
-                       timeout14a = 5000; // very slow\r
-               }\r
-               if (param3InUse && clen == 3 && (ctmp3[2] == 's' || ctmp3[2] == 'S')) {\r
-                       timeout14a = 5000; // very slow\r
-               }\r
-               param3InUse = true;\r
-       }\r
+       param3InUse = transferToEml | createDumpFile | (btimeout14a != MF_CHKKEYS_DEFTIMEOUT);\r
 \r
+       PrintAndLog("--chk keys. sectors:%2d, block no:%3d, key type:%c, eml:%c, dmp=%c checktimeout=%d us", \r
+                       SectorsCnt, blockNo, keyType?'B':'A', transferToEml?'y':'n', createDumpFile?'y':'n', ((int)btimeout14a * 10000) / 106);\r
+       \r
        for (i = param3InUse; param_getchar(Cmd, 2 + i); i++) {\r
                if (!param_gethex(Cmd, 2 + i, keyBlock + 6 * keycnt, 12)) {\r
                        if ( stKeyBlock - keycnt < 2) {\r
@@ -1210,7 +1190,7 @@ int CmdHF14AMfChk(const char *Cmd)
                for (uint32_t c = 0; c < keycnt; c += max_keys) {\r
 \r
                        uint32_t size = keycnt-c > max_keys ? max_keys : keycnt-c;\r
-                       res = mfCheckKeysSec(SectorsCnt, keyType, timeout14a * 1.06 / 100, true, size, &keyBlock[6 * c], e_sector); // timeout is (ms * 106)/10 or us*0.0106\r
+                       res = mfCheckKeysSec(SectorsCnt, keyType, btimeout14a, true, size, &keyBlock[6 * c], e_sector); // timeout is (ms * 106)/10 or us*0.0106\r
 \r
                        if (res != 1) {\r
                                if (!res) {\r
Impressum, Datenschutz