mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-19 21:03:48 -07:00
Add 2k3 des iso support preparation
This commit is contained in:
parent
4c2f98ac3d
commit
37aa19ad6c
4 changed files with 47 additions and 19 deletions
|
@ -61,7 +61,8 @@ enum DESFIRE_CRYPTOALGO {
|
||||||
T_DES = 0x00,
|
T_DES = 0x00,
|
||||||
T_3DES = 0x01,
|
T_3DES = 0x01,
|
||||||
T_3K3DES = 0x02,
|
T_3K3DES = 0x02,
|
||||||
T_AES = 0x03
|
T_AES = 0x03,
|
||||||
|
T_2K3DES = 0x04
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,14 @@ void Desfire_3k3des_key_new(const uint8_t value[24], desfirekey_t key) {
|
||||||
Desfire_3k3des_key_new_with_version(data, key);
|
Desfire_3k3des_key_new_with_version(data, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Desfire_2k3des_key_new_with_version(const uint8_t value[16], desfirekey_t key) {
|
||||||
|
if (key != NULL) {
|
||||||
|
key->type = T_2K3DES;
|
||||||
|
memcpy(key->data, value, 16);
|
||||||
|
update_key_schedules(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Desfire_3k3des_key_new_with_version(const uint8_t value[24], desfirekey_t key) {
|
void Desfire_3k3des_key_new_with_version(const uint8_t value[24], desfirekey_t key) {
|
||||||
if (key != NULL) {
|
if (key != NULL) {
|
||||||
key->type = T_3K3DES;
|
key->type = T_3K3DES;
|
||||||
|
@ -136,6 +144,13 @@ void Desfire_session_key_new(const uint8_t rnda[], const uint8_t rndb[], desfire
|
||||||
memcpy(buffer + 12, rndb + 4, 4);
|
memcpy(buffer + 12, rndb + 4, 4);
|
||||||
Desfire_3des_key_new_with_version(buffer, key);
|
Desfire_3des_key_new_with_version(buffer, key);
|
||||||
break;
|
break;
|
||||||
|
case T_2K3DES:
|
||||||
|
memcpy(buffer, rnda, 4);
|
||||||
|
memcpy(buffer + 4, rndb, 4);
|
||||||
|
memcpy(buffer + 8, rnda + 4, 4);
|
||||||
|
memcpy(buffer + 12, rndb + 4, 4);
|
||||||
|
Desfire_3des_key_new_with_version(buffer, key);
|
||||||
|
break;
|
||||||
case T_3K3DES:
|
case T_3K3DES:
|
||||||
memcpy(buffer, rnda, 4);
|
memcpy(buffer, rnda, 4);
|
||||||
memcpy(buffer + 4, rndb, 4);
|
memcpy(buffer + 4, rndb, 4);
|
||||||
|
|
|
@ -9,6 +9,7 @@ void Desfire_des_key_new_with_version(const uint8_t value[8], desfirekey_t key);
|
||||||
void Desfire_3des_key_new_with_version(const uint8_t value[16], desfirekey_t key);
|
void Desfire_3des_key_new_with_version(const uint8_t value[16], desfirekey_t key);
|
||||||
void Desfire_3k3des_key_new(const uint8_t value[24], desfirekey_t key);
|
void Desfire_3k3des_key_new(const uint8_t value[24], desfirekey_t key);
|
||||||
void Desfire_3k3des_key_new_with_version(const uint8_t value[24], desfirekey_t key);
|
void Desfire_3k3des_key_new_with_version(const uint8_t value[24], desfirekey_t key);
|
||||||
|
void Desfire_2k3des_key_new_with_version(const uint8_t value[16], desfirekey_t key);
|
||||||
void Desfire_aes_key_new(const uint8_t value[16], desfirekey_t key);
|
void Desfire_aes_key_new(const uint8_t value[16], desfirekey_t key);
|
||||||
void Desfire_aes_key_new_with_version(const uint8_t value[16], uint8_t version, desfirekey_t key);
|
void Desfire_aes_key_new_with_version(const uint8_t value[16], uint8_t version, desfirekey_t key);
|
||||||
uint8_t Desfire_key_get_version(desfirekey_t key);
|
uint8_t Desfire_key_get_version(desfirekey_t key);
|
||||||
|
|
|
@ -46,8 +46,9 @@ typedef enum {
|
||||||
typedef enum {
|
typedef enum {
|
||||||
MFDES_ALGO_DES = 1,
|
MFDES_ALGO_DES = 1,
|
||||||
MFDES_ALGO_3DES = 2,
|
MFDES_ALGO_3DES = 2,
|
||||||
MFDES_ALGO_3K3DES = 3,
|
MFDES_ALGO_2K3DES = 3,
|
||||||
MFDES_ALGO_AES = 4
|
MFDES_ALGO_3K3DES = 4,
|
||||||
|
MFDES_ALGO_AES = 5
|
||||||
} mifare_des_authalgo_t;
|
} mifare_des_authalgo_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -1485,14 +1486,14 @@ static int CmdHF14ADesAuth(const char *Cmd) {
|
||||||
|
|
||||||
CLIParserInit("hf mfdes auth",
|
CLIParserInit("hf mfdes auth",
|
||||||
"Authenticates Mifare DESFire using Key",
|
"Authenticates Mifare DESFire using Key",
|
||||||
"Usage:\n\t-m Auth type (1=normal, 2=iso, 3=aes)\n\t-t Crypt algo (1=DES, 2=3DES, 3=3K3DES, 4=aes)\n\t-a aid (3 bytes)\n\t-n keyno\n\t-k key (8-24 bytes)\n\n"
|
"Usage:\n\t-m Auth type (1=normal, 2=iso, 3=aes)\n\t-t Crypt algo (1=DES, 2=3DES, 3=2K3DES, 4=3K3DES, 5=AES)\n\t-a aid (3 bytes)\n\t-n keyno\n\t-k key (8-24 bytes)\n\n"
|
||||||
"Example:\n\thf mfdes auth -m 3 -t 4 -a 018380 -n 0 -k 404142434445464748494a4b4c4d4e4f\n"
|
"Example:\n\thf mfdes auth -m 3 -t 5 -a 018380 -n 0 -k 00000000000000000000000000000000\n"
|
||||||
);
|
);
|
||||||
|
|
||||||
void *argtable[] = {
|
void *argtable[] = {
|
||||||
arg_param_begin,
|
arg_param_begin,
|
||||||
arg_int0("mM", "type", "Auth type (1=normal, 2=iso, 3=aes, 4=picc)", NULL),
|
arg_int0("mM", "type", "Auth type (1=normal, 2=iso, 3=aes, 4=picc)", NULL),
|
||||||
arg_int0("tT", "algo", "Crypt algo (1=DES, 2=3DES, 3=3K3DES, 4=aes)", NULL),
|
arg_int0("tT", "algo", "Crypt algo (1=DES, 2=3DES, 3=2K3DES, 4=3K3DES, 5=AES)", NULL),
|
||||||
arg_strx0("aA", "aid", "<aid>", "AID used for authentification (HEX 3 bytes)"),
|
arg_strx0("aA", "aid", "<aid>", "AID used for authentification (HEX 3 bytes)"),
|
||||||
arg_int0("nN", "keyno", "Key number used for authentification", NULL),
|
arg_int0("nN", "keyno", "Key number used for authentification", NULL),
|
||||||
arg_str0("kK", "key", "<Key>", "Key for checking (HEX 16 bytes)"),
|
arg_str0("kK", "key", "<Key>", "Key for checking (HEX 16 bytes)"),
|
||||||
|
@ -1526,21 +1527,27 @@ static int CmdHF14ADesAuth(const char *Cmd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (cmdAuthMode) {
|
switch (cmdAuthMode) {
|
||||||
case 1:
|
case MFDES_AUTH_DES:
|
||||||
if (cmdAuthAlgo != 1 && cmdAuthAlgo != 2) {
|
if (cmdAuthAlgo != MFDES_ALGO_DES && cmdAuthAlgo != MFDES_ALGO_3DES) {
|
||||||
PrintAndLogEx(NORMAL, "Crypto algo not valid for the auth mode");
|
PrintAndLogEx(NORMAL, "Crypto algo not valid for the auth des mode");
|
||||||
return PM3_SNONCES;
|
return PM3_SNONCES;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case MFDES_AUTH_ISO:
|
||||||
if (cmdAuthAlgo != 1 && cmdAuthAlgo != 2 && cmdAuthAlgo != 3) {
|
if (cmdAuthAlgo != MFDES_ALGO_2K3DES && cmdAuthAlgo != MFDES_ALGO_3K3DES) {
|
||||||
PrintAndLogEx(NORMAL, "Crypto algo not valid for the auth mode");
|
PrintAndLogEx(NORMAL, "Crypto algo not valid for the auth iso mode");
|
||||||
return PM3_SNONCES;
|
return PM3_SNONCES;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case MFDES_AUTH_AES:
|
||||||
if (cmdAuthAlgo != 4) {
|
if (cmdAuthAlgo != MFDES_ALGO_AES) {
|
||||||
PrintAndLogEx(NORMAL, "Crypto algo not valid for the auth mode");
|
PrintAndLogEx(NORMAL, "Crypto algo not valid for the auth aes mode");
|
||||||
|
return PM3_SNONCES;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MFDES_AUTH_PICC:
|
||||||
|
if (cmdAuthAlgo != MFDES_AUTH_DES) {
|
||||||
|
PrintAndLogEx(NORMAL, "Crypto algo not valid for the auth picc mode");
|
||||||
return PM3_SNONCES;
|
return PM3_SNONCES;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1550,20 +1557,24 @@ static int CmdHF14ADesAuth(const char *Cmd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (cmdAuthAlgo) {
|
switch (cmdAuthAlgo) {
|
||||||
case 2:
|
case MFDES_ALGO_2K3DES:
|
||||||
|
keylength = 16;
|
||||||
|
PrintAndLogEx(NORMAL, "2 key 3DES selected");
|
||||||
|
break;
|
||||||
|
case MFDES_ALGO_3DES:
|
||||||
keylength = 16;
|
keylength = 16;
|
||||||
PrintAndLogEx(NORMAL, "3DES selected");
|
PrintAndLogEx(NORMAL, "3DES selected");
|
||||||
break;
|
break;
|
||||||
case 3:
|
case MFDES_ALGO_3K3DES:
|
||||||
keylength = 24;
|
keylength = 24;
|
||||||
PrintAndLogEx(NORMAL, "3 key 3DES selected");
|
PrintAndLogEx(NORMAL, "3 key 3DES selected");
|
||||||
break;
|
break;
|
||||||
case 4:
|
case MFDES_ALGO_AES:
|
||||||
keylength = 16;
|
keylength = 16;
|
||||||
PrintAndLogEx(NORMAL, "AES selected");
|
PrintAndLogEx(NORMAL, "AES selected");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
cmdAuthAlgo = 1;
|
cmdAuthAlgo = MFDES_ALGO_DES;
|
||||||
keylength = 8;
|
keylength = 8;
|
||||||
PrintAndLogEx(NORMAL, "DES selected");
|
PrintAndLogEx(NORMAL, "DES selected");
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue