mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-25 07:35:40 -07:00
d40 + padding
This commit is contained in:
parent
e78c563e45
commit
c125c10e31
1 changed files with 9 additions and 4 deletions
|
@ -211,14 +211,19 @@ static void DesfireSecureChannelEncodeD40(DesfireContext *ctx, uint8_t cmd, uint
|
||||||
memcpy(&dstdata[srcdatalen], mac, DesfireGetMACLength(ctx));
|
memcpy(&dstdata[srcdatalen], mac, DesfireGetMACLength(ctx));
|
||||||
*dstdatalen = rlen;
|
*dstdatalen = rlen;
|
||||||
}
|
}
|
||||||
} else if (ctx->commMode == DCMEncrypted) {
|
} else if (ctx->commMode == DCMEncrypted || ctx->commMode == DCMEncryptedWithPadding) {
|
||||||
if (srcdatalen <= hdrlen)
|
if (srcdatalen <= hdrlen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
rlen = padded_data_length(srcdatalen + 2 - hdrlen, desfire_get_key_block_length(ctx->keyType)) + hdrlen; // 2 - crc16
|
uint8_t paddinglen = (ctx->commMode == DCMEncryptedWithPadding) ? 1 : 0;
|
||||||
|
rlen = padded_data_length(srcdatalen + 2 + paddinglen - hdrlen, desfire_get_key_block_length(ctx->keyType)) + hdrlen; // 2 - crc16
|
||||||
memcpy(data, &srcdata[hdrlen], srcdatalen - hdrlen);
|
memcpy(data, &srcdata[hdrlen], srcdatalen - hdrlen);
|
||||||
iso14443a_crc_append(data, srcdatalen - hdrlen);
|
iso14443a_crc_append(data, srcdatalen - hdrlen);
|
||||||
|
|
||||||
|
// add padding
|
||||||
|
if (paddinglen > 0)
|
||||||
|
data[srcdatalen + 1 + 2] = 0x80;
|
||||||
|
|
||||||
memcpy(dstdata, srcdata, hdrlen);
|
memcpy(dstdata, srcdata, hdrlen);
|
||||||
//PrintAndLogEx(INFO, "src[%d]: %s", srcdatalen - hdrlen + 2, sprint_hex(data, srcdatalen - hdrlen + 2));
|
//PrintAndLogEx(INFO, "src[%d]: %s", srcdatalen - hdrlen + 2, sprint_hex(data, srcdatalen - hdrlen + 2));
|
||||||
DesfireCryptoEncDec(ctx, DCOSessionKeyEnc, data, rlen - hdrlen, &dstdata[hdrlen], true);
|
DesfireCryptoEncDec(ctx, DCOSessionKeyEnc, data, rlen - hdrlen, &dstdata[hdrlen], true);
|
||||||
|
@ -306,7 +311,7 @@ static void DesfireSecureChannelEncodeEV2(DesfireContext *ctx, uint8_t cmd, uint
|
||||||
|
|
||||||
memcpy(&dstdata[srcdatalen], cmac, DesfireGetMACLength(ctx));
|
memcpy(&dstdata[srcdatalen], cmac, DesfireGetMACLength(ctx));
|
||||||
*dstdatalen = srcdatalen + DesfireGetMACLength(ctx);
|
*dstdatalen = srcdatalen + DesfireGetMACLength(ctx);
|
||||||
} else if (ctx->commMode == DCMEncrypted) {
|
} else if (ctx->commMode == DCMEncrypted || ctx->commMode == DCMEncryptedWithPadding) {
|
||||||
memcpy(dstdata, srcdata, hdrlen);
|
memcpy(dstdata, srcdata, hdrlen);
|
||||||
|
|
||||||
if (srcdatalen > hdrlen) {
|
if (srcdatalen > hdrlen) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue