From dea1b371040df56ad27ea93ce0e301d11eabbed9 Mon Sep 17 00:00:00 2001 From: merlokk <807634+merlokk@users.noreply.github.com> Date: Wed, 24 Oct 2018 23:55:09 +0300 Subject: [PATCH] logic fixes. works --- client/cmdhfmfp.c | 15 ++++++++------- common/polarssl/libpcrypto.c | 8 ++++---- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/client/cmdhfmfp.c b/client/cmdhfmfp.c index b3b973c3..c304d5cb 100644 --- a/client/cmdhfmfp.c +++ b/client/cmdhfmfp.c @@ -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 { diff --git a/common/polarssl/libpcrypto.c b/common/polarssl/libpcrypto.c index 4e997c55..bc3f5645 100644 --- a/common/polarssl/libpcrypto.c +++ b/common/polarssl/libpcrypto.c @@ -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)