]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
Merge branch 'master' of https://github.com/iceman1001/ForPm3
authorMartin Holst Swende <martin@swende.se>
Thu, 15 Jan 2015 20:50:03 +0000 (21:50 +0100)
committerMartin Holst Swende <martin@swende.se>
Thu, 15 Jan 2015 20:50:03 +0000 (21:50 +0100)
Conflicts:
armsrc/appmain.c
armsrc/apps.h

1  2 
armsrc/appmain.c
armsrc/mifarecmd.c

diff --combined armsrc/appmain.c
index 530dc39cd04b4fa15603998bb069cb27e2fc9029,13995f591735333a8b897d3ab478418205b3ec78..88ade8511b544a561eb8dc5f724706d6ff8f4415
@@@ -18,7 -18,6 +18,7 @@@
  #include "util.h"
  #include "printf.h"
  #include "string.h"
 +
  #include <stdarg.h>
  
  #include "legicrf.h"
@@@ -668,9 -667,7 +668,9 @@@ void UsbPacketReceived(uint8_t *packet
                        WriteTItag(c->arg[0],c->arg[1],c->arg[2]);
                        break;
                case CMD_SIMULATE_TAG_125K:
 +                      LED_A_ON();
                        SimulateTagLowFrequency(c->arg[0], c->arg[1], 1);
 +                      LED_A_OFF();
                        break;
                case CMD_LF_SIMULATE_BIDIR:
                        SimulateTagLowFrequencyBidir(c->arg[0], c->arg[1]);
                case CMD_MIFAREU_READBL:
                        MifareUReadBlock(c->arg[0],c->d.asBytes);
                        break;
+               case CMD_MIFAREUC_AUTH1:
+                       MifareUC_Auth1(c->arg[0],c->d.asBytes);
+                       break;
+               case CMD_MIFAREUC_AUTH2:
+                       MifareUC_Auth2(c->arg[0],c->d.asBytes);
+                       break;
                case CMD_MIFAREU_READCARD:
-                       MifareUReadCard(c->arg[0], c->arg[1], c->d.asBytes);
+                       MifareUReadCard(c->arg[0],c->arg[1],c->d.asBytes);
+                         break;
+               case CMD_MIFAREUC_READCARD:
+                       MifareUReadCard(c->arg[0],c->arg[1],c->d.asBytes);
                          break;
                case CMD_MIFARE_READSC:
                        MifareReadSector(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
                case CMD_MIFARE_SNIFFER:
                        SniffMifare(c->arg[0]);
                        break;
  #endif
  
  #ifdef WITH_ICLASS
diff --combined armsrc/mifarecmd.c
index ecd8728db9c4b9dcf3168b3207665cd1bf676597,470af6a7a9edc9084ac3e5219be651ba76c61e0a..22926dcfaf399f15c605000865939eafccfb7e70
@@@ -17,6 -17,8 +17,8 @@@
  #include "apps.h"\r
  #include "util.h"\r
  \r
+ #include "crc.h"\r
\r
  //-----------------------------------------------------------------------------\r
  // Select, Authenticate, Read a MIFARE tag. \r
  // read block\r
@@@ -80,7 -82,71 +82,71 @@@ void MifareReadBlock(uint8_t arg0, uint
        cmd_send(CMD_ACK,isOK,0,0,dataoutbuf,16);\r
        LED_B_OFF();\r
  \r
-       // Thats it...\r
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);\r
+       LEDsoff();\r
+ }\r
\r
\r
+ void MifareUC_Auth1(uint8_t arg0, uint8_t *datain){\r
\r
+       byte_t isOK = 0;\r
+       byte_t dataoutbuf[16] = {0x00};\r
+       uint8_t uid[10] = {0x00};\r
+       uint32_t cuid;\r
\r
+       LED_A_ON();\r
+       LED_B_OFF();\r
+       LED_C_OFF();\r
+     \r
+       iso14a_clear_trace();\r
+       iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
\r
+       if(!iso14443a_select_card(uid, NULL, &cuid)) {\r
+               if (MF_DBGLEVEL >= MF_DBG_ERROR)\r
+                       Dbprintf("Can't select card");\r
+               OnError(0);\r
+               return;\r
+       };\r
+       \r
+       if(mifare_ultra_auth1(cuid, dataoutbuf)){\r
+               if (MF_DBGLEVEL >= MF_DBG_ERROR)        \r
+                       Dbprintf("Authentication part1: Fail.");\r
+               OnError(1);\r
+               return;\r
+       }\r
\r
+       isOK = 1;\r
+       if (MF_DBGLEVEL >= MF_DBG_EXTENDED)\r
+               DbpString("AUTH 1 FINISHED");\r
+     \r
+     cmd_send(CMD_ACK,isOK,cuid,0,dataoutbuf,11);\r
+       LEDsoff();\r
+ }\r
+ void MifareUC_Auth2(uint32_t arg0, uint8_t *datain){\r
\r
+       uint32_t cuid = arg0;\r
+       uint8_t key[16] = {0x00};\r
+       byte_t isOK = 0;\r
+       byte_t dataoutbuf[16] = {0x00};\r
+     \r
+       memcpy(key, datain, 16);\r
+     \r
+       LED_A_ON();\r
+       LED_B_OFF();\r
+       LED_C_OFF();\r
+       \r
+       if(mifare_ultra_auth2(cuid, key, dataoutbuf)){\r
+           if (MF_DBGLEVEL >= MF_DBG_ERROR) \r
+                       Dbprintf("Authentication part2: Fail...");\r
+               OnError(1);\r
+               return;                 \r
+       }\r
+       \r
+       isOK = 1;\r
+       if (MF_DBGLEVEL >= MF_DBG_EXTENDED)\r
+               DbpString("AUTH 2 FINISHED");\r
+     \r
+       cmd_send(CMD_ACK,isOK,0,0,dataoutbuf,11);\r
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);\r
        LEDsoff();\r
  }\r
