mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-20 21:33:47 -07:00
Add 2k3 des iso support preparation
This commit is contained in:
parent
37aa19ad6c
commit
6afc8d39a4
1 changed files with 17 additions and 6 deletions
|
@ -213,8 +213,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;
|
||||||
|
|
||||||
void MifareDES_Auth1(uint8_t *datain) {
|
void MifareDES_Auth1(uint8_t *datain) {
|
||||||
|
@ -275,7 +276,7 @@ void MifareDES_Auth1(uint8_t *datain) {
|
||||||
if (payload->key == NULL) {
|
if (payload->key == NULL) {
|
||||||
if (payload->algo == MFDES_AUTH_DES) {
|
if (payload->algo == MFDES_AUTH_DES) {
|
||||||
memcpy(keybytes, PICC_MASTER_KEY8, 8);
|
memcpy(keybytes, PICC_MASTER_KEY8, 8);
|
||||||
} else if (payload->algo == MFDES_ALGO_AES || payload->algo == MFDES_ALGO_3DES) {
|
} else if (payload->algo == MFDES_ALGO_AES || payload->algo == MFDES_ALGO_3DES || payload->algo == MFDES_ALGO_2K3DES) {
|
||||||
memcpy(keybytes, PICC_MASTER_KEY16, 16);
|
memcpy(keybytes, PICC_MASTER_KEY16, 16);
|
||||||
} else if (payload->algo == MFDES_ALGO_3DES) {
|
} else if (payload->algo == MFDES_ALGO_3DES) {
|
||||||
memcpy(keybytes, PICC_MASTER_KEY24, 24);
|
memcpy(keybytes, PICC_MASTER_KEY24, 24);
|
||||||
|
@ -291,11 +292,11 @@ void MifareDES_Auth1(uint8_t *datain) {
|
||||||
mbedtls_aes_init(&ctx);
|
mbedtls_aes_init(&ctx);
|
||||||
Desfire_aes_key_new(keybytes, key);
|
Desfire_aes_key_new(keybytes, key);
|
||||||
} else if (payload->algo == MFDES_ALGO_3DES) {
|
} else if (payload->algo == MFDES_ALGO_3DES) {
|
||||||
key->type = T_3DES;
|
|
||||||
Desfire_3des_key_new_with_version(keybytes, key);
|
Desfire_3des_key_new_with_version(keybytes, key);
|
||||||
} else if (payload->algo == MFDES_ALGO_DES) {
|
} else if (payload->algo == MFDES_ALGO_DES) {
|
||||||
key->type = T_DES;
|
|
||||||
Desfire_des_key_new(keybytes, key);
|
Desfire_des_key_new(keybytes, key);
|
||||||
|
} else if (payload->algo == MFDES_ALGO_2K3DES) {
|
||||||
|
Desfire_2k3des_key_new_with_version(keybytes, key);
|
||||||
} else if (payload->algo == MFDES_ALGO_3K3DES) {
|
} else if (payload->algo == MFDES_ALGO_3K3DES) {
|
||||||
Desfire_3k3des_key_new_with_version(keybytes, key);
|
Desfire_3k3des_key_new_with_version(keybytes, key);
|
||||||
}
|
}
|
||||||
|
@ -372,6 +373,8 @@ void MifareDES_Auth1(uint8_t *datain) {
|
||||||
tdes_dec(&RndB, &encRndB, key->data);
|
tdes_dec(&RndB, &encRndB, key->data);
|
||||||
else if (payload->algo == MFDES_ALGO_DES)
|
else if (payload->algo == MFDES_ALGO_DES)
|
||||||
des_dec(&RndB, &encRndB, key->data);
|
des_dec(&RndB, &encRndB, key->data);
|
||||||
|
else if (payload->algo == MFDES_ALGO_2K3DES)
|
||||||
|
tdes_2key_dec(&RndB, &encRndB, 8, key->data, IV);
|
||||||
else if (payload->algo == MFDES_ALGO_3K3DES)
|
else if (payload->algo == MFDES_ALGO_3K3DES)
|
||||||
tdes_3key_dec(&RndB, &encRndB, 16, key->data, IV);
|
tdes_3key_dec(&RndB, &encRndB, 16, key->data, IV);
|
||||||
|
|
||||||
|
@ -389,6 +392,9 @@ void MifareDES_Auth1(uint8_t *datain) {
|
||||||
} else if (payload->algo == MFDES_ALGO_DES) {
|
} else if (payload->algo == MFDES_ALGO_DES) {
|
||||||
des_dec(&encRndA, &RndA, key->data);
|
des_dec(&encRndA, &RndA, key->data);
|
||||||
memcpy(both, encRndA, 8);
|
memcpy(both, encRndA, 8);
|
||||||
|
} else if (payload->algo == MFDES_ALGO_2K3DES) {
|
||||||
|
tdes_2key_dec(&encRndA, &RndA, 8, key->data, IV);
|
||||||
|
memcpy(both, encRndA, 8);
|
||||||
} else if (payload->algo == MFDES_ALGO_3K3DES) {
|
} else if (payload->algo == MFDES_ALGO_3K3DES) {
|
||||||
tdes_3key_dec(&encRndA, &RndA, 16, key->data, IV);
|
tdes_3key_dec(&encRndA, &RndA, 16, key->data, IV);
|
||||||
memcpy(both, encRndA, 16);
|
memcpy(both, encRndA, 16);
|
||||||
|
@ -405,6 +411,9 @@ void MifareDES_Auth1(uint8_t *datain) {
|
||||||
} else if (payload->algo == MFDES_ALGO_DES) {
|
} else if (payload->algo == MFDES_ALGO_DES) {
|
||||||
des_dec(&encRndB, &rotRndB, key->data);
|
des_dec(&encRndB, &rotRndB, key->data);
|
||||||
memcpy(both + 8, encRndB, 8);
|
memcpy(both + 8, encRndB, 8);
|
||||||
|
} else if (payload->algo == MFDES_ALGO_2K3DES) {
|
||||||
|
tdes_2key_dec(&encRndB, &rotRndB, 8, key->data, IV);
|
||||||
|
memcpy(both + 8, encRndB, 8);
|
||||||
} else if (payload->algo == MFDES_ALGO_3K3DES) {
|
} else if (payload->algo == MFDES_ALGO_3K3DES) {
|
||||||
tdes_3key_dec(&encRndB, &rotRndB, 16, key->data, IV);
|
tdes_3key_dec(&encRndB, &rotRndB, 16, key->data, IV);
|
||||||
memcpy(both + 16, encRndB, 16);
|
memcpy(both + 16, encRndB, 16);
|
||||||
|
@ -485,6 +494,8 @@ void MifareDES_Auth1(uint8_t *datain) {
|
||||||
tdes_dec(&encRndA, &encRndA, key->data);
|
tdes_dec(&encRndA, &encRndA, key->data);
|
||||||
else if (payload->algo == MFDES_ALGO_DES)
|
else if (payload->algo == MFDES_ALGO_DES)
|
||||||
des_dec(&encRndA, &encRndA, key->data);
|
des_dec(&encRndA, &encRndA, key->data);
|
||||||
|
else if (payload->algo == MFDES_ALGO_2K3DES)
|
||||||
|
tdes_2key_dec(&encRndA, &encRndA, 8, key->data, IV);
|
||||||
else if (payload->algo == MFDES_ALGO_3K3DES)
|
else if (payload->algo == MFDES_ALGO_3K3DES)
|
||||||
tdes_3key_dec(&encRndA, &encRndA, 16, key->data, IV);
|
tdes_3key_dec(&encRndA, &encRndA, 16, key->data, IV);
|
||||||
} else if (payload->mode == MFDES_AUTH_AES) {
|
} else if (payload->mode == MFDES_AUTH_AES) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue