mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-22 06:13:51 -07:00
fix ev2 auth. ev2/enc/nodata works
This commit is contained in:
parent
645985a1f9
commit
fc8e3e8851
1 changed files with 8 additions and 8 deletions
|
@ -1153,6 +1153,7 @@ static int DesfireAuthenticateEV2(DesfireContext *dctx, DesfireSecureChannel sec
|
|||
uint8_t RndA[CRYPTO_AES_BLOCK_SIZE] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16};
|
||||
uint8_t RndB[CRYPTO_AES_BLOCK_SIZE] = {0};
|
||||
uint8_t encRndB[CRYPTO_AES_BLOCK_SIZE] = {0};
|
||||
uint8_t rotRndA[CRYPTO_AES_BLOCK_SIZE] = {0}; //RndA'
|
||||
uint8_t rotRndB[CRYPTO_AES_BLOCK_SIZE] = {0}; //RndB'
|
||||
uint8_t both[CRYPTO_AES_BLOCK_SIZE * 2 + 1] = {0}; // ek/dk_keyNo(RndA+RndB')
|
||||
|
||||
|
@ -1201,8 +1202,6 @@ static int DesfireAuthenticateEV2(DesfireContext *dctx, DesfireSecureChannel sec
|
|||
memcpy(rotRndB, RndB, CRYPTO_AES_BLOCK_SIZE);
|
||||
rol(rotRndB, CRYPTO_AES_BLOCK_SIZE);
|
||||
|
||||
uint8_t encRndA[16] = {0x00};
|
||||
|
||||
// - Encrypt our response
|
||||
uint8_t tmp[32] = {0x00};
|
||||
memcpy(tmp, RndA, CRYPTO_AES_BLOCK_SIZE);
|
||||
|
@ -1232,20 +1231,21 @@ static int DesfireAuthenticateEV2(DesfireContext *dctx, DesfireSecureChannel sec
|
|||
}
|
||||
|
||||
// Part 4
|
||||
memcpy(encRndA, recv_data, CRYPTO_AES_BLOCK_SIZE);
|
||||
|
||||
uint8_t data[32] = {0};
|
||||
|
||||
if (aes_decode(IV, key, recv_data, data, recv_len))
|
||||
return 10;
|
||||
|
||||
rol(RndA, CRYPTO_AES_BLOCK_SIZE);
|
||||
// rotate rndA to check
|
||||
memcpy(rotRndA, RndA, CRYPTO_AES_BLOCK_SIZE);
|
||||
rol(rotRndA, CRYPTO_AES_BLOCK_SIZE);
|
||||
|
||||
uint8_t *recRndA = (firstauth) ? &data[4] : data;
|
||||
|
||||
if (memcmp(RndA, recRndA, CRYPTO_AES_BLOCK_SIZE) != 0) {
|
||||
if (memcmp(rotRndA, recRndA, CRYPTO_AES_BLOCK_SIZE) != 0) {
|
||||
if (g_debugMode > 1) {
|
||||
PrintAndLogEx(DEBUG, "Expected_RndA : %s", sprint_hex(RndA, CRYPTO_AES_BLOCK_SIZE));
|
||||
PrintAndLogEx(DEBUG, "Generated_RndA : %s", sprint_hex(recRndA, CRYPTO_AES_BLOCK_SIZE));
|
||||
PrintAndLogEx(DEBUG, "Expected_RndA' : %s", sprint_hex(rotRndA, CRYPTO_AES_BLOCK_SIZE));
|
||||
PrintAndLogEx(DEBUG, "Generated_RndA' : %s", sprint_hex(recRndA, CRYPTO_AES_BLOCK_SIZE));
|
||||
}
|
||||
return 11;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue