static uint8_t filterlut[1 << 20];\r
static void __attribute__((constructor)) fill_lut()\r
{\r
- uint32_t i;\r
- for(i = 0; i < 1 << 20; ++i)\r
- filterlut[i] = filter(i);\r
+ uint32_t i;\r
+ for(i = 0; i < 1 << 20; ++i)\r
+ filterlut[i] = filter(i);\r
}\r
#define filter(x) (filterlut[(x) & 0xfffff])\r
#endif\r
int nonce_distance(uint32_t from, uint32_t to)\r
{\r
uint16_t x, i;\r
- if(!dist) {\r
+ // generate distance lookup table\r
+ if (!dist) {\r
dist = malloc(2 << 16);\r
- if(!dist)\r
- return -1;\r
+ if (!dist) return -1;\r
+ \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
* encrypt the NACK which is observed when varying only the 3 last bits of Nr\r
* only correct iff [NR_3] ^ NR_3 does not depend on Nr_3\r
*/\r
-uint32_t *lfsr_prefix_ks(uint8_t ks[8], int isodd)\r
+uint32_t* lfsr_prefix_ks(uint8_t ks[8], int isodd)\r
{\r
uint32_t *candidates = malloc(4 << 10);\r
if(!candidates) return 0;\r
* It returns a zero terminated list of possible cipher states after the\r
* tag nonce was fed in\r
*/\r
-\r
struct Crypto1State* lfsr_common_prefix(uint32_t pfx, uint32_t rr, uint8_t ks[8], uint8_t par[8][8])\r
{\r
struct Crypto1State *statelist, *s;\r
s = statelist = malloc((sizeof *statelist) << 21);\r
if(!s || !odd || !even) {\r
free(statelist);\r
- free(odd);\r
- free(even);\r
- return 0;\r
+ statelist = 0;\r
+ goto out;\r
}\r
\r
for(o = odd; *o + 1; ++o)\r
}\r
\r
s->odd = s->even = 0;\r
-\r
+out:\r
free(odd);\r
free(even);\r
return statelist;\r