mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-19 21:03:23 -07:00
logic fixes. works
This commit is contained in:
parent
9f8098f1e7
commit
dea1b37104
2 changed files with 12 additions and 11 deletions
|
@ -88,30 +88,30 @@ int MFPCommitPerso(bool activateField, bool leaveSignalON, uint8_t *dataout, int
|
|||
int MFPReadBlock(mf4Session *session, bool plain, uint8_t blockNum, uint8_t blockCount, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen, uint8_t *mac) {
|
||||
uint8_t rcmd[4 + 8] = {(plain?(0x37):(0x33)), blockNum, 0x00, blockCount};
|
||||
if (!plain && session)
|
||||
CalulateMAC(session, rcmd, 4, &rcmd[4]);
|
||||
CalulateMAC(session, rcmd, 4, &rcmd[4], VerboseMode);
|
||||
|
||||
int res = intExchangeRAW14aPlus(rcmd, plain?4:sizeof(rcmd), activateField, leaveSignalON, dataout, maxdataoutlen, dataoutlen);
|
||||
if(res)
|
||||
return res;
|
||||
|
||||
if(session && mac)
|
||||
CalulateMAC(session, dataout, *dataoutlen, mac);
|
||||
CalulateMAC(session, dataout, *dataoutlen, mac, VerboseMode);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int MFPWriteBlock(mf4Session *session, uint8_t blockNum, uint8_t *data, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen) {
|
||||
int MFPWriteBlock(mf4Session *session, uint8_t blockNum, uint8_t *data, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen, uint8_t *mac) {
|
||||
uint8_t rcmd[1 + 2 + 16 + 8] = {0xA3, blockNum, 0x00};
|
||||
memmove(&rcmd[3], data, 16);
|
||||
if (session)
|
||||
CalulateMAC(session, rcmd, 19, &rcmd[19]);
|
||||
CalulateMAC(session, rcmd, 19, &rcmd[19], VerboseMode);
|
||||
|
||||
int res = intExchangeRAW14aPlus(rcmd, sizeof(rcmd), activateField, leaveSignalON, dataout, maxdataoutlen, dataoutlen);
|
||||
if(res)
|
||||
return res;
|
||||
|
||||
if(session && mac)
|
||||
CalulateMAC(session, dataout, *dataoutlen, mac);
|
||||
CalulateMAC(session, dataout, *dataoutlen, mac, VerboseMode);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -680,7 +680,8 @@ int CmdHFMFPWrbl(const char *cmd) {
|
|||
|
||||
uint8_t data[250] = {0};
|
||||
int datalen = 0;
|
||||
res = MFPWriteBlock(&session, blockNum & 0xff, datain, false, false, data, sizeof(data), &datalen);
|
||||
uint8_t mac[8] = {0};
|
||||
res = MFPWriteBlock(&session, blockNum & 0xff, datain, false, false, data, sizeof(data), &datalen, mac);
|
||||
if (res) {
|
||||
PrintAndLog("Write error: %d", res);
|
||||
return res;
|
||||
|
@ -697,7 +698,7 @@ int CmdHFMFPWrbl(const char *cmd) {
|
|||
}
|
||||
|
||||
if (!memcmp(&data[1], mac, 8)) {
|
||||
PrintAndLog("WARNING: mac on block %d not equal...", n);
|
||||
PrintAndLog("WARNING: mac not equal...");
|
||||
PrintAndLog("MAC card: %s", sprint_hex(&data[1], 8));
|
||||
PrintAndLog("MAC reader: %s", sprint_hex(mac, 8));
|
||||
} else {
|
||||
|
|
|
@ -44,16 +44,16 @@ int aes_decode(uint8_t *iv, uint8_t *key, uint8_t *input, uint8_t *output, int l
|
|||
}
|
||||
|
||||
int aes_cmac(uint8_t *iv, uint8_t *key, uint8_t *input, uint8_t *mac, int length) {
|
||||
setmem(mac, 0x00, 16);
|
||||
memset(mac, 0x00, 16);
|
||||
uint8_t iiv[16] = {0};
|
||||
if (iv)
|
||||
memcpy(iiv, iv, 16);
|
||||
|
||||
// padding nist...
|
||||
uint8_t data[length + 16] = {0};
|
||||
uint8_t data[2049] = {0}; // length + 16
|
||||
memcpy(data, input, length);
|
||||
data[length] = 0x80;
|
||||
int datalen = length & 0xfffffff0 + 0x10;
|
||||
int datalen = (length & 0xfffffff0) + 0x10;
|
||||
|
||||
// cmac
|
||||
aes_context aes;
|
||||
|
@ -66,7 +66,7 @@ int aes_cmac(uint8_t *iv, uint8_t *key, uint8_t *input, uint8_t *mac, int length
|
|||
|
||||
int aes_cmac8(uint8_t *iv, uint8_t *key, uint8_t *input, uint8_t *mac, int length) {
|
||||
uint8_t cmac[16] = {0};
|
||||
setmem(mac, 0x00, 8);
|
||||
memset(mac, 0x00, 8);
|
||||
|
||||
int res = aes_cmac(iv, key, input, cmac, length);
|
||||
if (res)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue