Reply To: I cant change key

Forum MIFARE SmartCard IC`s MIFARE DESFire I cant change key Reply To: I cant change key

Re: I cant change key

12. January 2016 at 9:38
bool MifareDesfire_ChangeMasterKey(uint8_t *OldKey,uint8_t *NewKey)
{
uint8_t NewKeyBuffer[24];
uint8_t SessionKey[8];
uint16_t crc;
MifareDesFire_Authenicate(0,DesfireAppID000,OldKey,SessionKey);

pn532_packetbuffer[0] = PN532_COMMAND_INDATAEXCHANGE;
pn532_packetbuffer[1] = 1; // max 1 cards at once (we can set this to 2 later)
pn532_packetbuffer[2] = MIFARE_DESFIRE_CMD_CHANGEKEY;
pn532_packetbuffer[3] = 0;

for(uint8_t i=0; i<8 ; i++)
NewKeyBuffer = OldKey ^ NewKey;
for(uint8_t i=8; i> 8;

crc = GetCrc(NewKey,8,0xCC69,0xffff);

NewKeyBuffer[18] = crc&0x00ff;
NewKeyBuffer[19] = (crc&0xff00) >> 8;

for(uint8_t i=20; i<24 ; i++)
NewKeyBuffer = 0;

desInit(&myDes,OldKey,8);
desDecryptBlock(&myDes,&NewKeyBuffer[0],&NewKeyBuffer[0]);
desDecryptBlock(&myDes,&NewKeyBuffer[8],&NewKeyBuffer[8]);
desDecryptBlock(&myDes,&NewKeyBuffer[16],&NewKeyBuffer[16]);

for(uint8_t i=0; i<24; i++)
pn532_packetbuffer = NewKeyBuffer;
if (!PN532_sendCommandCheckAck(pn532_packetbuffer, 28, 500))
{
#ifdef MIFARE_DEBUGMODE
printf("PICC Can Not Change Pin\n\r");
#endif
return false;

}

if (!PN532_waitready(500))
{
#ifdef MIFARE_DEBUGMODE
printf("PICC Can Not Change Pin\n\r");
#endif
return false;
}
PN532_readdata(pn532_packetbuffer, 0);
if(pn532_packetbuffer[7] != 0)
{
#ifdef MIFARE_DEBUGMODE
printf("PICC Can Not Change Pin\n\r");
#endif
return false;
}
if(pn532_packetbuffer[8] != 0)
{
#ifdef MIFARE_DEBUGMODE
printf("PICC Can Not Change Pin\n\r");
#endif
return false;
}


#ifdef MIFARE_DEBUGMODE
printf("PICC Pin Changed\n\r");
#endif

return true;
}
+ 0  |  - 0