X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/59e933fc3f9c4283436b3b317b38c77db0e5d0a7..713f5d019c07c048e9f7b0afc1c91995dc616ea3:/client/nonce2key/crapto1.c?ds=sidebyside diff --git a/client/nonce2key/crapto1.c b/client/nonce2key/crapto1.c index a0cd52fe..9f6f7f6b 100644 --- a/client/nonce2key/crapto1.c +++ b/client/nonce2key/crapto1.c @@ -383,7 +383,7 @@ uint32_t lfsr_rollback_word(struct Crypto1State *s, uint32_t in, int fb) /** nonce_distance * x,y valid tag nonces, then prng_successor(x, nonce_distance(x, y)) = y */ -static uint16_t *dist; +static uint16_t *dist = 0; int nonce_distance(uint32_t from, uint32_t to) { uint16_t x, i; @@ -391,7 +391,7 @@ int nonce_distance(uint32_t from, uint32_t to) dist = malloc(2 << 16); if(!dist) return -1; - for (x = 1, i = 1; i; ++i) { + for (x = i = 1; i; ++i) { dist[(x & 0xff) << 8 | x >> 8] = i; x = x >> 1 | (x ^ x >> 2 ^ x >> 3 ^ x >> 5) << 15; } @@ -468,21 +468,18 @@ static struct Crypto1State* check_pfx_parity(uint32_t prefix, uint32_t rresp, ui return sl + good; } static struct Crypto1State* check_pfx_parity_ex(uint32_t prefix, uint32_t odd, uint32_t even, struct Crypto1State* sl) { - struct Crypto1State s; + uint32_t c = 0; - s.odd = odd ^ fastfwd[1][c]; - s.even = even ^ fastfwd[0][c]; - - lfsr_rollback_bit(&s, 0, 0); - lfsr_rollback_bit(&s, 0, 0); - lfsr_rollback_bit(&s, 0, 0); + sl->odd = odd ^ fastfwd[1][c]; + sl->even = even ^ fastfwd[0][c]; - lfsr_rollback_word(&s, 0, 0); - lfsr_rollback_word(&s, prefix | c << 5, 1); + lfsr_rollback_bit(sl, 0, 0); + lfsr_rollback_bit(sl, 0, 0); + lfsr_rollback_bit(sl, 0, 0); + lfsr_rollback_word(sl, 0, 0); + lfsr_rollback_word(sl, prefix | c << 5, 1); - sl->odd = s.odd; - sl->even = s.even; return ++sl; } @@ -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); } - s->odd = s->even = 0; + // in this version, -1 signifies end of states + s->odd = s->even = -1; out: free(odd);