]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
improved calc_iclass_mac to work independant of size
authorpenturalabs <andy.davies@pentura.com>
Fri, 2 May 2014 22:30:03 +0000 (23:30 +0100)
committerpenturalabs <andy.davies@pentura.com>
Fri, 2 May 2014 22:30:03 +0000 (23:30 +0100)
client/cmdhficlass.c
client/loclass/cipher.c
client/loclass/cipher.h

index 34e8f6d9f89c0540208b524ab3b8764491f890c0..389fb5c1cbc8d9c01ba09a6ca15b453fe3368a8b 100644 (file)
@@ -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));
   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);
 
   UsbCommand c = {CMD_READER_ICLASS_REPLAY, {readerType}};
   memcpy(c.d.asBytes, MAC, 4);
index d7c9abdacc484c3ecc4911acf1b7a5ce5f10eddf..aad77a2e0f68aace3199655d8ad2df8333c8fe28 100644 (file)
@@ -238,15 +238,16 @@ int testMAC()
        return 0;
 }
 
        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];
     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);
     
     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);
        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);
        
        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
        return 1;
 }
\ No newline at end of file
index 10ea8059bde26f9fdfa1b2809e51a0cb1ed67a95..4af92b16589eb91ce3ba91e45cbac54905adb704 100644 (file)
@@ -41,6 +41,6 @@ typedef struct {
 } State;
 
 void printarr(char * name, uint8_t* arr, int len);
 } 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
 
 #endif // CIPHER_H
Impressum, Datenschutz