X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/a0f33b6682db1fc4ab60504f11e99eb682dc9c56..c805748f340391011d647f7f524d1744563ddec1:/client/nonce2key/nonce2key.c diff --git a/client/nonce2key/nonce2key.c b/client/nonce2key/nonce2key.c index 99ede9e0..95924e5e 100644 --- a/client/nonce2key/nonce2key.c +++ b/client/nonce2key/nonce2key.c @@ -14,18 +14,9 @@ #include "ui.h" #include "proxmark3.h" -int compar_state(const void * a, const void * b) { - // didn't work: (the result is truncated to 32 bits) - //return (*(int64_t*)b - *(int64_t*)a); - - // better: - if (*(int64_t*)b == *(int64_t*)a) return 0; - else if (*(int64_t*)b > *(int64_t*)a) return 1; - else return -1; -} - int nonce2key(uint32_t uid, uint32_t nt, uint32_t nr, uint64_t par_info, uint64_t ks_info, uint64_t * key) { + struct Crypto1State *state; uint32_t i, pos, rr = 0, nr_diff; byte_t bt, ks3x[8], par[8][8]; @@ -49,17 +40,22 @@ int nonce2key(uint32_t uid, uint32_t nt, uint32_t nr, uint64_t par_info, uint64_ for ( i = 0; i < 8; i++) { nr_diff = nr | i << 5; - printf("| %02x |%08x|", i << 5, nr_diff); - printf(" %01x | %01x |", ks3x[i], ks3x[i]^5); + printf("| %02x |%08x| %01x | %01x |", i << 5, nr_diff, ks3x[i], ks3x[i]^5); + for (pos = 0; pos < 7; pos++) printf("%01x,", par[i][pos]); printf("%01x|\n", par[i][7]); } printf("+----+--------+---+-----+---------------+\n"); + clock_t t1 = clock(); + state = lfsr_common_prefix(nr, rr, ks3x, par); lfsr_rollback_word(state, uid^nt, 0); crypto1_get_lfsr(state, key); crypto1_destroy(state); + + t1 = clock() - t1; + if ( t1 > 0 ) PrintAndLog("Time in nonce2key: %.0f ticks \n", (float)t1); return 0; } @@ -177,9 +173,9 @@ int tryMfk64(uint64_t myuid, uint8_t *data, uint8_t *outputkey ){ pcs = &mpcs; uid = myuid;//(uint32_t)bytes_to_num(data + 0, 4); - nt = *(uint32_t*)(data+8); - nr_enc = *(uint32_t*)(data+12); - ar_enc = *(uint32_t*)(data+16); + nt = *(uint32_t*)(data+8); + nr_enc = *(uint32_t*)(data+12); + ar_enc = *(uint32_t*)(data+16); crypto1_word(pcs, nr_enc , 1); at_enc = prng_successor(nt, 96) ^ crypto1_word(pcs, 0, 0); @@ -205,4 +201,4 @@ int tryMfk64(uint64_t myuid, uint8_t *data, uint8_t *outputkey ){ num_to_bytes(key, 6, outputkey); crypto1_destroy(revstate); return 0; -} \ No newline at end of file +}