Added Hitag2 reading tag memory in password mode

This commit is contained in:
roel@libnfc.org 2012-09-19 10:23:19 +00:00
commit ed7bd3a380

View file

@ -450,6 +450,8 @@ static void hitag_reader_send_frame(const byte_t* frame, size_t frame_len)
LOW(GPIO_SSC_DOUT); LOW(GPIO_SSC_DOUT);
} }
size_t blocknr;
bool hitag2_password(byte_t* rx, const size_t rxlen, byte_t* tx, size_t* txlen) { bool hitag2_password(byte_t* rx, const size_t rxlen, byte_t* tx, size_t* txlen) {
// Reset the transmission frame length // Reset the transmission frame length
*txlen = 0; *txlen = 0;
@ -474,9 +476,15 @@ bool hitag2_password(byte_t* rx, const size_t rxlen, byte_t* tx, size_t* txlen)
memcpy(tx,password,4); memcpy(tx,password,4);
bPwd = true; bPwd = true;
} else { } else {
DbpString("Password succesful!"); if (blocknr > 7) {
// We are done... for now DbpString("Read succesful!");
return false; // We are done... for now
return false;
}
*txlen = 10;
tx[0] = 0xc0 | (blocknr << 3) | ((blocknr^7) >> 2);
tx[1] = ((blocknr^7) << 6);
blocknr++;
} }
} break; } break;
@ -513,7 +521,7 @@ bool hitag2_authenticate(byte_t* rx, const size_t rxlen, byte_t* tx, size_t* txl
memcpy(tx,NrAr,8); memcpy(tx,NrAr,8);
bCrypto = true; bCrypto = true;
} else { } else {
DbpString("Authentication succesful!"); DbpString("Read succesful!");
// We are done... for now // We are done... for now
return false; return false;
} }
@ -590,8 +598,8 @@ void SnoopHitag(uint32_t type) {
size_t rxlen=0; size_t rxlen=0;
// Clean up trace and prepare it for storing frames // Clean up trace and prepare it for storing frames
iso14a_set_tracing(TRUE); iso14a_set_tracing(TRUE);
iso14a_clear_trace(); iso14a_clear_trace();
auth_table_len = 0; auth_table_len = 0;
auth_table_pos = 0; auth_table_pos = 0;
@ -993,6 +1001,7 @@ void ReaderHitag(hitag_function htf, hitag_data* htd) {
case RHT2F_PASSWORD: { case RHT2F_PASSWORD: {
Dbprintf("List identifier in password mode"); Dbprintf("List identifier in password mode");
memcpy(password,htd->pwd.password,4); memcpy(password,htd->pwd.password,4);
blocknr = 0;
bQuitTraceFull = false; bQuitTraceFull = false;
bQuiet = false; bQuiet = false;
bPwd = false; bPwd = false;