]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdhflist.c
fix "hf mf chk" <t|d|s|ss> flags (based on PR #700) (#718)
[proxmark3-svn] / client / cmdhflist.c
index bbfb24c89da4209292ff6482251250debcbdb95d..5538b6fb8a50ff71b2b9d2127cf72824c33ceaca 100644 (file)
@@ -16,7 +16,6 @@
 #include <stdint.h>
 #include <stdbool.h>
 #include "util.h"
-#include "data.h"
 #include "ui.h"
 #include "iso14443crc.h"
 #include "parity.h"
@@ -325,11 +324,12 @@ void annotateMifare(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize, uint8
                        if (cmdsize == 4 && isResponse) {
                                snprintf(exp,size,"AUTH: nt %s", (AuthData.first_auth) ? "" : "(enc)");
                                MifareAuthState = masNrAr;
-                               if (AuthData.first_auth)
+                               if (AuthData.first_auth) {
                                        AuthData.nt = bytes_to_num(cmd, 4);
-                               else
+                               } else {
                                        AuthData.nt_enc = bytes_to_num(cmd, 4);
                                        AuthData.nt_enc_par = parity[0];
+                               }
                                return;
                        } else {
                                MifareAuthState = masError;
@@ -392,7 +392,7 @@ bool DecodeMifareData(uint8_t *cmd, uint8_t cmdsize, uint8_t *parity, bool isRes
                        AuthData.ks3 = AuthData.at_enc ^ prng_successor(AuthData.nt, 96);
 
                        mfLastKey = GetCrypto1ProbableKey(&AuthData);
-                       PrintAndLog("            |          * | key | probable key:%010"PRIx64" Prng:%s   ks2:%08x ks3:%08x |     |", 
+                       PrintAndLog("            |          * | key | probable key:%012"PRIx64" Prng:%s   ks2:%08x ks3:%08x |     |", 
                                mfLastKey,
                                validate_prng_nonce(AuthData.nt) ? "WEAK": "HARD",
                                AuthData.ks2,
@@ -410,7 +410,7 @@ bool DecodeMifareData(uint8_t *cmd, uint8_t cmdsize, uint8_t *parity, bool isRes
                        // check last used key
                        if (mfLastKey) {
                                if (NestedCheckKey(mfLastKey, &AuthData, cmd, cmdsize, parity)) {
-                                       PrintAndLog("            |          * | key | last used key:%010"PRIx64"            ks2:%08x ks3:%08x |     |", 
+                                       PrintAndLog("            |          * | key | last used key:%012"PRIx64"            ks2:%08x ks3:%08x |     |", 
                                                mfLastKey,
                                                AuthData.ks2,
                                                AuthData.ks3);
@@ -423,7 +423,7 @@ bool DecodeMifareData(uint8_t *cmd, uint8_t cmdsize, uint8_t *parity, bool isRes
                        if (!traceCrypto1) {
                                for (int defaultKeyCounter = 0; defaultKeyCounter < MifareDefaultKeysSize; defaultKeyCounter++){
                                        if (NestedCheckKey(MifareDefaultKeys[defaultKeyCounter], &AuthData, cmd, cmdsize, parity)) {
-                                               PrintAndLog("            |          * | key | default key:%010"PRIx64"              ks2:%08x ks3:%08x |     |", 
+                                               PrintAndLog("            |          * | key | default key:%012"PRIx64"              ks2:%08x ks3:%08x |     |", 
                                                        MifareDefaultKeys[defaultKeyCounter],
                                                        AuthData.ks2,
                                                        AuthData.ks3);
@@ -455,7 +455,7 @@ bool DecodeMifareData(uint8_t *cmd, uint8_t cmdsize, uint8_t *parity, bool isRes
 
                                                        AuthData.nt = ntx;
                                                        mfLastKey = GetCrypto1ProbableKey(&AuthData);
-                                                       PrintAndLog("            |          * | key | nested probable key:%010"PRIx64"      ks2:%08x ks3:%08x |     |", 
+                                                       PrintAndLog("            |          * | key | nested probable key:%012"PRIx64"      ks2:%08x ks3:%08x |     |", 
                                                                mfLastKey,
                                                                AuthData.ks2,
                                                                AuthData.ks3);
@@ -559,8 +559,10 @@ bool NestedCheckKey(uint64_t key, TAuthData *ad, uint8_t *cmd, uint8_t cmdsize,
        uint32_t ar1 = crypto1_word(pcs, 0, 0) ^ ad->ar_enc;
        uint32_t at1 = crypto1_word(pcs, 0, 0) ^ ad->at_enc;
 
-       if (!(ar == ar1 && at == at1 && NTParityChk(ad, nt1)))
+       if (!(ar == ar1 && at == at1 && NTParityChk(ad, nt1))) {
+               crypto1_destroy(pcs);
                return false;
+       }
 
        memcpy(buf, cmd, cmdsize);
        mf_crypto1_decrypt(pcs, buf, cmdsize, 0);
Impressum, Datenschutz