From 645985a1f90045387183d34058f131505e1dbd1a Mon Sep 17 00:00:00 2001 From: merlokk <807634+merlokk@users.noreply.github.com> Date: Tue, 3 Aug 2021 19:08:30 +0300 Subject: [PATCH] check mode in ev2 like ev1 --- client/src/mifare/desfirecore.c | 2 +- client/src/mifare/desfiresecurechan.c | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/client/src/mifare/desfirecore.c b/client/src/mifare/desfirecore.c index e60093317..869be3d0e 100644 --- a/client/src/mifare/desfirecore.c +++ b/client/src/mifare/desfirecore.c @@ -347,7 +347,7 @@ void DesfirePrintContext(DesfireContext *ctx) { desfire_get_key_block_length(ctx->keyType), sprint_hex(ctx->IV, desfire_get_key_block_length(ctx->keyType))); if (ctx->secureChannel == DACEV2) { - PrintAndLogEx(INFO, " TI: %s cmdCntr: 0x%08x", + PrintAndLogEx(INFO, " TI: %s cmdCntr: 0x%04x", sprint_hex(ctx->TI, 4), ctx->cmdCntr); } diff --git a/client/src/mifare/desfiresecurechan.c b/client/src/mifare/desfiresecurechan.c index 2314f7df5..1fc5ed78a 100644 --- a/client/src/mifare/desfiresecurechan.c +++ b/client/src/mifare/desfiresecurechan.c @@ -256,7 +256,7 @@ static void DesfireSecureChannelEncodeEV2(DesfireContext *ctx, uint8_t cmd, uint if (ctx->commMode == DCMMACed || ctx->commMode == DCMEncrypted) { uint8_t cmac[DESFIRE_MAX_CRYPTO_BLOCK_SIZE] = {0}; - DesfireEV2CalcCMAC(ctx, cmd, data, srcdatalen, cmac); + DesfireEV2CalcCMAC(ctx, cmd, srcdata, srcdatalen, cmac); memcpy(&dstdata[srcdatalen], cmac, DesfireGetMACLength(ctx)); *dstdatalen = srcdatalen + DesfireGetMACLength(ctx); @@ -515,6 +515,15 @@ bool PrintChannelModeWarning(uint8_t cmd, DesfireSecureChannel secureChannel, De break; } + // ev2 like ev1 + if (secureChannel == DACEV2 && + AllowedChannelModes[i].secureChannel == DACEV1 && + (AllowedChannelModes[i].cmdSet == cmdSet || (AllowedChannelModes[i].cmdSet == DCCNative && cmdSet == DCCNativeISO)) && + AllowedChannelModes[i].commMode == commMode) { + + found = true; + break; + } } if (!found)