]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - armsrc/mifareutil.c
Use PolarSSL DES implementation (GPL 2 or later) for both client and firmware (#378)
[proxmark3-svn] / armsrc / mifareutil.c
index 6c84377858b9daa1f9d04835d9cb0b1f107b118b..fdead5eecef4def266d00ab0d3be890467dcf99a 100644 (file)
@@ -9,17 +9,17 @@
 // Work with mifare cards.\r
 //-----------------------------------------------------------------------------\r
 \r
+#include <string.h>\r
 #include "mifareutil.h"\r
 #include "proxmark3.h"\r
 #include "apps.h"\r
 #include "util.h"\r
 #include "parity.h"\r
-#include "string.h"\r
 \r
 #include "iso14443crc.h"\r
 #include "iso14443a.h"\r
 #include "crapto1/crapto1.h"\r
-#include "des.h"\r
+#include "polarssl/des.h"\r
 \r
 int MF_DBGLEVEL = MF_DBG_ALL;\r
 \r
@@ -290,6 +290,7 @@ int mifare_ultra_auth(uint8_t *keybytes){
 \r
        /// 3des2k\r
 \r
+       des3_context ctx = { 0x00 };\r
        uint8_t random_a[8] = {1,1,1,1,1,1,1,1};\r
        uint8_t random_b[8] = {0x00};\r
        uint8_t enc_random_b[8] = {0x00};\r
@@ -313,7 +314,16 @@ int mifare_ultra_auth(uint8_t *keybytes){
        memcpy(enc_random_b,resp+1,8);\r
 \r
        // decrypt nonce.\r
-       tdes_2key_dec(random_b, enc_random_b, sizeof(random_b), key, IV );\r
+       // tdes_2key_dec(random_b, enc_random_b, sizeof(random_b), key, IV );\r
+       des3_set2key_dec(&ctx, key);\r
+       des3_crypt_cbc(&ctx     // des3_context\r
+               , DES_DECRYPT           // int mode\r
+               , sizeof(random_b)      // length\r
+               , IV                    // iv[8]\r
+               , enc_random_b          // input\r
+               , random_b                      // output\r
+               );\r
+\r
        rol(random_b,8);\r
        memcpy(rnd_ab  ,random_a,8);\r
        memcpy(rnd_ab+8,random_b,8);\r
@@ -333,7 +343,16 @@ int mifare_ultra_auth(uint8_t *keybytes){
        }\r
 \r
        // encrypt    out, in, length, key, iv\r
-       tdes_2key_enc(rnd_ab, rnd_ab, sizeof(rnd_ab), key, enc_random_b);\r
+       //tdes_2key_enc(rnd_ab, rnd_ab, sizeof(rnd_ab), key, enc_random_b);\r
+       des3_set2key_enc(&ctx, key);\r
+       des3_crypt_cbc(&ctx     // des3_context\r
+               , DES_ENCRYPT           // int mode\r
+               , sizeof(rnd_ab)        // length\r
+               , enc_random_b          // iv[8]\r
+               , rnd_ab                        // input\r
+               , rnd_ab                        // output\r
+               );\r
+\r
        //len = mifare_sendcmd_short_mfucauth(NULL, 1, 0xAF, rnd_ab, resp, respPar, NULL);\r
        len = mifare_sendcmd(0xAF, rnd_ab, sizeof(rnd_ab), resp, respPar, NULL);\r
        if (len != 11) {\r
@@ -346,7 +365,15 @@ int mifare_ultra_auth(uint8_t *keybytes){
        memcpy(enc_resp, resp+1, 8);\r
 \r
        // decrypt    out, in, length, key, iv \r
-       tdes_2key_dec(resp_random_a, enc_resp, 8, key, enc_random_b);\r
+       // tdes_2key_dec(resp_random_a, enc_resp, 8, key, enc_random_b);\r
+       des3_set2key_dec(&ctx, key);\r
+       des3_crypt_cbc(&ctx     // des3_context\r
+               , DES_DECRYPT           // int mode\r
+               , 8                                     // length\r
+               , enc_random_b          // iv[8]\r
+               , enc_resp                      // input\r
+               , resp_random_a         // output\r
+               );\r
        if ( memcmp(resp_random_a, random_a, 8) != 0 ) {\r
                if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("failed authentication");\r
                return 0;\r
Impressum, Datenschutz