mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-21 13:53:55 -07:00
fix 'hf iclass chk' - timings and fixing the parity / kc / kd ...
This commit is contained in:
parent
f4ff22a5bc
commit
236175a688
1 changed files with 12 additions and 22 deletions
|
@ -55,7 +55,7 @@
|
||||||
#include "protocols.h"
|
#include "protocols.h"
|
||||||
#include "ticks.h"
|
#include "ticks.h"
|
||||||
|
|
||||||
static int g_wait = 100;
|
static int g_wait = 240;
|
||||||
static int timeout = 5000;
|
static int timeout = 5000;
|
||||||
static uint32_t time_rdr = 0;
|
static uint32_t time_rdr = 0;
|
||||||
static uint32_t time_response = 0;
|
static uint32_t time_response = 0;
|
||||||
|
@ -1700,10 +1700,9 @@ static int SendIClassAnswer(uint8_t *resp, int respLen, uint16_t delay) {
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Transmit the command (to the tag) that was placed in ToSend[].
|
// Transmit the command (to the tag) that was placed in ToSend[].
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
static void TransmitIClassCommand(const uint8_t *cmd, int len, int *samples, int *wait) {
|
static void TransmitIClassCommand(const uint8_t *cmd, int len, int *wait) {
|
||||||
|
|
||||||
int c = 0;
|
int c = 0;
|
||||||
// volatile uint32_t b;
|
|
||||||
bool firstpart = true;
|
bool firstpart = true;
|
||||||
uint8_t sendbyte;
|
uint8_t sendbyte;
|
||||||
|
|
||||||
|
@ -1740,14 +1739,6 @@ static void TransmitIClassCommand(const uint8_t *cmd, int len, int *samples, int
|
||||||
|
|
||||||
if (c >= len) break;
|
if (c >= len) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prevent rx holding register from overflowing
|
|
||||||
/*
|
|
||||||
if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {
|
|
||||||
b = AT91C_BASE_SSC->SSC_RHR;
|
|
||||||
(void)b;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
time_rdr = GetCountSspClk();
|
time_rdr = GetCountSspClk();
|
||||||
|
@ -1794,21 +1785,17 @@ void CodeIClassCommand(const uint8_t *cmd, int len) {
|
||||||
|
|
||||||
void ReaderTransmitIClass_ext(uint8_t *frame, int len, int wait) {
|
void ReaderTransmitIClass_ext(uint8_t *frame, int len, int wait) {
|
||||||
|
|
||||||
int samples = 0;
|
|
||||||
|
|
||||||
// This is tied to other size changes
|
// This is tied to other size changes
|
||||||
CodeIClassCommand(frame, len);
|
CodeIClassCommand(frame, len);
|
||||||
|
|
||||||
// Select the card
|
// Select the card
|
||||||
TransmitIClassCommand(ToSend, ToSendMax, &samples, &wait);
|
TransmitIClassCommand(ToSend, ToSendMax, &wait);
|
||||||
LED_A_ON();
|
LED_A_ON();
|
||||||
|
|
||||||
rsamples += samples;
|
|
||||||
|
|
||||||
LogTrace(frame, len, rsamples, rsamples, NULL, true);
|
LogTrace(frame, len, rsamples, rsamples, NULL, true);
|
||||||
}
|
}
|
||||||
void ReaderTransmitIClass(uint8_t *frame, int len) {
|
void ReaderTransmitIClass(uint8_t *frame, int len) {
|
||||||
ReaderTransmitIClass_ext(frame, len, 400);
|
ReaderTransmitIClass_ext(frame, len, 330);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -1948,14 +1935,17 @@ uint8_t handshakeIclassTag_ext(uint8_t *card_data, bool use_credit_key) {
|
||||||
static uint8_t select[] = { 0x80 | ICLASS_CMD_SELECT, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
static uint8_t select[] = { 0x80 | ICLASS_CMD_SELECT, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||||
uint8_t readcheck_cc[] = { 0x80 | ICLASS_CMD_READCHECK, 0x02 };
|
uint8_t readcheck_cc[] = { 0x80 | ICLASS_CMD_READCHECK, 0x02 };
|
||||||
|
|
||||||
if (use_credit_key == false)
|
// Bit 4: K.If this bit equals to one, the READCHECK will use the Credit Key (Kc); if equals to zero, Debit Key (Kd) willbe used
|
||||||
readcheck_cc[0] |= 0x10;
|
// bit 7: parity.
|
||||||
|
|
||||||
|
if (use_credit_key)
|
||||||
|
readcheck_cc[0] = 0x10 | ICLASS_CMD_READCHECK;
|
||||||
|
|
||||||
uint8_t resp[ICLASS_BUFFER_SIZE] = {0};
|
uint8_t resp[ICLASS_BUFFER_SIZE] = {0};
|
||||||
uint8_t read_status = 0;
|
uint8_t read_status = 0;
|
||||||
|
|
||||||
// Send act_all
|
// Send act_all
|
||||||
ReaderTransmitIClass_ext(act_all, 1, 330 + 160);
|
ReaderTransmitIClass_ext(act_all, 1, 330);
|
||||||
// Card present?
|
// Card present?
|
||||||
if (!ReaderReceiveIClass(resp)) return read_status;//Fail
|
if (!ReaderReceiveIClass(resp)) return read_status;//Fail
|
||||||
|
|
||||||
|
@ -2316,8 +2306,8 @@ void iClass_Authentication_fast(uint64_t arg0, uint64_t arg1, uint8_t *datain) {
|
||||||
uint8_t resp[ICLASS_BUFFER_SIZE];
|
uint8_t resp[ICLASS_BUFFER_SIZE];
|
||||||
uint8_t readcheck_cc[] = { 0x80 | ICLASS_CMD_READCHECK, 0x02 };
|
uint8_t readcheck_cc[] = { 0x80 | ICLASS_CMD_READCHECK, 0x02 };
|
||||||
|
|
||||||
if (use_credit_key == false)
|
if (use_credit_key)
|
||||||
readcheck_cc[0] |= 0x10;
|
readcheck_cc[0] = 0x10 | ICLASS_CMD_READCHECK;
|
||||||
|
|
||||||
// select card / e-purse
|
// select card / e-purse
|
||||||
uint8_t card_data[6 * 8] = {0};
|
uint8_t card_data[6 * 8] = {0};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue