]> 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 0339190f095dae2e19d887f2636eafe909e91601..9f6f7f6b0725f1d56fba255007d842ff3fae9b36 100644 (file)
@@ -467,6 +467,21 @@ static struct Crypto1State* check_pfx_parity(uint32_t prefix, uint32_t rresp, ui
 \r
        return sl + good;\r
 }\r
 \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
+       \r
+       uint32_t c = 0;\r
+\r
+       sl->odd = odd ^ fastfwd[1][c];\r
+       sl->even = even ^ fastfwd[0][c];\r
+       \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
+       return ++sl;\r
+}\r
 \r
 /** lfsr_common_prefix\r
  * Implentation of the common prefix attack.\r
 \r
 /** lfsr_common_prefix\r
  * Implentation of the common prefix attack.\r
@@ -507,3 +522,35 @@ out:
        free(even);\r
        return statelist;\r
 }\r
        free(even);\r
        return statelist;\r
 }\r
+\r
+struct Crypto1State* lfsr_common_prefix_ex(uint32_t pfx, uint8_t ks[8])\r
+{\r
+       struct Crypto1State *statelist, *s;\r
+       uint32_t *odd, *even, *o, *e, top;\r
+\r
+       odd = lfsr_prefix_ks(ks, 1);\r
+       even = lfsr_prefix_ks(ks, 0);\r
+\r
+       s = statelist = malloc((sizeof *statelist) << 20);\r
+       if(!s || !odd || !even) {\r
+               free(statelist);\r
+               statelist = 0;\r
+               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
+\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
+}
\ No newline at end of file
Impressum, Datenschutz