]> cvs.zerfleddert.de Git - proxmark3-svn/commitdiff
improved GetAPDUCode()
authormerlokk <olegmsn@gmail.com>
Tue, 31 Oct 2017 17:19:49 +0000 (19:19 +0200)
committermerlokk <olegmsn@gmail.com>
Tue, 31 Oct 2017 17:19:49 +0000 (19:19 +0200)
client/emv/apduinfo.c

index d73c24fc1aca38f676118d3365b90bc41eb7c763..fbdd714a3622bf57d4fcded749d59420e611f76b 100644 (file)
@@ -279,16 +279,33 @@ int CodeCmp(const char *code1, const char *code2) {
 
 const APDUCode* const GetAPDUCode(uint8_t sw1, uint8_t sw2) {
        char buf[4] = {0};
+       int res;
+       int mineq = 100;
+       int mineqindx = 0;
        
        sprintf(&buf[0], "%02X ", sw1);
        sprintf(&buf[2], "%02X ", sw2);
        
        for (int i = 0; i < APDUCodeTableLen; i++) {
-               if (CodeCmp(APDUCodeTable[i].ID, buf) == 0) { // TODO make not so equal comparation... XXXX - not works...
+               res = CodeCmp(APDUCodeTable[i].ID, buf);
+               
+               // equal
+               if (res == 0) { 
                        return &APDUCodeTable[i];
                }
+               
+               // with some  'X'
+               if (res > 0 && mineq > res) {
+                       mineq = res;
+                       mineqindx = i;
+               }
        }
 
+       // if we have not equal, but with some 'X'
+       if (mineqindx < 100) {
+               return &APDUCodeTable[mineqindx];
+       }
+       
        return NULL;
 }
 
Impressum, Datenschutz