From fe53c0311c94943b162fcd12dc0974fb1b672ca0 Mon Sep 17 00:00:00 2001 From: penturalabs Date: Fri, 2 May 2014 23:30:03 +0100 Subject: [PATCH] improved calc_iclass_mac to work independant of size --- client/cmdhficlass.c | 2 +- client/loclass/cipher.c | 13 +++++++------ client/loclass/cipher.h | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/client/cmdhficlass.c b/client/cmdhficlass.c index 34e8f6d9..389fb5c1 100644 --- a/client/cmdhficlass.c +++ b/client/cmdhficlass.c @@ -308,7 +308,7 @@ int CmdHFiClassReader_Dump(const char *Cmd) hash0(crypted_id,div_key); //memcpy(div_key,result,8); PrintAndLog("Div Key: %s",sprint_hex(div_key,8)); - calc_iclass_mac(CCNR,div_key,MAC); + calc_iclass_mac(CCNR,12,div_key,MAC); UsbCommand c = {CMD_READER_ICLASS_REPLAY, {readerType}}; memcpy(c.d.asBytes, MAC, 4); diff --git a/client/loclass/cipher.c b/client/loclass/cipher.c index d7c9abda..aad77a2e 100644 --- a/client/loclass/cipher.c +++ b/client/loclass/cipher.c @@ -238,15 +238,16 @@ int testMAC() return 0; } -int calc_iclass_mac(uint8_t *cc_nr_p, uint8_t *div_key_p, uint8_t *mac) +int calc_iclass_mac(uint8_t *cc_nr_p, int length, uint8_t *div_key_p, uint8_t *mac) { - uint8_t cc_nr[12]; + uint8_t *cc_nr; uint8_t div_key[8]; - memcpy(cc_nr,cc_nr_p,12); + cc_nr=(uint8_t*)malloc(length+1); + memcpy(cc_nr,cc_nr_p,length); memcpy(div_key,div_key_p,8); - reverse_arraybytes(cc_nr,sizeof(cc_nr)); - BitstreamIn bitstream = {cc_nr,sizeof(cc_nr) * 8,0}; + reverse_arraybytes(cc_nr,length); + BitstreamIn bitstream = {cc_nr,length * 8,0}; uint8_t dest []= {0,0,0,0,0,0,0,0}; BitstreamOut out = { dest, sizeof(dest)*8, 0 }; MAC(div_key,bitstream, out); @@ -255,6 +256,6 @@ int calc_iclass_mac(uint8_t *cc_nr_p, uint8_t *div_key_p, uint8_t *mac) printf("Calculated_MAC\t%02x%02x%02x%02x\n", dest[0],dest[1],dest[2],dest[3]); memcpy(mac,dest,4); - + free(cc_nr); return 1; } \ No newline at end of file diff --git a/client/loclass/cipher.h b/client/loclass/cipher.h index 10ea8059..4af92b16 100644 --- a/client/loclass/cipher.h +++ b/client/loclass/cipher.h @@ -41,6 +41,6 @@ typedef struct { } State; void printarr(char * name, uint8_t* arr, int len); -int calc_iclass_mac(uint8_t *cc_nr_p, uint8_t *div_key_p, uint8_t *mac); +int calc_iclass_mac(uint8_t *cc_nr_p, int length, uint8_t *div_key_p, uint8_t *mac); #endif // CIPHER_H -- 2.39.2