]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - tools/nonce2key/crapto1.c
CHG: Syncronized so all different parts uses the same implementation of Crapto1 v3.3
[proxmark3-svn] / tools / nonce2key / crapto1.c
index 10dedcb5177a4989a0df3a3001aab7acfb81fac9..ca2a30da77e23775bed39861425908994fe2ab81 100644 (file)
@@ -349,7 +349,7 @@ uint8_t lfsr_rollback_byte(struct Crypto1State *s, uint32_t in, int fb)
        for (i = 7; i >= 0; --i)\r
                ret |= lfsr_rollback_bit(s, BIT(in, i), fb) << i;\r
 */\r
        for (i = 7; i >= 0; --i)\r
                ret |= lfsr_rollback_bit(s, BIT(in, i), fb) << i;\r
 */\r
-\r
+// unfold loop 20160112\r
        uint8_t ret = 0;\r
        ret |= lfsr_rollback_bit(s, BIT(in, 7), fb) << 7;\r
        ret |= lfsr_rollback_bit(s, BIT(in, 6), fb) << 6;\r
        uint8_t ret = 0;\r
        ret |= lfsr_rollback_bit(s, BIT(in, 7), fb) << 7;\r
        ret |= lfsr_rollback_bit(s, BIT(in, 6), fb) << 6;\r
@@ -372,7 +372,7 @@ uint32_t lfsr_rollback_word(struct Crypto1State *s, uint32_t in, int fb)
        for (i = 31; i >= 0; --i)\r
                ret |= lfsr_rollback_bit(s, BEBIT(in, i), fb) << (i ^ 24);\r
 */\r
        for (i = 31; i >= 0; --i)\r
                ret |= lfsr_rollback_bit(s, BEBIT(in, i), fb) << (i ^ 24);\r
 */\r
-       \r
+// unfold loop 20160112\r
        uint32_t ret = 0;\r
        ret |= lfsr_rollback_bit(s, BEBIT(in, 31), fb) << (31 ^ 24);\r
        ret |= lfsr_rollback_bit(s, BEBIT(in, 30), fb) << (30 ^ 24);\r
        uint32_t ret = 0;\r
        ret |= lfsr_rollback_bit(s, BEBIT(in, 31), fb) << (31 ^ 24);\r
        ret |= lfsr_rollback_bit(s, BEBIT(in, 30), fb) << (30 ^ 24);\r
@@ -409,7 +409,6 @@ uint32_t lfsr_rollback_word(struct Crypto1State *s, uint32_t in, int fb)
        ret |= lfsr_rollback_bit(s, BEBIT(in, 2), fb) << (2 ^ 24);\r
        ret |= lfsr_rollback_bit(s, BEBIT(in, 1), fb) << (1 ^ 24);\r
        ret |= lfsr_rollback_bit(s, BEBIT(in, 0), fb) << (0 ^ 24);\r
        ret |= lfsr_rollback_bit(s, BEBIT(in, 2), fb) << (2 ^ 24);\r
        ret |= lfsr_rollback_bit(s, BEBIT(in, 1), fb) << (1 ^ 24);\r
        ret |= lfsr_rollback_bit(s, BEBIT(in, 0), fb) << (0 ^ 24);\r
-       \r
        return ret;\r
 }\r
 \r
        return ret;\r
 }\r
 \r
@@ -450,12 +449,11 @@ static uint32_t fastfwd[2][8] = {
 uint32_t *lfsr_prefix_ks(uint8_t ks[8], int isodd)\r
 {\r
        uint32_t *candidates = malloc(4 << 10);\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
+       \r
        uint32_t c,  entry;\r
        int size = 0, i, good;\r
 \r
        uint32_t c,  entry;\r
        int size = 0, i, good;\r
 \r
-       if(!candidates)\r
-               return 0;\r
-\r
        for(i = 0; i < 1 << 21; ++i) {\r
                for(c = 0, good = 1; good && c < 8; ++c) {\r
                        entry = i ^ fastfwd[isodd][c];\r
        for(i = 0; i < 1 << 21; ++i) {\r
                for(c = 0, good = 1; good && c < 8; ++c) {\r
                        entry = i ^ fastfwd[isodd][c];\r
@@ -502,7 +500,6 @@ static struct Crypto1State* check_pfx_parity(uint32_t prefix, uint32_t rresp, ui
        return sl + good;\r
 } \r
 \r
        return sl + good;\r
 } \r
 \r
-\r
 /** lfsr_common_prefix\r
  * Implentation of the common prefix attack.\r
  * Requires the 28 bit constant prefix used as reader nonce (pfx)\r
 /** lfsr_common_prefix\r
  * Implentation of the common prefix attack.\r
  * Requires the 28 bit constant prefix used as reader nonce (pfx)\r
@@ -512,6 +509,7 @@ static struct Crypto1State* check_pfx_parity(uint32_t prefix, uint32_t rresp, ui
  * It returns a zero terminated list of possible cipher states after the\r
  * tag nonce was fed in\r
  */\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
 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
@@ -520,7 +518,7 @@ struct Crypto1State* lfsr_common_prefix(uint32_t pfx, uint32_t rr, uint8_t ks[8]
        odd = lfsr_prefix_ks(ks, 1);\r
        even = lfsr_prefix_ks(ks, 0);\r
 \r
        odd = lfsr_prefix_ks(ks, 1);\r
        even = lfsr_prefix_ks(ks, 0);\r
 \r
-       s = statelist = malloc((sizeof *statelist) << 20);\r
+       s = statelist = malloc((sizeof *statelist) << 21);\r
        if(!s || !odd || !even) {\r
                free(statelist);\r
                free(odd);\r
        if(!s || !odd || !even) {\r
                free(statelist);\r
                free(odd);\r
@@ -540,6 +538,5 @@ struct Crypto1State* lfsr_common_prefix(uint32_t pfx, uint32_t rr, uint8_t ks[8]
 \r
        free(odd);\r
        free(even);\r
 \r
        free(odd);\r
        free(even);\r
-\r
        return statelist;\r
        return statelist;\r
-}\r
+}
\ No newline at end of file
Impressum, Datenschutz