]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - client/nonce2key/crapto1.c
CHG: according to measureement by @wilrn the actual timing for receiving tag data...
[proxmark3-svn] / client / nonce2key / crapto1.c
index 65e5d4b262d718e4e6a89cbb4baeb91655adacb5..9f6f7f6b0725f1d56fba255007d842ff3fae9b36 100644 (file)
@@ -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
-       struct Crypto1State s;\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
-       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
-       sl->odd = s.odd;\r
-       sl->even = s.even;\r
        return ++sl;\r
 }\r
 \r
@@ -541,24 +538,19 @@ struct Crypto1State* lfsr_common_prefix_ex(uint32_t pfx, uint8_t ks[8])
                goto out;\r
        }\r
 \r
-       // for(o = odd; *o + 1; ++o)\r
-               // for(e = even; *e + 1; ++e)\r
-                       // for(top = 0; top < 64; ++top) {\r
-                               // *o += 1 << 21;\r
-                               // *e += (!(top & 7) + 1) << 21;\r
-                               // s = check_pfx_parity_ex(pfx, *o, *e, s);\r
-                       // }\r
-       for(o = odd; *o != -1; ++o)\r
-               for(e = even; *e != -1; ++e)\r
+       for(o = odd; *o + 1; ++o)\r
+               for(e = even; *e + 1; ++e)\r
                        for(top = 0; top < 64; ++top) {\r
-                               *o = (*o & 0x1fffff) | (top << 21);\r
-                               *e = (*e & 0x1fffff) | (top >> 3) << 21;\r
+                               *o += 1 << 21;\r
+                               *e += (!(top & 7) + 1) << 21;\r
                                s = check_pfx_parity_ex(pfx, *o, *e, s);\r
                        }\r
 \r
-       s->odd = s->even = -1;  \r
+       // in this version, -1 signifies end of states \r
+       s->odd = s->even = -1;\r
+\r
 out:\r
        free(odd);\r
        free(even);\r
        return statelist;\r
-}\r
+}
\ No newline at end of file
Impressum, Datenschutz