+ // Reset the last three significant bits of the reader nonce
+ nr &= 0xffffff1f;
+
+ PrintAndLog("uid(%08x) nt(%08x) par(%016" PRIx64") ks(%016" PRIx64") nr(%08x)", uid, nt, par_info, ks_info, nr);
+
+ for ( pos = 0; pos < 8; pos++ ) {
+ ks3x[7-pos] = (ks_info >> (pos*8)) & 0x0f;
+ bt = (par_info >> (pos*8)) & 0xff;
+
+ for ( i = 0; i < 8; i++) {
+ par[7-pos][i] = (bt >> i) & 0x01;
+ }
+ }
+
+ PrintAndLog("+----+--------+---+-----+---------------+");
+ PrintAndLog("|diff|{nr} |ks3|ks3^5|parity |");
+ PrintAndLog("+----+--------+---+-----+---------------+");
+ for ( i = 0; i < 8; i++) {
+ nr_diff = nr | i << 5;
+
+ PrintAndLog("| %02x |%08x| %01x | %01x |%01x,%01x,%01x,%01x,%01x,%01x,%01x,%01x|",
+ i << 5, nr_diff, ks3x[i], ks3x[i]^5,
+ par[i][0], par[i][1], par[i][2], par[i][3],
+ par[i][4], par[i][5], par[i][6], par[i][7]);
+
+ }
+ PrintAndLog("+----+--------+---+-----+---------------+");
+
+ clock_t t1 = clock();