]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - armsrc/desfire_crypto.c
CHG: 'lf em4x' - the em4x50 demod didn't calc ASKDemod_ext with a refenence bool.
[proxmark3-svn] / armsrc / desfire_crypto.c
index 9ea07371f9d2fa84d5e13abfbbd304a2e84674e6..fdb0677118e49681e487159f8fde2ebd16aa7a3b 100644 (file)
@@ -27,9 +27,8 @@
  */
 #include "desfire_crypto.h"
 
  */
 #include "desfire_crypto.h"
 
-static void      xor (const uint8_t *ivect, uint8_t *data, const size_t len);
-
-static size_t    key_macing_length (desfirekey_t key);
+static void xor (const uint8_t *ivect, uint8_t *data, const size_t len);
+static size_t key_macing_length (desfirekey_t key);
 
 static void xor (const uint8_t *ivect, uint8_t *data, const size_t len) {
     for (size_t i = 0; i < len; i++) {
 
 static void xor (const uint8_t *ivect, uint8_t *data, const size_t len) {
     for (size_t i = 0; i < len; i++) {
@@ -85,11 +84,11 @@ void cmac (const desfirekey_t key, uint8_t *ivect, const uint8_t *data, size_t l
     mifare_cypher_blocks_chained (NULL, key, ivect, buffer, len, MCD_SEND, MCO_ENCYPHER);
 
     memcpy (cmac, ivect, kbs);
     mifare_cypher_blocks_chained (NULL, key, ivect, buffer, len, MCD_SEND, MCO_ENCYPHER);
 
     memcpy (cmac, ivect, kbs);
+       free(buffer);
 }
 
 size_t key_block_size (const desfirekey_t key) {
     size_t block_size = 8;
 }
 
 size_t key_block_size (const desfirekey_t key) {
     size_t block_size = 8;
-
     switch (key->type) {
                case T_DES:
                case T_3DES:
     switch (key->type) {
                case T_DES:
                case T_3DES:
@@ -100,7 +99,6 @@ size_t key_block_size (const desfirekey_t key) {
                        block_size = 16;
                        break;
     }
                        block_size = 16;
                        break;
     }
-
     return block_size;
 }
 
     return block_size;
 }
 
@@ -109,7 +107,6 @@ size_t key_block_size (const desfirekey_t key) {
  */
 static size_t key_macing_length (const desfirekey_t key) {
     size_t mac_length = MAC_LENGTH;
  */
 static size_t key_macing_length (const desfirekey_t key) {
     size_t mac_length = MAC_LENGTH;
-
     switch (key->type) {
     case T_DES:
     case T_3DES:
     switch (key->type) {
     case T_DES:
     case T_3DES:
@@ -120,7 +117,6 @@ static size_t key_macing_length (const desfirekey_t key) {
         mac_length = CMAC_LENGTH;
         break;
     }
         mac_length = CMAC_LENGTH;
         break;
     }
-
     return mac_length;
 }
 
     return mac_length;
 }
 
@@ -161,7 +157,7 @@ size_t enciphered_data_length (const desfiretag_t tag, const size_t nbytes, int
     return padded_data_length (nbytes + crc_length, block_size);
 }
 
     return padded_data_length (nbytes + crc_length, block_size);
 }
 
-void* mifare_cryto_preprocess_data (desfiretag_t tag, void *data, size_t *nbytes, off_t offset, int communication_settings) {
+void* mifare_cryto_preprocess_data (desfiretag_t tag, void *data, size_t *nbytes, size_t offset, int communication_settings) {
     uint8_t *res = data;
     uint8_t mac[4];
     size_t edl;
     uint8_t *res = data;
     uint8_t mac[4];
     size_t edl;
@@ -226,8 +222,8 @@ void* mifare_cryto_preprocess_data (desfiretag_t tag, void *data, size_t *nbytes
             cmac (key, DESFIRE (tag)->ivect, res, *nbytes, DESFIRE (tag)->cmac);
 
             if (append_mac) {
             cmac (key, DESFIRE (tag)->ivect, res, *nbytes, DESFIRE (tag)->cmac);
 
             if (append_mac) {
-                maced_data_length (key, *nbytes);
-
+                size_t len = maced_data_length (key, *nbytes);
+                               ++len;
                 memcpy (res, data, *nbytes);
                 memcpy (res + *nbytes, DESFIRE (tag)->cmac, CMAC_LENGTH);
                 *nbytes += CMAC_LENGTH;
                 memcpy (res, data, *nbytes);
                 memcpy (res + *nbytes, DESFIRE (tag)->cmac, CMAC_LENGTH);
                 *nbytes += CMAC_LENGTH;
@@ -289,7 +285,7 @@ void* mifare_cryto_preprocess_data (desfiretag_t tag, void *data, size_t *nbytes
 
 }
 
 
 }
 
-void* mifare_cryto_postprocess_data (desfiretag_t tag, void *data, ssize_t *nbytes, int communication_settings)
+void* mifare_cryto_postprocess_data (desfiretag_t tag, void *data, size_t *nbytes, int communication_settings)
 {
     void *res = data;
     size_t edl;
 {
     void *res = data;
     size_t edl;
@@ -459,7 +455,7 @@ void* mifare_cryto_postprocess_data (desfiretag_t tag, void *data, ssize_t *nbyt
                 break;
             case AS_NEW:
                 end_crc_pos = crc_pos + 4;
                 break;
             case AS_NEW:
                 end_crc_pos = crc_pos + 4;
-                crc32 (res, end_crc_pos, (uint8_t *)&crc);
+                crc32_ex (res, end_crc_pos, (uint8_t *)&crc);
                 break;
             }
             if (!crc) {
                 break;
             }
             if (!crc) {
@@ -580,7 +576,7 @@ void mifare_cypher_single_block (desfirekey_t key, uint8_t *data, uint8_t *ivect
                        {
                                AesCtx ctx;
                                AesCtxIni(&ctx, ivect, key->data, KEY128,CBC); 
                        {
                                AesCtx ctx;
                                AesCtxIni(&ctx, ivect, key->data, KEY128,CBC); 
-                               AesEncrypt(&ctx, data, edata, sizeof(data) );
+                               AesEncrypt(&ctx, data, edata, sizeof(edata) );
                                break;
                        }
                        case MCO_DECYPHER:
                                break;
                        }
                        case MCO_DECYPHER:
Impressum, Datenschutz