@@@ -102,21 -168,21 +168,21 @@@ void MifareUReadBlock(uint8_t arg0,uint
        int len = iso14443a_select_card(uid, NULL, &cuid);\r
        if(!len) {\r
                if (MF_DBGLEVEL >= MF_DBG_ERROR)        Dbprintf("Can't select card");\r
 -              OnError(1);\r
 +              //OnError(1);\r
                return;\r
                };\r
          \r
        len = mifare_ultra_readblock(cuid, blockNo, dataout);\r
        if(len) {\r
                if (MF_DBGLEVEL >= MF_DBG_ERROR)        Dbprintf("Read block error");\r
 -              OnError(2);\r
 +              //OnError(2);\r
                return;\r
                };\r
          \r
        len = mifare_ultra_halt(cuid);\r
        if(len) {\r
                if (MF_DBGLEVEL >= MF_DBG_ERROR)        Dbprintf("Halt error");\r
 -              OnError(3);\r
 +              //OnError(3);\r
                return;\r
                };\r
                \r
@@@ -201,11 -267,11 +267,11 @@@ void MifareUReadCard(uint8_t arg0, int 
        int count_Pages = 0;\r
        byte_t dataout[176] = {0x00};;\r
        uint8_t uid[10] = {0x00};\r
 -        uint32_t cuid;\r
 +      uint32_t cuid;\r
  \r
 -        LED_A_ON();\r
 -        LED_B_OFF();\r
 -        LED_C_OFF();\r
 +      LED_A_ON();\r
 +      LED_B_OFF();\r
 +      LED_C_OFF();\r
  \r
        if (MF_DBGLEVEL >= MF_DBG_ALL) \r
                Dbprintf("Pages %d",Pages);\r
        if (!len) {\r
                if (MF_DBGLEVEL >= MF_DBG_ERROR)\r
                        Dbprintf("Can't select card");\r
 -              OnError(1);\r
 +              //OnError(1);\r
                return;\r
        }\r
        \r
                if (len) {\r
                        if (MF_DBGLEVEL >= MF_DBG_ERROR)\r
                                Dbprintf("Read block %d error",i);\r
 -                      OnError(2);\r
 +                      //OnError(2);\r
                        return;\r
                } else {\r
                        count_Pages++;\r
        if (len) {\r
                if (MF_DBGLEVEL >= MF_DBG_ERROR)\r
                        Dbprintf("Halt error");\r
 -              OnError(3);\r
 +              //OnError(3);\r
                return;\r
        }\r
        \r
                len = 176;\r
  \r
        cmd_send(CMD_ACK, 1, 0, 0, dataout, len);       \r
 -        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);\r
 -        LEDsoff();\r
 +      FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);\r
 +      LEDsoff();\r
  }\r
  \r
  \r
@@@ -1061,3 -1127,58 +1127,58 @@@ void MifareCIdent()
                        //\r
  // DESFIRE\r
  //\r
 -}
\r
+ void Mifare_DES_Auth1(uint8_t arg0, uint8_t *datain){\r
\r
+       byte_t dataout[11] = {0x00};\r
+       uint8_t uid[10] = {0x00};\r
+       uint32_t cuid;\r
+     \r
+       iso14a_clear_trace();\r
+       iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
\r
+       int len = iso14443a_select_card(uid, NULL, &cuid);\r
+       if(!len) {\r
+               if (MF_DBGLEVEL >= MF_DBG_ERROR)        \r
+                       Dbprintf("Can't select card");\r
+               OnError(1);\r
+               return;\r
+       };\r
\r
+       if(mifare_desfire_des_auth1(cuid, dataout)){\r
+               if (MF_DBGLEVEL >= MF_DBG_ERROR)        \r
+                       Dbprintf("Authentication part1: Fail.");\r
+               OnError(4);\r
+               return;\r
+       }\r
\r
+       if (MF_DBGLEVEL >= MF_DBG_EXTENDED) DbpString("AUTH 1 FINISHED");\r
+     \r
+     cmd_send(CMD_ACK,1,cuid,0,dataout, sizeof(dataout));\r
+ }\r
\r
+ void Mifare_DES_Auth2(uint32_t arg0, uint8_t *datain){\r
\r
+       uint32_t cuid = arg0;\r
+       uint8_t key[16] = {0x00};\r
+       byte_t isOK = 0;\r
+       byte_t dataout[12] = {0x00};\r
+     \r
+       memcpy(key, datain, 16);\r
+       \r
+       isOK = mifare_desfire_des_auth2(cuid, key, dataout);\r
+       \r
+       if( isOK) {\r
+           if (MF_DBGLEVEL >= MF_DBG_EXTENDED) \r
+                       Dbprintf("Authentication part2: Failed");  \r
+               OnError(4);\r
+               return;\r
+       }\r
\r
+       if (MF_DBGLEVEL >= MF_DBG_EXTENDED) \r
+               DbpString("AUTH 2 FINISHED");\r
\r
+       cmd_send(CMD_ACK, isOK, 0, 0, dataout, sizeof(dataout));\r
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);\r
+       LEDsoff();\r
++}
Impressum, Datenschutz