]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
Merge pull request #538 from merlokk/hardnestedsetsimd
authorIceman <iceman@iuse.se>
Sat, 6 Jan 2018 17:54:27 +0000 (18:54 +0100)
committerGitHub <noreply@github.com>
Sat, 6 Jan 2018 17:54:27 +0000 (18:54 +0100)
hardnested SIMD select

14 files changed:
client/cmdcrc.c
client/cmdhf14a.c
client/cmdhf14a.h
client/cmdhfmf.c
client/cmdlft55xx.c
client/emv/cmdemv.c
client/emv/crypto_polarssl.c
client/emv/emv_pki.c
client/emv/test/crypto_test.c
client/loclass/ikeys.c
client/pm3_binlib.c
client/reveng/model.c
client/ui.c
client/util.c

index 27d081b911de0c459206092d40473020d4002b17..0ca2b8b1e00d816223d991f49d23978dc8f10739 100644 (file)
@@ -40,14 +40,14 @@ int split(char *str, char *arr[MAX_ARGS]){
        int wordCnt = 0;
 
        while(1){
-               while(isspace(str[beginIndex])){
+               while(isspace((unsigned char)str[beginIndex])){
                        ++beginIndex;
                }
                if(str[beginIndex] == '\0') {
                        break;
                }
                endIndex = beginIndex;
-               while (str[endIndex] && !isspace(str[endIndex])){
+               while (str[endIndex] && !isspace((unsigned char)str[endIndex])){
                        ++endIndex;
                }
                int len = endIndex - beginIndex;
index 8064724cc3185a66b2e86f0c38c4bb8baaf9646c..480923d663a91f3de77531b67f2b5ddac4fcb2b9 100644 (file)
@@ -16,6 +16,7 @@
 #include <inttypes.h>
 #include <string.h>
 #include <unistd.h>
+#include <ctype.h>
 #include "util.h"
 #include "util_posix.h"
 #include "iso14443crc.h"
 static int CmdHelp(const char *Cmd);
 static int waitCmd(uint8_t iLen);
 
+// structure and database for uid -> tagtype lookups 
+typedef struct { 
+       uint8_t uid;
+       char* desc;
+} manufactureName; 
 
-const manufactureName manufactureMapping[] = {
+static const manufactureName manufactureMapping[] = {
        // ID,  "Vendor Country"
        { 0x01, "Motorola UK" },
        { 0x02, "ST Microelectronics SA France" },
@@ -153,7 +159,7 @@ int CmdHF14AReader(const char *Cmd) {
                        break;
                case 'x':
                case 'X':
-                       cm = cm - ISO14A_CONNECT;
+                       cm &= ~ISO14A_CONNECT;
                        break;
                default:
                        PrintAndLog("Unknown command.");
@@ -191,7 +197,7 @@ int CmdHF14AReader(const char *Cmd) {
 
                PrintAndLog(" UID : %s", sprint_hex(card.uid, card.uidlen));
                PrintAndLog("ATQA : %02x %02x", card.atqa[1], card.atqa[0]);
-               PrintAndLog(" SAK : %02x [%d]", card.sak, resp.arg[0]);
+               PrintAndLog(" SAK : %02x [%" PRIu64 "]", card.sak, resp.arg[0]);
                if(card.ats_len >= 3) {                 // a valid ATS consists of at least the length byte (TL) and 2 CRC bytes
                        PrintAndLog(" ATS : %s", sprint_hex(card.ats, card.ats_len));
                }
@@ -243,7 +249,7 @@ int CmdHF14AInfo(const char *Cmd)
 
        PrintAndLog(" UID : %s", sprint_hex(card.uid, card.uidlen));
        PrintAndLog("ATQA : %02x %02x", card.atqa[1], card.atqa[0]);
-       PrintAndLog(" SAK : %02x [%d]", card.sak, resp.arg[0]);
+       PrintAndLog(" SAK : %02x [%" PRIu64 "]", card.sak, resp.arg[0]);
 
        bool isMifareClassic = true;
        switch (card.sak) {
@@ -764,7 +770,7 @@ int CmdHF14AAPDU(const char *cmd) {
                                        return 1;
                        }
                        
-               if (isxdigit(c)) {
+               if (isxdigit((unsigned char)c)) {
                        // len = data + PCB(1b) + CRC(2b)
                        switch(param_gethex_to_eol(cmd, cmdp, data, sizeof(data) - 1 - 2, &datalen)) {
                        case 1:
index 401cead04469666897d3167be62d8ae8049b65fd..71007f954f7475e6a7d1f679db62bb04ab2135c0 100644 (file)
 #include <stdint.h>
 #include <stdbool.h>
 
-// structure and database for uid -> tagtype lookups 
-typedef struct { 
-       uint8_t uid;
-       char* desc;
-} manufactureName; 
-
 int CmdHF14A(const char *Cmd);
 int CmdHF14AList(const char *Cmd);
 int CmdHF14AMifare(const char *Cmd);
index ed08917a57cccd06519a54a9e4f131ff31935227..4956df8c66e898f03fee4647db9722553a669f90 100644 (file)
@@ -1035,6 +1035,7 @@ int CmdHF14AMfChk(const char *Cmd)
        int i, res;\r
        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
@@ -1063,32 +1064,36 @@ int CmdHF14AMfChk(const char *Cmd)
                blockNo = param_get8(Cmd, 0);\r
 \r
        ctmp = param_getchar(Cmd, 1);\r
-       switch (ctmp) {\r
-       case 'a': case 'A':\r
-               keyType = 0;\r
-               break;\r
-       case 'b': case 'B':\r
-               keyType = 1;\r
-               break;\r
-       case '?':\r
-               keyType = 2;\r
-               break;\r
-       default:\r
-               PrintAndLog("Key type must be A , B or ?");\r
-               free(keyBlock);\r
-               return 1;\r
-       };\r
+       clen = param_getlength(Cmd, 1);\r
+       if (clen == 1) {\r
+               switch (ctmp) {\r
+               case 'a': case 'A':\r
+                       keyType = 0;\r
+                       break;\r
+               case 'b': case 'B':\r
+                       keyType = 1;\r
+                       break;\r
+               case '?':\r
+                       keyType = 2;\r
+                       break;\r
+               default:\r
+                       PrintAndLog("Key type must be A , B or ?");\r
+                       free(keyBlock);\r
+                       return 1;\r
+               };\r
+       }\r
 \r
        // transfer to emulator & create dump file\r
        ctmp = param_getchar(Cmd, 2);\r
-       if (ctmp == 't' || ctmp == 'T') transferToEml = 1;\r
-       if (ctmp == 'd' || ctmp == 'D') createDumpFile = 1;\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
        \r
        timeout14a = 500; // fast by default\r
        // double parameters - ts, ds\r
-       int clen = param_getlength(Cmd, 2);\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
@@ -1137,7 +1142,7 @@ int CmdHF14AMfChk(const char *Cmd)
 \r
                                        if( buf[0]=='#' ) continue;     //The line start with # is comment, skip\r
 \r
-                                       if (!isxdigit(buf[0])){\r
+                                       if (!isxdigit((unsigned char)buf[0])){\r
                                                PrintAndLog("File content error. '%s' must include 12 HEX symbols",buf);\r
                                                continue;\r
                                        }\r
index 92a00bce5820f7e63dd4675c12ac1ec118f2567a..c5a6dd3f64623ed304c2487b50ae0238dedb7602 100644 (file)
@@ -1433,7 +1433,7 @@ int CmdT55xxBruteForce(const char *Cmd) {
                        //The line start with # is comment, skip\r
                        if( buf[0]=='#' ) continue;\r
 \r
-                       if (!isxdigit(buf[0])) {\r
+                       if (!isxdigit((unsigned char)buf[0])) {\r
                                PrintAndLog("File content error. '%s' must include 8 HEX symbols", buf);\r
                                continue;\r
                        }\r
index 42c8524aaaa897e80df91033e6b3dda6811060d0..c53b02af1a1dd1e4e58225a0f2dc905332e312ae 100644 (file)
@@ -8,6 +8,7 @@
 // EMV commands
 //-----------------------------------------------------------------------------
 
+#include <ctype.h>
 #include "cmdemv.h"
 #include "test/cryptotest.h"
 
@@ -69,7 +70,7 @@ int CmdHFEMVSelect(const char *cmd) {
                                        return 1;
                }
 
-               if (isxdigit(c)) {
+               if (isxdigit((unsigned char)c)) {
                        switch(param_gethex_to_eol(cmd, cmdp, data, sizeof(data), &datalen)) {
                        case 1:
                                PrintAndLog("Invalid HEX value.");
index 760395c4fc9db545b7b81e88b0480102bcff21b6..3d11afe5e2b73c7fea79ff1fba6990e7dfbf5b5f 100644 (file)
@@ -215,7 +215,7 @@ static unsigned char *crypto_pk_polarssl_encrypt(const struct crypto_pk *_cp, co
 
        res = rsa_public(&cp->ctx, buf, result);
        if(res) {
-               printf("RSA encrypt failed. Error: %x data len: %d key len: %d\n", res * -1, len, keylen);
+               printf("RSA encrypt failed. Error: %x data len: %zd key len: %zd\n", res * -1, len, keylen);
                return NULL;
        }
        
@@ -241,7 +241,7 @@ static unsigned char *crypto_pk_polarssl_decrypt(const struct crypto_pk *_cp, co
 
        res = rsa_private(&cp->ctx, buf, result); // CHECK???
        if(res) {
-               printf("RSA decrypt failed. Error: %x data len: %d key len: %d\n", res * -1, len, keylen);
+               printf("RSA decrypt failed. Error: %x data len: %zd key len: %zd\n", res * -1, len, keylen);
                return NULL;
        }
        
index 7803060e2e6b33eda5c471d182ed6d65f6708ce4..f79e30453fd3929c3b8cfc31590348a6e27ba0db 100644 (file)
@@ -53,7 +53,7 @@ static unsigned char *emv_pki_decode_message(const struct emv_pk *enc_pk,
        }
 
        if (cert_tlv->len != enc_pk->mlen) {
-               printf("ERROR: Certificate length (%d) not equal key length (%d)\n", cert_tlv->len, enc_pk->mlen);
+               printf("ERROR: Certificate length (%zd) not equal key length (%zd)\n", cert_tlv->len, enc_pk->mlen);
                return NULL;
        }
        kcp = crypto_pk_open(enc_pk->pk_algo,
@@ -451,7 +451,7 @@ struct tlvdb *emv_pki_perform_cda_ex(const struct emv_pk *enc_pk, const struct t
                        un_tlv,
                        NULL);
        if (!data || data_len < 3) {
-               printf("ERROR: can't decode message. len %d\n", data_len);
+               printf("ERROR: can't decode message. len %zd\n", data_len);
                return NULL;
        }
 
index ff18b9da79eee37297ba3cb4d6b51147cb6a71ce..352f48b44c12410ffb0514fa9c2ccdd1f8677e58 100644 (file)
@@ -219,7 +219,7 @@ static int test_pk(bool verbose)
 
        tmp = crypto_pk_get_parameter(pubk, 0, &tmp_len);
        if (tmp_len != sizeof(pk_N) || memcmp(tmp, pk_N, tmp_len)) {
-               fprintf(stderr, "ERROR: crypto_pk_get_parameter(0) Modulus. param len %d len %d\n", tmp_len, sizeof(pk_N));
+               fprintf(stderr, "ERROR: crypto_pk_get_parameter(0) Modulus. param len %zd len %zd\n", tmp_len, sizeof(pk_N));
                free(tmp);
                goto close_pub;
        }
@@ -256,7 +256,7 @@ static int test_pk(bool verbose)
 
        tmp = crypto_pk_get_parameter(privk, 0, &tmp_len);
        if (tmp_len != sizeof(pk_N) || memcmp(tmp, pk_N, tmp_len)) {
-               fprintf(stderr, "ERROR: crypto_pk_get_parameter(0) Modulus. param len %d len %d\n", tmp_len, sizeof(pk_N));
+               fprintf(stderr, "ERROR: crypto_pk_get_parameter(0) Modulus. param len %zd len %zd\n", tmp_len, sizeof(pk_N));
                free(tmp);
                goto close;
        }
index 72acf6906d6a61bc18db1a6f2e9e604ce543e13d..2a6a00109297c72afe47de08426814f37a510f7e 100644 (file)
@@ -739,18 +739,16 @@ int readKeyFile(uint8_t key[8])
        FILE *f;
        int retval = 1;
        f = fopen("iclass_key.bin", "rb");
-       if (f)
-       {
-               if(fread(key, sizeof(uint8_t), 8, f) == 1) 
-               {
-                       retval = 0;     
-               }
-               fclose(f);
+       if (!f)
+               return retval;
+       
+       if (fread(key, sizeof(uint8_t), 8, f) == 8) {
+               retval = 0;
        }
+       fclose(f);      
        return retval;
 }
 
-
 int doKeyTests(uint8_t debuglevel)
 {
        debug_print = debuglevel;
index ed46c8e805d76debb2c247a700c9d381878a0d13..cffbca6cd3995f18dae85b5ec1be5236bd8086a2 100644 (file)
@@ -306,7 +306,7 @@ static int l_pack(lua_State *L)             /** pack(f,...) */
         sbyte = 0;
         odd = 0;
       }
-    } else if (isspace(a[ii])) {
+    } else if (isspace((unsigned char)a[ii])) {
       /* ignore */
     } else {
       /* err ... ignore too*/
index 2d45b2fe1f9b29ebaf779bd1a532f504df4a628b..5a9b6580449dd20a7343f1e1e1c3e52ee4e28996 100644 (file)
@@ -596,7 +596,7 @@ mbynam(model_t *dest, const char *key) {
                uerror("cannot allocate memory for comparison string");
        akey.name = uptr = ukey;
        do
-               *uptr++ = toupper(*key);
+               *uptr++ = toupper((unsigned char)*key);
        while(*key++);
 
        aptr = bsearch(&akey, aliases, NALIASES, sizeof(struct malias), (int (*)(const void *, const void *)) &acmp);
index df2c3ce3c6a6909cb99317f34770853c40992f13..8faed6e86cae50f34849dcd4b53b8337cfb03528 100644 (file)
@@ -9,12 +9,14 @@
 // UI utilities
 //-----------------------------------------------------------------------------
 
-#include <stdarg.h>
+#include <stdbool.h>
+#ifndef EXTERNAL_PRINTANDLOG
 #include <stdlib.h>
 #include <stdio.h>
-#include <stdbool.h>
+#include <stdarg.h>
 #include <readline/readline.h>
 #include <pthread.h>
+#endif
 
 #include "ui.h"
 
@@ -26,10 +28,12 @@ int GridOffset = 0;
 bool GridLocked = false;
 bool showDemod = true;
 
-extern pthread_mutex_t print_lock;
-
 static char *logfilename = "proxmark3.log";
 
+#ifndef EXTERNAL_PRINTANDLOG
+// Declared in proxmark3.c
+extern pthread_mutex_t print_lock;
+
 void PrintAndLog(char *fmt, ...)
 {
        char *saved_line;
@@ -94,7 +98,7 @@ void PrintAndLog(char *fmt, ...)
        //release lock
        pthread_mutex_unlock(&print_lock);  
 }
-
+#endif
 
 void SetLogFilename(char *fn)
 {
index b7f07bde056ec5b79834088a77de8d466b08a358..7e6b40742c1a7fa2ecb596481e30dae8f9e290ac 100644 (file)
@@ -496,7 +496,7 @@ int param_gethex(const char *line, int paramnum, uint8_t * data, int hexcnt)
                return 1;
 
        for(i = 0; i < hexcnt; i += 2) {
-               if (!(isxdigit(line[bg + i]) && isxdigit(line[bg + i + 1])) )   return 1;
+               if (!(isxdigit((unsigned char)line[bg + i]) && isxdigit((unsigned char)line[bg + i + 1])) )     return 1;
                
                sscanf((char[]){line[bg + i], line[bg + i + 1], 0}, "%X", &temp);
                data[i / 2] = temp & 0xff;
@@ -518,7 +518,7 @@ int param_gethex_ex(const char *line, int paramnum, uint8_t * data, int *hexcnt)
                return 1;
 
        for(i = 0; i < *hexcnt; i += 2) {
-               if (!(isxdigit(line[bg + i]) && isxdigit(line[bg + i + 1])) )   return 1;
+               if (!(isxdigit((unsigned char)line[bg + i]) && isxdigit((unsigned char)line[bg + i + 1])) )     return 1;
                
                sscanf((char[]){line[bg + i], line[bg + i + 1], 0}, "%X", &temp);
                data[i / 2] = temp & 0xff;
@@ -543,7 +543,7 @@ int param_gethex_to_eol(const char *line, int paramnum, uint8_t * data, int maxd
                        continue;
                }
                
-               if (isxdigit(line[indx])) {
+               if (isxdigit((unsigned char)line[indx])) {
                        buf[strlen(buf) + 1] = 0x00;
                        buf[strlen(buf)] = line[indx];
                } else {
@@ -620,7 +620,7 @@ int hextobinarray(char *target, char *source)
         else if (x >= 'A' && x <= 'F')
             x -= 'A' - 10;
         else {
-               printf("Discovered unknown character %c %d at idx %d of %s\n", x, x, source - start, start);
+               printf("Discovered unknown character %c %d at idx %tu of %s\n", x, x, source - start, start);
             return 0;
         }
         // output
Impressum, Datenschutz