]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - client/nonce2key/nonce2key.c
Upgrade crapto1 library to v3.3 (#232)
[proxmark3-svn] / client / nonce2key / nonce2key.c
index 2c47bc50213dcf767f9d12d342df1c0945082e62..5378c0466ae80685cdd6bc4352b1549c9da3f153 100644 (file)
 // MIFARE Darkside hack
 //-----------------------------------------------------------------------------
 
-#define __STDC_FORMAT_MACROS
 #include <inttypes.h>
+#include <time.h>
 
 #include "nonce2key.h"
 #include "mifarehost.h"
 #include "ui.h"
+#include "util.h"
+#include "crapto1/crapto1.h"
 
 int compar_state(const void * a, const void * b) {
        // didn't work: (the result is truncated to 32 bits)
@@ -30,7 +32,7 @@ int compar_state(const void * a, const void * b) {
 int nonce2key(uint32_t uid, uint32_t nt, uint32_t nr, uint64_t par_info, uint64_t ks_info, uint64_t * key) {
   struct Crypto1State *state;
   uint32_t i, pos, rr, nr_diff, key_count;//, ks1, ks2;
-  byte_t bt, ks3x[8], par[8][8];
+  uint8_t bt, ks3x[8], par[8][8];
   uint64_t key_recovered;
   int64_t *state_s;
   static uint32_t last_uid;
@@ -70,17 +72,17 @@ int nonce2key(uint32_t uid, uint32_t nt, uint32_t nr, uint64_t par_info, uint64_
     printf("%01x|\n", par[i][7]);
   }
   
-       if (par_info==0)
-               PrintAndLog("parity is all zero,try special attack!just wait for few more seconds...");
+       if (par_info == 0)
+               PrintAndLog("Parity is all zero, trying special attack! Just wait for few more seconds...");
   
-       state = lfsr_common_prefix(nr, rr, ks3x, par, par_info==0);
+       state = lfsr_common_prefix(nr, rr, ks3x, par);
        state_s = (int64_t*)state;
        
        //char filename[50] ;
     //sprintf(filename, "nt_%08x_%d.txt", nt, nr);
     //printf("name %s\n", filename);
        //FILE* fp = fopen(filename,"w");
-       for (i = 0; (state) && ((state + i)->odd != -1); i++)
+       for (i = 0; (state) && *(state_s + i); i++)
        {
                lfsr_rollback_word(state+i, uid^nt, 0);
                crypto1_get_lfsr(state + i, &key_recovered);
@@ -96,9 +98,8 @@ int nonce2key(uint32_t uid, uint32_t nt, uint32_t nr, uint64_t par_info, uint64_
        *(state_s + i) = -1;
        
        //Create the intersection:
-       if (par_info == 0 )
-               if ( last_keylist != NULL)
-               {
+       if (par_info == 0 ) {
+               if (last_keylist != NULL) {
                        int64_t *p1, *p2, *p3;
                        p1 = p3 = last_keylist; 
                        p2 = state_s;
@@ -113,12 +114,11 @@ int nonce2key(uint32_t uid, uint32_t nt, uint32_t nr, uint64_t par_info, uint64_
                                        while (compar_state(p1, p2) == 1) ++p2;
                                }
                        }
-                       key_count = p3 - last_keylist;;
-               }
-               else
+                       key_count = p3 - last_keylist;
+               } else {
                        key_count = 0;
-       else
-       {
+               }
+       } else {
                last_keylist = state_s;
                key_count = i;
        }
@@ -136,7 +136,7 @@ int nonce2key(uint32_t uid, uint32_t nt, uint32_t nr, uint64_t par_info, uint64_
                        *key = key64;
                        free(last_keylist);
                        last_keylist = NULL;
-                       if (par_info ==0)
+                       if (par_info == 0)
                                free(state);
                        return 0;
                }
@@ -161,7 +161,7 @@ bool mfkey32(nonces_t data, uint64_t *outputkey) {
        uint32_t nr1_enc = data.nr2; // second encrypted reader challenge
        uint32_t ar1_enc = data.ar2; // second encrypted reader response
        clock_t t1 = clock();
-       bool isSuccess = FALSE;
+       bool isSuccess = false;
        uint8_t counter=0;
 
        s = lfsr_recovery32(ar0_enc ^ prng_successor(nt, 64), 0);
@@ -208,7 +208,7 @@ bool tryMfk32_moebius(nonces_t data, uint64_t *outputkey) {
        uint32_t nt1     = data.nonce2; // second tag challenge (nonce)
        uint32_t nr1_enc = data.nr2; // second encrypted reader challenge
        uint32_t ar1_enc = data.ar2; // second encrypted reader response        
-       bool isSuccess = FALSE;
+       bool isSuccess = false;
        int counter = 0;
        
        //PrintAndLog("Enter mfkey32_moebius");
Impressum, Datenschutz