X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/da198be4b5ae28a3d1c711b31081aba5af33ed6d..da8279796e4438b19442fad89c31b4955751877e:/armsrc/crapto1.c?ds=sidebyside diff --git a/armsrc/crapto1.c b/armsrc/crapto1.c index a6b6da4d..e2058651 100644 --- a/armsrc/crapto1.c +++ b/armsrc/crapto1.c @@ -419,10 +419,11 @@ static uint16_t *dist = 0; int nonce_distance(uint32_t from, uint32_t to) { uint16_t x, i; - if(!dist) { + // generate distance lookup table + if (!dist) { dist = malloc(2 << 16); - if(!dist) - return -1; + if (!dist) return -1; + for (x = i = 1; i; ++i) { dist[(x & 0xff) << 8 | x >> 8] = i; x = x >> 1 | (x ^ x >> 2 ^ x >> 3 ^ x >> 5) << 15; @@ -446,7 +447,7 @@ static uint32_t fastfwd[2][8] = { * encrypt the NACK which is observed when varying only the 3 last bits of Nr * only correct iff [NR_3] ^ NR_3 does not depend on Nr_3 */ -uint32_t *lfsr_prefix_ks(uint8_t ks[8], int isodd) +uint32_t* lfsr_prefix_ks(uint8_t ks[8], int isodd) { uint32_t *candidates = malloc(4 << 10); if(!candidates) return 0; @@ -520,9 +521,8 @@ struct Crypto1State* lfsr_common_prefix(uint32_t pfx, uint32_t rr, uint8_t ks[8] s = statelist = malloc((sizeof *statelist) << 21); if(!s || !odd || !even) { free(statelist); - free(odd); - free(even); - return 0; + statelist = 0; + goto out; } for(o = odd; *o + 1; ++o) @@ -534,7 +534,7 @@ struct Crypto1State* lfsr_common_prefix(uint32_t pfx, uint32_t rr, uint8_t ks[8] } s->odd = s->even = 0; - +out: free(odd); free(even); return statelist;