mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-23 22:55:37 -07:00
make style
This commit is contained in:
parent
bdac4cb48d
commit
cf63b9e022
3 changed files with 114 additions and 114 deletions
|
@ -1060,10 +1060,10 @@ static int handler_desfire_freemem(uint32_t *free_mem) {
|
||||||
// AID == 000000 6bits LSB needs to be 0
|
// AID == 000000 6bits LSB needs to be 0
|
||||||
key_no &= 0x0F;
|
key_no &= 0x0F;
|
||||||
|
|
||||||
|
|
||||||
Desfire treats Des keys as TDes but with the first half = 2nd half
|
Desfire treats Des keys as TDes but with the first half = 2nd half
|
||||||
As such, we should be able to convert the Des to TDes then run the code as TDes
|
As such, we should be able to convert the Des to TDes then run the code as TDes
|
||||||
|
|
||||||
if (new_algo == MFDES_ALGO_DES) {
|
if (new_algo == MFDES_ALGO_DES) {
|
||||||
memcpy(&new_key[8], new_key, 8);
|
memcpy(&new_key[8], new_key, 8);
|
||||||
new_algo = MFDES_ALGO_3DES;
|
new_algo = MFDES_ALGO_3DES;
|
||||||
|
@ -4906,7 +4906,7 @@ static int CmdHF14ADesChangeKey(const char *Cmd) {
|
||||||
arg_str0(NULL, "aid", "<app id hex>", "Application ID of application (3 hex bytes, big endian)"),
|
arg_str0(NULL, "aid", "<app id hex>", "Application ID of application (3 hex bytes, big endian)"),
|
||||||
arg_str0(NULL, "oldalgo", "<DES/2TDEA/3TDEA/AES>", "Old key crypto algorithm: DES, 2TDEA, 3TDEA, AES"),
|
arg_str0(NULL, "oldalgo", "<DES/2TDEA/3TDEA/AES>", "Old key crypto algorithm: DES, 2TDEA, 3TDEA, AES"),
|
||||||
arg_str0(NULL, "oldkey", "<old key>", "Old key (HEX 8(DES), 16(2TDEA or AES) or 24(3TDEA) bytes)"),
|
arg_str0(NULL, "oldkey", "<old key>", "Old key (HEX 8(DES), 16(2TDEA or AES) or 24(3TDEA) bytes)"),
|
||||||
arg_int0(NULL, "newkeyno","<keyno>", "Key number for change"),
|
arg_int0(NULL, "newkeyno", "<keyno>", "Key number for change"),
|
||||||
arg_str0(NULL, "newalgo", "<DES/2TDEA/3TDEA/AES>", "New key crypto algorithm: DES, 2TDEA, 3TDEA, AES"),
|
arg_str0(NULL, "newalgo", "<DES/2TDEA/3TDEA/AES>", "New key crypto algorithm: DES, 2TDEA, 3TDEA, AES"),
|
||||||
arg_str0(NULL, "newkey", "<new key>", "New key (HEX 8(DES), 16(2TDEA or AES) or 24(3TDEA) bytes)"),
|
arg_str0(NULL, "newkey", "<new key>", "New key (HEX 8(DES), 16(2TDEA or AES) or 24(3TDEA) bytes)"),
|
||||||
arg_str0(NULL, "newver", "<version hex>", "New key's version (1 hex byte)"),
|
arg_str0(NULL, "newver", "<version hex>", "New key's version (1 hex byte)"),
|
||||||
|
@ -4929,7 +4929,7 @@ static int CmdHF14ADesChangeKey(const char *Cmd) {
|
||||||
int oldkeytype = T_DES;
|
int oldkeytype = T_DES;
|
||||||
if (CLIGetOptionList(arg_get_str(ctx, 12), DesfireAlgoOpts, &oldkeytype))
|
if (CLIGetOptionList(arg_get_str(ctx, 12), DesfireAlgoOpts, &oldkeytype))
|
||||||
return PM3_ESOFT;
|
return PM3_ESOFT;
|
||||||
|
|
||||||
uint8_t oldkey[DESFIRE_MAX_KEY_SIZE] = {0};
|
uint8_t oldkey[DESFIRE_MAX_KEY_SIZE] = {0};
|
||||||
uint8_t keydata[200] = {0};
|
uint8_t keydata[200] = {0};
|
||||||
int oldkeylen = sizeof(keydata);
|
int oldkeylen = sizeof(keydata);
|
||||||
|
@ -4940,7 +4940,7 @@ static int CmdHF14ADesChangeKey(const char *Cmd) {
|
||||||
}
|
}
|
||||||
if (oldkeylen)
|
if (oldkeylen)
|
||||||
memcpy(oldkey, keydata, oldkeylen);
|
memcpy(oldkey, keydata, oldkeylen);
|
||||||
|
|
||||||
uint8_t newkeynum = arg_get_int_def(ctx, 14, 0);
|
uint8_t newkeynum = arg_get_int_def(ctx, 14, 0);
|
||||||
|
|
||||||
int newkeytype = T_DES;
|
int newkeytype = T_DES;
|
||||||
|
@ -4968,7 +4968,7 @@ static int CmdHF14ADesChangeKey(const char *Cmd) {
|
||||||
|
|
||||||
SetAPDULogging(APDULogging);
|
SetAPDULogging(APDULogging);
|
||||||
CLIParserFree(ctx);
|
CLIParserFree(ctx);
|
||||||
|
|
||||||
// if we change the same key
|
// if we change the same key
|
||||||
if (oldkeylen == 0 && newkeynum == dctx.keyNum) {
|
if (oldkeylen == 0 && newkeynum == dctx.keyNum) {
|
||||||
oldkeytype = dctx.keyType;
|
oldkeytype = dctx.keyType;
|
||||||
|
@ -4979,7 +4979,7 @@ static int CmdHF14ADesChangeKey(const char *Cmd) {
|
||||||
PrintAndLogEx(WARNING, "Changing the root aid (0x000000)");
|
PrintAndLogEx(WARNING, "Changing the root aid (0x000000)");
|
||||||
return PM3_ESOFT; // TODO!!!!
|
return PM3_ESOFT; // TODO!!!!
|
||||||
}
|
}
|
||||||
|
|
||||||
if (appid)
|
if (appid)
|
||||||
PrintAndLogEx(INFO, _CYAN_("Changing key in the application: ") _YELLOW_("%06x"), appid);
|
PrintAndLogEx(INFO, _CYAN_("Changing key in the application: ") _YELLOW_("%06x"), appid);
|
||||||
else
|
else
|
||||||
|
@ -4990,7 +4990,7 @@ static int CmdHF14ADesChangeKey(const char *Cmd) {
|
||||||
PrintAndLogEx(INFO, "new key: %s [%d] %s", CLIGetOptionListStr(DesfireAlgoOpts, newkeytype), desfire_get_key_length(newkeytype), sprint_hex(newkey, desfire_get_key_length(newkeytype)));
|
PrintAndLogEx(INFO, "new key: %s [%d] %s", CLIGetOptionListStr(DesfireAlgoOpts, newkeytype), desfire_get_key_length(newkeytype), sprint_hex(newkey, desfire_get_key_length(newkeytype)));
|
||||||
if (newkeyver < 0x100 || newkeytype == T_AES)
|
if (newkeyver < 0x100 || newkeytype == T_AES)
|
||||||
PrintAndLogEx(INFO, "new key version: 0x%02x", newkeyver & 0x00);
|
PrintAndLogEx(INFO, "new key version: 0x%02x", newkeyver & 0x00);
|
||||||
|
|
||||||
res = DesfireSelectAndAuthenticate(&dctx, securechann, appid, verbose);
|
res = DesfireSelectAndAuthenticate(&dctx, securechann, appid, verbose);
|
||||||
if (res != PM3_SUCCESS) {
|
if (res != PM3_SUCCESS) {
|
||||||
DropField();
|
DropField();
|
||||||
|
@ -5023,99 +5023,99 @@ static int CmdHF14ADesChangeKey(const char *Cmd) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* CLIParserContext *ctx;
|
/* CLIParserContext *ctx;
|
||||||
CLIParserInit(&ctx, "hf mfdes changekey",
|
CLIParserInit(&ctx, "hf mfdes changekey",
|
||||||
"Change MIFARE DESFire Key.\n"
|
"Change MIFARE DESFire Key.\n"
|
||||||
"Make sure to select aid or authenticate aid before running this command.",
|
"Make sure to select aid or authenticate aid before running this command.",
|
||||||
"hf mfdes changekey -n 0 -t 1 -k 0000000000000000 -u 1 -j 0102030405060708 -> DES, keynumber 0"
|
"hf mfdes changekey -n 0 -t 1 -k 0000000000000000 -u 1 -j 0102030405060708 -> DES, keynumber 0"
|
||||||
);
|
);
|
||||||
|
|
||||||
void *argtable[] = {
|
void *argtable[] = {
|
||||||
arg_param_begin,
|
arg_param_begin,
|
||||||
arg_int0("n", "keyno", "<dec>", "Key number used for authentification"),
|
arg_int0("n", "keyno", "<dec>", "Key number used for authentification"),
|
||||||
arg_int0("t", "algo", "<dec>", "Current key algo (1 = DES, 2 = 3DES(2K2DES), 3 = 3K3DES, 4 = AES)"),
|
arg_int0("t", "algo", "<dec>", "Current key algo (1 = DES, 2 = 3DES(2K2DES), 3 = 3K3DES, 4 = AES)"),
|
||||||
arg_str0("k", "key", "<hex>", "Current Key (HEX 8-24 bytes)"),
|
arg_str0("k", "key", "<hex>", "Current Key (HEX 8-24 bytes)"),
|
||||||
arg_int0("u", "newalgo", "<dec>", "New key algo (1 = DES, 2 = 3DES(2K2DES), 3 = 3K3DES, 4 = AES)"),
|
arg_int0("u", "newalgo", "<dec>", "New key algo (1 = DES, 2 = 3DES(2K2DES), 3 = 3K3DES, 4 = AES)"),
|
||||||
arg_str0("j", "newkey", "<hex>", "New Key (HEX 8-24 bytes)"),
|
arg_str0("j", "newkey", "<hex>", "New Key (HEX 8-24 bytes)"),
|
||||||
arg_int0("v", "aesver", "<dec>", "AES version (if AES is used)"),
|
arg_int0("v", "aesver", "<dec>", "AES version (if AES is used)"),
|
||||||
arg_param_end
|
arg_param_end
|
||||||
};
|
};
|
||||||
CLIExecWithReturn(ctx, Cmd, argtable, false);
|
CLIExecWithReturn(ctx, Cmd, argtable, false);
|
||||||
|
|
||||||
uint8_t cmdKeyNo = arg_get_int_def(ctx, 1, 0);
|
uint8_t cmdKeyNo = arg_get_int_def(ctx, 1, 0);
|
||||||
uint8_t cmdAuthAlgo = arg_get_int_def(ctx, 2, 0);
|
uint8_t cmdAuthAlgo = arg_get_int_def(ctx, 2, 0);
|
||||||
uint8_t key[24] = {0};
|
uint8_t key[24] = {0};
|
||||||
int keylen = 0;
|
int keylen = 0;
|
||||||
int res_klen = CLIParamHexToBuf(arg_get_str(ctx, 3), key, 24, &keylen);
|
int res_klen = CLIParamHexToBuf(arg_get_str(ctx, 3), key, 24, &keylen);
|
||||||
|
|
||||||
uint8_t newcmdAuthAlgo = arg_get_int_def(ctx, 4, 0);
|
uint8_t newcmdAuthAlgo = arg_get_int_def(ctx, 4, 0);
|
||||||
uint8_t newkey[24] = {0};
|
uint8_t newkey[24] = {0};
|
||||||
int newkeylen = 0;
|
int newkeylen = 0;
|
||||||
int res_newklen = CLIParamHexToBuf(arg_get_str(ctx, 5), newkey, 24, &newkeylen);
|
int res_newklen = CLIParamHexToBuf(arg_get_str(ctx, 5), newkey, 24, &newkeylen);
|
||||||
|
|
||||||
uint8_t aesversion = arg_get_int_def(ctx, 6, 0);
|
uint8_t aesversion = arg_get_int_def(ctx, 6, 0);
|
||||||
CLIParserFree(ctx);
|
CLIParserFree(ctx);
|
||||||
|
|
||||||
//DropFieldDesfire();
|
//DropFieldDesfire();
|
||||||
// NR DESC KEYLENGHT
|
// NR DESC KEYLENGHT
|
||||||
// ------------------------
|
// ------------------------
|
||||||
// 1 = DES 8
|
// 1 = DES 8
|
||||||
// 2 = 3DES 16
|
// 2 = 3DES 16
|
||||||
// 3 = 3K 3DES 24
|
// 3 = 3K 3DES 24
|
||||||
// 4 = AES 16
|
// 4 = AES 16
|
||||||
uint8_t keylength = 8;
|
uint8_t keylength = 8;
|
||||||
if (cmdAuthAlgo == MFDES_ALGO_AES) {
|
if (cmdAuthAlgo == MFDES_ALGO_AES) {
|
||||||
keylength = 16;
|
keylength = 16;
|
||||||
} else if (cmdAuthAlgo == MFDES_ALGO_3DES) {
|
} else if (cmdAuthAlgo == MFDES_ALGO_3DES) {
|
||||||
keylength = 16;
|
keylength = 16;
|
||||||
} else if (cmdAuthAlgo == MFDES_ALGO_DES) {
|
} else if (cmdAuthAlgo == MFDES_ALGO_DES) {
|
||||||
keylength = 8;
|
keylength = 8;
|
||||||
} else if (cmdAuthAlgo == MFDES_ALGO_3K3DES) {
|
} else if (cmdAuthAlgo == MFDES_ALGO_3K3DES) {
|
||||||
keylength = 24;
|
keylength = 24;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t newkeylength = 8;
|
uint8_t newkeylength = 8;
|
||||||
if (newcmdAuthAlgo == MFDES_ALGO_AES) {
|
if (newcmdAuthAlgo == MFDES_ALGO_AES) {
|
||||||
newkeylength = 16;
|
newkeylength = 16;
|
||||||
} else if (newcmdAuthAlgo == MFDES_ALGO_3DES) {
|
} else if (newcmdAuthAlgo == MFDES_ALGO_3DES) {
|
||||||
newkeylength = 16;
|
newkeylength = 16;
|
||||||
} else if (newcmdAuthAlgo == MFDES_ALGO_DES) {
|
} else if (newcmdAuthAlgo == MFDES_ALGO_DES) {
|
||||||
newkeylength = 8;
|
newkeylength = 8;
|
||||||
} else if (newcmdAuthAlgo == MFDES_ALGO_3K3DES) {
|
} else if (newcmdAuthAlgo == MFDES_ALGO_3K3DES) {
|
||||||
newkeylength = 24;
|
newkeylength = 24;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res_klen || (keylen < 8) || (keylen > 24)) {
|
if (res_klen || (keylen < 8) || (keylen > 24)) {
|
||||||
PrintAndLogEx(ERR, "Specified key must have %d bytes length", keylen);
|
PrintAndLogEx(ERR, "Specified key must have %d bytes length", keylen);
|
||||||
return PM3_EINVARG;
|
return PM3_EINVARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res_newklen || (newkeylen < 8) || (newkeylen > 24)) {
|
if (res_newklen || (newkeylen < 8) || (newkeylen > 24)) {
|
||||||
PrintAndLogEx(ERR, "Specified new key must have %d bytes length", newkeylen);
|
PrintAndLogEx(ERR, "Specified new key must have %d bytes length", newkeylen);
|
||||||
return PM3_EINVARG;
|
return PM3_EINVARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keylen != keylength) {
|
if (keylen != keylength) {
|
||||||
PrintAndLogEx(WARNING, "Key must include %d hex symbols, got %d", keylength, keylen);
|
PrintAndLogEx(WARNING, "Key must include %d hex symbols, got %d", keylength, keylen);
|
||||||
return PM3_EINVARG;
|
return PM3_EINVARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newkeylen != newkeylength) {
|
if (newkeylen != newkeylength) {
|
||||||
PrintAndLogEx(WARNING, "New key must include %d hex symbols, got %d", keylength, newkeylen);
|
PrintAndLogEx(WARNING, "New key must include %d hex symbols, got %d", keylength, newkeylen);
|
||||||
return PM3_EINVARG;
|
return PM3_EINVARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintAndLogEx(INFO, "changing key number " _YELLOW_("0x%02x"), cmdKeyNo);
|
PrintAndLogEx(INFO, "changing key number " _YELLOW_("0x%02x"), cmdKeyNo);
|
||||||
PrintAndLogEx(INFO, "old key: %s ( %s )", sprint_hex_inrow(key, keylen), getEncryptionAlgoStr(cmdAuthAlgo));
|
PrintAndLogEx(INFO, "old key: %s ( %s )", sprint_hex_inrow(key, keylen), getEncryptionAlgoStr(cmdAuthAlgo));
|
||||||
PrintAndLogEx(INFO, "new key: %s ( %s )", sprint_hex_inrow(newkey, newkeylen), getEncryptionAlgoStr(newcmdAuthAlgo));
|
PrintAndLogEx(INFO, "new key: %s ( %s )", sprint_hex_inrow(newkey, newkeylen), getEncryptionAlgoStr(newcmdAuthAlgo));
|
||||||
|
|
||||||
int res = mifare_desfire_change_key(cmdKeyNo, newkey, newcmdAuthAlgo, key, cmdAuthAlgo, aesversion);
|
int res = mifare_desfire_change_key(cmdKeyNo, newkey, newcmdAuthAlgo, key, cmdAuthAlgo, aesversion);
|
||||||
if (res == PM3_SUCCESS) {
|
if (res == PM3_SUCCESS) {
|
||||||
PrintAndLogEx(SUCCESS, "Change key ( " _GREEN_("ok") " )");
|
PrintAndLogEx(SUCCESS, "Change key ( " _GREEN_("ok") " )");
|
||||||
} else {
|
} else {
|
||||||
PrintAndLogEx(FAILED, "Change key ( " _RED_("fail") " )");
|
PrintAndLogEx(FAILED, "Change key ( " _RED_("fail") " )");
|
||||||
}
|
}
|
||||||
return res;*/
|
return res;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
static int CmdHF14ADesCreateApp(const char *Cmd) {
|
static int CmdHF14ADesCreateApp(const char *Cmd) {
|
||||||
|
|
|
@ -1080,7 +1080,7 @@ void PrintKeySettings(uint8_t keysettings, uint8_t numkeys, bool applevel, bool
|
||||||
}
|
}
|
||||||
|
|
||||||
int DesfireChangeKey(DesfireContext *dctx, uint8_t newkeynum, DesfireCryptoAlgorythm newkeytype, uint32_t newkeyver, uint8_t *newkey, DesfireCryptoAlgorythm oldkeytype, uint8_t *oldkey, bool verbose) {
|
int DesfireChangeKey(DesfireContext *dctx, uint8_t newkeynum, DesfireCryptoAlgorythm newkeytype, uint32_t newkeyver, uint8_t *newkey, DesfireCryptoAlgorythm oldkeytype, uint8_t *oldkey, bool verbose) {
|
||||||
|
|
||||||
uint8_t okeybuf[DESFIRE_MAX_KEY_SIZE] = {0};
|
uint8_t okeybuf[DESFIRE_MAX_KEY_SIZE] = {0};
|
||||||
uint8_t nkeybuf[DESFIRE_MAX_KEY_SIZE] = {0};
|
uint8_t nkeybuf[DESFIRE_MAX_KEY_SIZE] = {0};
|
||||||
uint8_t pckcdata[DESFIRE_MAX_KEY_SIZE + 10] = {0};
|
uint8_t pckcdata[DESFIRE_MAX_KEY_SIZE + 10] = {0};
|
||||||
|
@ -1089,22 +1089,22 @@ int DesfireChangeKey(DesfireContext *dctx, uint8_t newkeynum, DesfireCryptoAlgor
|
||||||
keynodata |= (DesfireKeyAlgoToType(newkeytype) & 0x03) << 6;
|
keynodata |= (DesfireKeyAlgoToType(newkeytype) & 0x03) << 6;
|
||||||
pckcdata[0] = MFDES_CHANGE_KEY; // TODO
|
pckcdata[0] = MFDES_CHANGE_KEY; // TODO
|
||||||
pckcdata[1] = keynodata;
|
pckcdata[1] = keynodata;
|
||||||
|
|
||||||
// DES -> 2TDEA
|
// DES -> 2TDEA
|
||||||
memcpy(okeybuf, oldkey, desfire_get_key_length(oldkeytype));
|
memcpy(okeybuf, oldkey, desfire_get_key_length(oldkeytype));
|
||||||
if (oldkeytype == T_DES) {
|
if (oldkeytype == T_DES) {
|
||||||
memcpy(&okeybuf[8], oldkey, 8);
|
memcpy(&okeybuf[8], oldkey, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(nkeybuf, newkey, desfire_get_key_length(newkeytype));
|
memcpy(nkeybuf, newkey, desfire_get_key_length(newkeytype));
|
||||||
size_t nkeylen = desfire_get_key_length(newkeytype);
|
size_t nkeylen = desfire_get_key_length(newkeytype);
|
||||||
if (newkeytype == T_DES) {
|
if (newkeytype == T_DES) {
|
||||||
memcpy(&nkeybuf[8], newkey, 8);
|
memcpy(&nkeybuf[8], newkey, 8);
|
||||||
nkeylen = desfire_get_key_length(T_3DES);
|
nkeylen = desfire_get_key_length(T_3DES);
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintAndLogEx(SUCCESS, "--oldk [%d]: %s", desfire_get_key_length(oldkeytype), sprint_hex(okeybuf, desfire_get_key_length(oldkeytype)));
|
PrintAndLogEx(SUCCESS, "--oldk [%d]: %s", desfire_get_key_length(oldkeytype), sprint_hex(okeybuf, desfire_get_key_length(oldkeytype)));
|
||||||
PrintAndLogEx(SUCCESS, "--newk [%d]: %s", nkeylen, sprint_hex(nkeybuf, nkeylen));
|
PrintAndLogEx(SUCCESS, "--newk [%d]: %s", nkeylen, sprint_hex(nkeybuf, nkeylen));
|
||||||
|
|
||||||
// set key version for DES. if newkeyver > 0xff - setting key version is disabled
|
// set key version for DES. if newkeyver > 0xff - setting key version is disabled
|
||||||
if (newkeytype != T_AES && newkeyver < 0x100) {
|
if (newkeytype != T_AES && newkeyver < 0x100) {
|
||||||
|
@ -1112,9 +1112,9 @@ PrintAndLogEx(SUCCESS, "--newk [%d]: %s", nkeylen, sprint_hex(nkeybuf, nkeylen))
|
||||||
if (verbose)
|
if (verbose)
|
||||||
PrintAndLogEx(INFO, "changed new key: %s [%d] %s", CLIGetOptionListStr(DesfireAlgoOpts, newkeytype), desfire_get_key_length(newkeytype), sprint_hex(newkey, desfire_get_key_length(newkeytype)));
|
PrintAndLogEx(INFO, "changed new key: %s [%d] %s", CLIGetOptionListStr(DesfireAlgoOpts, newkeytype), desfire_get_key_length(newkeytype), sprint_hex(newkey, desfire_get_key_length(newkeytype)));
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintAndLogEx(SUCCESS, "--newk [%d]: %s", nkeylen, sprint_hex(nkeybuf, nkeylen));
|
PrintAndLogEx(SUCCESS, "--newk [%d]: %s", nkeylen, sprint_hex(nkeybuf, nkeylen));
|
||||||
|
|
||||||
// xor if we change current auth key
|
// xor if we change current auth key
|
||||||
if (newkeynum == dctx->keyNum) {
|
if (newkeynum == dctx->keyNum) {
|
||||||
memcpy(cdata, nkeybuf, nkeylen);
|
memcpy(cdata, nkeybuf, nkeylen);
|
||||||
|
@ -1122,16 +1122,16 @@ PrintAndLogEx(SUCCESS, "--newk [%d]: %s", nkeylen, sprint_hex(nkeybuf, nkeylen))
|
||||||
memcpy(cdata, nkeybuf, nkeylen);
|
memcpy(cdata, nkeybuf, nkeylen);
|
||||||
bin_xor(cdata, okeybuf, nkeylen);
|
bin_xor(cdata, okeybuf, nkeylen);
|
||||||
}
|
}
|
||||||
|
|
||||||
// add key version for AES
|
// add key version for AES
|
||||||
size_t cdatalen = nkeylen;
|
size_t cdatalen = nkeylen;
|
||||||
PrintAndLogEx(SUCCESS, "--cdata [%d]: %s kv = 0x%02x", cdatalen, sprint_hex(cdata, cdatalen), newkeyver);
|
PrintAndLogEx(SUCCESS, "--cdata [%d]: %s kv = 0x%02x", cdatalen, sprint_hex(cdata, cdatalen), newkeyver);
|
||||||
if (newkeytype == T_AES) {
|
if (newkeytype == T_AES) {
|
||||||
cdata[cdatalen] = newkeyver;
|
cdata[cdatalen] = newkeyver;
|
||||||
cdatalen++;
|
cdatalen++;
|
||||||
}
|
}
|
||||||
PrintAndLogEx(SUCCESS, "--cdata [%d]: %s", cdatalen, sprint_hex(cdata, cdatalen));
|
PrintAndLogEx(SUCCESS, "--cdata [%d]: %s", cdatalen, sprint_hex(cdata, cdatalen));
|
||||||
|
|
||||||
// add crc||crc_new_key
|
// add crc||crc_new_key
|
||||||
if (dctx->secureChannel == DACd40) {
|
if (dctx->secureChannel == DACd40) {
|
||||||
iso14443a_crc_append(cdata, cdatalen);
|
iso14443a_crc_append(cdata, cdatalen);
|
||||||
|
@ -1149,23 +1149,23 @@ PrintAndLogEx(SUCCESS, "--cdata [%d]: %s", cdatalen, sprint_hex(cdata, cdatalen)
|
||||||
cdatalen += 4;
|
cdatalen += 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PrintAndLogEx(SUCCESS, "--cdata [%d]: %s", cdatalen, sprint_hex(cdata, cdatalen));
|
PrintAndLogEx(SUCCESS, "--cdata [%d]: %s", cdatalen, sprint_hex(cdata, cdatalen));
|
||||||
|
|
||||||
// get padded data length
|
// get padded data length
|
||||||
size_t rlen = padded_data_length(cdatalen, desfire_get_key_block_length(newkeytype));
|
size_t rlen = padded_data_length(cdatalen, desfire_get_key_block_length(newkeytype));
|
||||||
|
|
||||||
// send command
|
// send command
|
||||||
uint8_t resp[257] = {0};
|
uint8_t resp[257] = {0};
|
||||||
size_t resplen = 0;
|
size_t resplen = 0;
|
||||||
PrintAndLogEx(SUCCESS, "--pckdata [%d]: %s", rlen + 1, sprint_hex(&pckcdata[1], rlen + 1));
|
PrintAndLogEx(SUCCESS, "--pckdata [%d]: %s", rlen + 1, sprint_hex(&pckcdata[1], rlen + 1));
|
||||||
int res = DesfireChangeKeyCmd(dctx, &pckcdata[1], rlen + 1, resp, &resplen);
|
int res = DesfireChangeKeyCmd(dctx, &pckcdata[1], rlen + 1, resp, &resplen);
|
||||||
|
|
||||||
// check response
|
// check response
|
||||||
|
|
||||||
// clear auth
|
// clear auth
|
||||||
if (newkeynum == dctx->keyNum)
|
if (newkeynum == dctx->keyNum)
|
||||||
DesfireClearSession(dctx);
|
DesfireClearSession(dctx);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -74,10 +74,10 @@ AllowedChannelModesS AllowedChannelModes[] = {
|
||||||
static uint8_t DesfireGetCmdHeaderLen(uint8_t cmd) {
|
static uint8_t DesfireGetCmdHeaderLen(uint8_t cmd) {
|
||||||
if (cmd == MFDES_CHANGE_KEY || cmd == MFDES_CHANGE_CONFIGURATION)
|
if (cmd == MFDES_CHANGE_KEY || cmd == MFDES_CHANGE_CONFIGURATION)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (cmd == MFDES_CHANGE_KEY_EV2)
|
if (cmd == MFDES_CHANGE_KEY_EV2)
|
||||||
return 2;
|
return 2;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,15 +165,15 @@ static void DesfireSecureChannelEncodeEV1(DesfireContext *ctx, uint8_t cmd, uint
|
||||||
if (srcdatalen == 0 || srcdatalen <= hdrlen)
|
if (srcdatalen == 0 || srcdatalen <= hdrlen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PrintAndLogEx(SUCCESS, "--ch hdrlen: %d, cmd: %02x", hdrlen, cmd);
|
PrintAndLogEx(SUCCESS, "--ch hdrlen: %d, cmd: %02x", hdrlen, cmd);
|
||||||
//dstdata[0] = cmd;
|
//dstdata[0] = cmd;
|
||||||
memcpy(&dstdata[0], srcdata, hdrlen);
|
memcpy(&dstdata[0], srcdata, hdrlen);
|
||||||
memcpy(data, &srcdata[hdrlen], srcdatalen);
|
memcpy(data, &srcdata[hdrlen], srcdatalen);
|
||||||
rlen = padded_data_length(srcdatalen - hdrlen, desfire_get_key_block_length(ctx->keyType));
|
rlen = padded_data_length(srcdatalen - hdrlen, desfire_get_key_block_length(ctx->keyType));
|
||||||
PrintAndLogEx(SUCCESS, "--ch src rlen: %d data: %s", rlen, sprint_hex(data, rlen));
|
PrintAndLogEx(SUCCESS, "--ch src rlen: %d data: %s", rlen, sprint_hex(data, rlen));
|
||||||
DesfireCryptoEncDec(ctx, true, data, rlen, &dstdata[hdrlen], true);
|
DesfireCryptoEncDec(ctx, true, data, rlen, &dstdata[hdrlen], true);
|
||||||
*dstdatalen = hdrlen + rlen;
|
*dstdatalen = hdrlen + rlen;
|
||||||
PrintAndLogEx(SUCCESS, "--ch dst len: %d data: %s", *dstdatalen, sprint_hex(dstdata, *dstdatalen));
|
PrintAndLogEx(SUCCESS, "--ch dst len: %d data: %s", *dstdatalen, sprint_hex(dstdata, *dstdatalen));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue