mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-03-31 01:11:27 +08:00
Merge remote-tracking branch 'upstream/master' into hf_mf_sim
This commit is contained in:
commit
1e20316cee
8 changed files with 22 additions and 21 deletions
client
common/crapto1
|
@ -1352,7 +1352,7 @@ int CmdHF14AMfNestedHard(const char *Cmd) {
|
||||||
case 'r':
|
case 'r':
|
||||||
fptr = GenerateFilename("hf-mf-", "-nonces.bin");
|
fptr = GenerateFilename("hf-mf-", "-nonces.bin");
|
||||||
if (fptr == NULL)
|
if (fptr == NULL)
|
||||||
strncpy(filename, "nonces.bin", FILE_PATH_SIZE);
|
strncpy(filename, "nonces.bin", FILE_PATH_SIZE - 1);
|
||||||
else
|
else
|
||||||
strncpy(filename, fptr, FILE_PATH_SIZE - 1);
|
strncpy(filename, fptr, FILE_PATH_SIZE - 1);
|
||||||
|
|
||||||
|
@ -1540,7 +1540,7 @@ int CmdHF14AMfChk_fast(const char *Cmd) {
|
||||||
char buf[13];
|
char buf[13];
|
||||||
char *fptr;
|
char *fptr;
|
||||||
uint8_t tempkey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
|
uint8_t tempkey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
|
||||||
uint8_t *keyBlock = NULL, *p;
|
uint8_t *keyBlock, *p;
|
||||||
uint8_t sectorsCnt = 1;
|
uint8_t sectorsCnt = 1;
|
||||||
int i, keycnt = 0;
|
int i, keycnt = 0;
|
||||||
int clen = 0;
|
int clen = 0;
|
||||||
|
@ -1788,7 +1788,7 @@ int CmdHF14AMfChk(const char *Cmd) {
|
||||||
FILE *f;
|
FILE *f;
|
||||||
char filename[FILE_PATH_SIZE] = {0};
|
char filename[FILE_PATH_SIZE] = {0};
|
||||||
char buf[13];
|
char buf[13];
|
||||||
uint8_t *keyBlock = NULL, *p;
|
uint8_t *keyBlock, *p;
|
||||||
sector_t *e_sector = NULL;
|
sector_t *e_sector = NULL;
|
||||||
|
|
||||||
uint8_t blockNo = 0;
|
uint8_t blockNo = 0;
|
||||||
|
|
|
@ -1244,7 +1244,7 @@ int CmdEM4x05Write(const char *Cmd) {
|
||||||
PrintAndLogEx(NORMAL, "Writing address %d data %08X using password %08X", addr, data, pwd);
|
PrintAndLogEx(NORMAL, "Writing address %d data %08X using password %08X", addr, data, pwd);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t flag = (addr << 8) | usePwd;
|
uint16_t flag = (addr << 8) | (usePwd);
|
||||||
|
|
||||||
UsbCommand c = {CMD_EM4X_WRITE_WORD, {flag, data, pwd}};
|
UsbCommand c = {CMD_EM4X_WRITE_WORD, {flag, data, pwd}};
|
||||||
clearCommandBuffer();
|
clearCommandBuffer();
|
||||||
|
|
|
@ -257,7 +257,7 @@ int CmdIOProxSim(const char *Cmd) {
|
||||||
fc = param_get8(Cmd, 1);
|
fc = param_get8(Cmd, 1);
|
||||||
cn = param_get32ex(Cmd, 2, 0, 10);
|
cn = param_get32ex(Cmd, 2, 0, 10);
|
||||||
|
|
||||||
if (!version | !fc || !cn) return usage_lf_io_sim();
|
if (!version || !fc || !cn) return usage_lf_io_sim();
|
||||||
|
|
||||||
if ((cn & 0xFFFF) != cn) {
|
if ((cn & 0xFFFF) != cn) {
|
||||||
cn &= 0xFFFF;
|
cn &= 0xFFFF;
|
||||||
|
@ -303,7 +303,7 @@ int CmdIOProxClone(const char *Cmd) {
|
||||||
fc = param_get8(Cmd, 1);
|
fc = param_get8(Cmd, 1);
|
||||||
cn = param_get32ex(Cmd, 2, 0, 10);
|
cn = param_get32ex(Cmd, 2, 0, 10);
|
||||||
|
|
||||||
if (!version | !fc || !cn) return usage_lf_io_clone();
|
if (!version || !fc || !cn) return usage_lf_io_clone();
|
||||||
|
|
||||||
if ((cn & 0xFFFF) != cn) {
|
if ((cn & 0xFFFF) != cn) {
|
||||||
cn &= 0xFFFF;
|
cn &= 0xFFFF;
|
||||||
|
|
|
@ -1363,7 +1363,7 @@ bool AquireData(uint8_t page, uint8_t block, bool pwdmode, uint32_t password) {
|
||||||
// bit1 = page to read from
|
// bit1 = page to read from
|
||||||
// arg1: which block to read
|
// arg1: which block to read
|
||||||
// arg2: password
|
// arg2: password
|
||||||
uint8_t arg0 = ((page << 1) | pwdmode);
|
uint8_t arg0 = ( page << 1 | (pwdmode) );
|
||||||
UsbCommand c = {CMD_T55XX_READ_BLOCK, {arg0, block, password}};
|
UsbCommand c = {CMD_T55XX_READ_BLOCK, {arg0, block, password}};
|
||||||
clearCommandBuffer();
|
clearCommandBuffer();
|
||||||
SendCommand(&c);
|
SendCommand(&c);
|
||||||
|
@ -1382,7 +1382,7 @@ char *GetBitRateStr(uint32_t id, bool xmode) {
|
||||||
|
|
||||||
char *retStr = buf;
|
char *retStr = buf;
|
||||||
if (xmode) { //xmode bitrate calc is same as em4x05 calc
|
if (xmode) { //xmode bitrate calc is same as em4x05 calc
|
||||||
snprintf(retStr, sizeof(buf), "%d - RF/%d", id, EM4x05_GET_BITRATE(id));
|
snprintf(retStr, sizeof(buf), "%u - RF/%d", id, EM4x05_GET_BITRATE(id));
|
||||||
} else {
|
} else {
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case 0:
|
case 0:
|
||||||
|
|
|
@ -73,8 +73,7 @@ static bool print_cb(void *data, const struct tlv *tlv, int level, bool is_leaf)
|
||||||
|
|
||||||
int asn1_print(uint8_t *asn1buf, size_t asn1buflen, char *indent) {
|
int asn1_print(uint8_t *asn1buf, size_t asn1buflen, char *indent) {
|
||||||
|
|
||||||
struct tlvdb *t = NULL;
|
struct tlvdb *t = tlvdb_parse_multi(asn1buf, asn1buflen);
|
||||||
t = tlvdb_parse_multi(asn1buf, asn1buflen);
|
|
||||||
if (t) {
|
if (t) {
|
||||||
tlvdb_visit(t, print_cb, NULL, 0);
|
tlvdb_visit(t, print_cb, NULL, 0);
|
||||||
tlvdb_free(t);
|
tlvdb_free(t);
|
||||||
|
|
|
@ -522,10 +522,12 @@ uprog(const poly_t gpoly, int flags, unsigned long seq) {
|
||||||
if (!seq)
|
if (!seq)
|
||||||
return;
|
return;
|
||||||
string = ptostr(gpoly, P_RTJUST, 4);
|
string = ptostr(gpoly, P_RTJUST, 4);
|
||||||
fprintf(stderr, "%s: searching: width=%ld poly=0x%s refin=%s refout=%s\n",
|
fprintf(stderr, "%s: searching: width=%lu poly=0x%s refin=%s refout=%s\n",
|
||||||
myname, plen(gpoly), string,
|
myname,
|
||||||
(flags & P_REFIN ? "true" : "false"),
|
plen(gpoly),
|
||||||
(flags & P_REFOUT ? "true" : "false")
|
string,
|
||||||
|
((flags & P_REFIN) ? "true" : "false"),
|
||||||
|
((flags & P_REFOUT) ? "true" : "false")
|
||||||
);
|
);
|
||||||
free(string);
|
free(string);
|
||||||
}
|
}
|
||||||
|
|
|
@ -252,7 +252,7 @@ struct Crypto1State *lfsr_recovery64(uint32_t ks2, uint32_t ks3) {
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for (j = 0; j < 19; ++j)
|
for (j = 0; j < 19; ++j)
|
||||||
low = low << 1 | evenparity32(i & S1[j]);
|
low = low << 1 | (evenparity32(i & S1[j]));
|
||||||
for (j = 0; j < 32; ++j)
|
for (j = 0; j < 32; ++j)
|
||||||
hi[j] = evenparity32(i & T1[j]);
|
hi[j] = evenparity32(i & T1[j]);
|
||||||
|
|
||||||
|
@ -265,17 +265,17 @@ struct Crypto1State *lfsr_recovery64(uint32_t ks2, uint32_t ks3) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (j = 0; j < 19; ++j)
|
for (j = 0; j < 19; ++j)
|
||||||
win = win << 1 | evenparity32(*tail & S2[j]);
|
win = win << 1 | (evenparity32(*tail & S2[j]));
|
||||||
|
|
||||||
win ^= low;
|
win ^= low;
|
||||||
for (j = 0; j < 32; ++j) {
|
for (j = 0; j < 32; ++j) {
|
||||||
win = win << 1 ^ hi[j] ^ evenparity32(*tail & T2[j]);
|
win = win << 1 ^ hi[j] ^ (evenparity32(*tail & T2[j]));
|
||||||
if (filter(win) != eks[j])
|
if (filter(win) != eks[j])
|
||||||
goto continue2;
|
goto continue2;
|
||||||
}
|
}
|
||||||
|
|
||||||
*tail = *tail << 1 | evenparity32(LF_POLY_EVEN & *tail);
|
*tail = *tail << 1 | (evenparity32(LF_POLY_EVEN & *tail));
|
||||||
sl->odd = *tail ^ evenparity32(LF_POLY_ODD & win);
|
sl->odd = *tail ^ (evenparity32(LF_POLY_ODD & win));
|
||||||
sl->even = win;
|
sl->even = win;
|
||||||
++sl;
|
++sl;
|
||||||
sl->odd = sl->even = 0;
|
sl->odd = sl->even = 0;
|
||||||
|
@ -303,7 +303,7 @@ uint8_t lfsr_rollback_bit(struct Crypto1State *s, uint32_t in, int fb) {
|
||||||
out ^= !!in;
|
out ^= !!in;
|
||||||
out ^= (ret = filter(s->odd)) & !!fb;
|
out ^= (ret = filter(s->odd)) & !!fb;
|
||||||
|
|
||||||
s->even |= evenparity32(out) << 23;
|
s->even |= (evenparity32(out)) << 23;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
/** lfsr_rollback_byte
|
/** lfsr_rollback_byte
|
||||||
|
|
|
@ -72,7 +72,7 @@ uint8_t crypto1_bit(struct Crypto1State *s, uint8_t in, int is_encrypted) {
|
||||||
feedin ^= !!in;
|
feedin ^= !!in;
|
||||||
feedin ^= LF_POLY_ODD & s->odd;
|
feedin ^= LF_POLY_ODD & s->odd;
|
||||||
feedin ^= LF_POLY_EVEN & s->even;
|
feedin ^= LF_POLY_EVEN & s->even;
|
||||||
s->even = s->even << 1 | evenparity32(feedin);
|
s->even = s->even << 1 | (evenparity32(feedin));
|
||||||
|
|
||||||
t = s->odd;
|
t = s->odd;
|
||||||
s->odd = s->even;
|
s->odd = s->even;
|
||||||
|
|
Loading…
Add table
Reference in a new issue