]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - client/nonce2key/crapto1.c
CHG: finally, the ticks timer does what it is supposed to do. 32bits and working.
[proxmark3-svn] / client / nonce2key / crapto1.c
index a0cd52fe0ea244102416367e796a6b3f017f0b5b..9f6f7f6b0725f1d56fba255007d842ff3fae9b36 100644 (file)
@@ -383,7 +383,7 @@ uint32_t lfsr_rollback_word(struct Crypto1State *s, uint32_t in, int fb)
 /** nonce_distance\r
  * x,y valid tag nonces, then prng_successor(x, nonce_distance(x, y)) = y\r
  */\r
 /** nonce_distance\r
  * x,y valid tag nonces, then prng_successor(x, nonce_distance(x, y)) = y\r
  */\r
-static uint16_t *dist;\r
+static uint16_t *dist = 0;\r
 int nonce_distance(uint32_t from, uint32_t to)\r
 {\r
        uint16_t x, i;\r
 int nonce_distance(uint32_t from, uint32_t to)\r
 {\r
        uint16_t x, i;\r
@@ -391,7 +391,7 @@ int nonce_distance(uint32_t from, uint32_t to)
                dist = malloc(2 << 16);\r
                if(!dist)\r
                        return -1;\r
                dist = malloc(2 << 16);\r
                if(!dist)\r
                        return -1;\r
-               for (x = 1, i = 1; i; ++i) {\r
+               for (x = i = 1; i; ++i) {\r
                        dist[(x & 0xff) << 8 | x >> 8] = i;\r
                        x = x >> 1 | (x ^ x >> 2 ^ x >> 3 ^ x >> 5) << 15;\r
                }\r
                        dist[(x & 0xff) << 8 | x >> 8] = i;\r
                        x = x >> 1 | (x ^ x >> 2 ^ x >> 3 ^ x >> 5) << 15;\r
                }\r
@@ -468,21 +468,18 @@ static struct Crypto1State* check_pfx_parity(uint32_t prefix, uint32_t rresp, ui
        return sl + good;\r
 }\r
 static struct Crypto1State* check_pfx_parity_ex(uint32_t prefix, uint32_t odd, uint32_t even, struct Crypto1State* sl) {\r
        return sl + good;\r
 }\r
 static struct Crypto1State* check_pfx_parity_ex(uint32_t prefix, uint32_t odd, uint32_t even, struct Crypto1State* sl) {\r
-       struct Crypto1State s;\r
+       \r
        uint32_t c = 0;\r
 \r
        uint32_t c = 0;\r
 \r
-       s.odd = odd ^ fastfwd[1][c];\r
-       s.even = even ^ fastfwd[0][c];\r
-       \r
-       lfsr_rollback_bit(&s, 0, 0);\r
-       lfsr_rollback_bit(&s, 0, 0);\r
-       lfsr_rollback_bit(&s, 0, 0);\r
+       sl->odd = odd ^ fastfwd[1][c];\r
+       sl->even = even ^ fastfwd[0][c];\r
        \r
        \r
-       lfsr_rollback_word(&s, 0, 0);\r
-       lfsr_rollback_word(&s, prefix | c << 5, 1);\r
+       lfsr_rollback_bit(sl, 0, 0);\r
+       lfsr_rollback_bit(sl, 0, 0);\r
+       lfsr_rollback_bit(sl, 0, 0);\r
+       lfsr_rollback_word(sl, 0, 0);\r
+       lfsr_rollback_word(sl, prefix | c << 5, 1);\r
        \r
        \r
-       sl->odd = s.odd;\r
-       sl->even = s.even;\r
        return ++sl;\r
 }\r
 \r
        return ++sl;\r
 }\r
 \r
@@ -549,7 +546,8 @@ struct Crypto1State* lfsr_common_prefix_ex(uint32_t pfx, uint8_t ks[8])
                                s = check_pfx_parity_ex(pfx, *o, *e, s);\r
                        }\r
 \r
                                s = check_pfx_parity_ex(pfx, *o, *e, s);\r
                        }\r
 \r
-       s->odd = s->even = 0;\r
+       // in this version, -1 signifies end of states \r
+       s->odd = s->even = -1;\r
 \r
 out:\r
        free(odd);\r
 \r
 out:\r
        free(odd);\r
Impressum, Datenschutz