mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-25 07:35:40 -07:00
d40/encode works
This commit is contained in:
parent
a011894542
commit
d9be538fa1
1 changed files with 8 additions and 8 deletions
|
@ -142,9 +142,6 @@ static uint8_t DesfireGetCmdHeaderLen(uint8_t cmd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DesfireSecureChannelEncodeD40(DesfireContext *ctx, uint8_t cmd, uint8_t *srcdata, size_t srcdatalen, uint8_t *dstdata, size_t *dstdatalen) {
|
static void DesfireSecureChannelEncodeD40(DesfireContext *ctx, uint8_t cmd, uint8_t *srcdata, size_t srcdatalen, uint8_t *dstdata, size_t *dstdatalen) {
|
||||||
memcpy(dstdata, srcdata, srcdatalen);
|
|
||||||
*dstdatalen = srcdatalen;
|
|
||||||
|
|
||||||
uint8_t data[1024] = {0};
|
uint8_t data[1024] = {0};
|
||||||
size_t rlen = 0;
|
size_t rlen = 0;
|
||||||
uint8_t hdrlen = DesfireGetCmdHeaderLen(cmd);
|
uint8_t hdrlen = DesfireGetCmdHeaderLen(cmd);
|
||||||
|
@ -152,6 +149,7 @@ static void DesfireSecureChannelEncodeD40(DesfireContext *ctx, uint8_t cmd, uint
|
||||||
if (ctx->commMode == DCMMACed || (ctx->commMode == DCMEncrypted && srcdatalen <= hdrlen)) {
|
if (ctx->commMode == DCMMACed || (ctx->commMode == DCMEncrypted && srcdatalen <= hdrlen)) {
|
||||||
if (srcdatalen == 0)
|
if (srcdatalen == 0)
|
||||||
return;
|
return;
|
||||||
|
PrintAndLogEx(INFO, "---MAC");
|
||||||
|
|
||||||
rlen = srcdatalen + DesfireGetMACLength(ctx);
|
rlen = srcdatalen + DesfireGetMACLength(ctx);
|
||||||
memcpy(data, srcdata, srcdatalen);
|
memcpy(data, srcdata, srcdatalen);
|
||||||
|
@ -163,12 +161,14 @@ static void DesfireSecureChannelEncodeD40(DesfireContext *ctx, uint8_t cmd, uint
|
||||||
if (srcdatalen == 0 || srcdatalen <= hdrlen)
|
if (srcdatalen == 0 || srcdatalen <= hdrlen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
rlen = padded_data_length(srcdatalen + 2, desfire_get_key_block_length(ctx->keyType)); // 2 - crc16
|
rlen = padded_data_length(srcdatalen + 2 - hdrlen, desfire_get_key_block_length(ctx->keyType)) + hdrlen; // 2 - crc16
|
||||||
memcpy(data, srcdata, srcdatalen);
|
memcpy(data, &srcdata[hdrlen], srcdatalen - hdrlen);
|
||||||
compute_crc(CRC_14443_A, data, srcdatalen, &data[srcdatalen], &data[srcdatalen + 1]);
|
iso14443a_crc_append(data, srcdatalen - hdrlen);
|
||||||
DesfireCryptoEncDec(ctx, true, data, rlen, dstdata, true);
|
memcpy(dstdata, srcdata, hdrlen);
|
||||||
|
//PrintAndLogEx(INFO, "src[%d]: %s", srcdatalen - hdrlen + 2, sprint_hex(data, srcdatalen - hdrlen + 2));
|
||||||
|
DesfireCryptoEncDec(ctx, true, data, rlen - hdrlen, &dstdata[hdrlen], true);
|
||||||
*dstdatalen = rlen;
|
*dstdatalen = rlen;
|
||||||
} if (ctx->commMode == DCMEncryptedPlain) {
|
} else if (ctx->commMode == DCMEncryptedPlain) {
|
||||||
if (srcdatalen == 0 || srcdatalen <= hdrlen)
|
if (srcdatalen == 0 || srcdatalen <= hdrlen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue