]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - armsrc/mifareutil.c
ADD: Midnitesnaks's & Pentura labs Ultralight-c modifications in ARMSRC.
[proxmark3-svn] / armsrc / mifareutil.c
index 976f6dca7651ca54436b45b6b8df11b2a5b01c42..2b3a5fcf244c87cb71653ace1bac86c5ad94b10b 100644 (file)
@@ -93,10 +93,30 @@ int mifare_sendcmd_short_special(struct Crypto1State *pcs, uint8_t crypted, uint
        AppendCrc14443a(dcmd, 6);
        ReaderTransmit(dcmd, sizeof(dcmd), NULL);
        int len = ReaderReceive(answer, answer_parity);
-       if(!len)
-       {
+       if(!len) {
                 if (MF_DBGLEVEL >= 1)   Dbprintf("Authentication failed. Card timeout.");
                 return 2;
+    }\r
+       return len;\r
+}\r
+\r
+int mifare_sendcmd_short_mfucauth(struct Crypto1State *pcs, uint8_t crypted, uint8_t cmd, uint8_t *data, uint8_t *answer, uint8_t *answer_parity, uint32_t *timing)\r
+{\r
+    uint8_t dcmd[19];\r
+       int len; \r
+    dcmd[0] = cmd;\r
+    memcpy(dcmd+1,data,16);\r
+       AppendCrc14443a(dcmd, 17);\r
+       \r
+       ReaderTransmit(dcmd, sizeof(dcmd), timing);\r
+       len = ReaderReceive(answer, answer_parity);\r
+       if(!len) {\r
+        if (MF_DBGLEVEL >= MF_DBG_ERROR)   Dbprintf("Authentication failed. Card timeout.");\r
+        len = ReaderReceive(answer,answer_parity);\r
+    }\r
+    if(len==1) {\r
+               if (MF_DBGLEVEL >= MF_DBG_ERROR)   Dbprintf("NAK - Authentication failed.");\r
+               return 1;\r
         }
        return len;
 }
@@ -278,6 +298,57 @@ int mifare_classic_readblock(struct Crypto1State *pcs, uint32_t uid, uint8_t blo
        return 0;
 }
 
+// mifare ultralight commands\r
+int mifare_ultra_auth1(uint32_t uid, uint8_t *blockData){\r
+\r
+       uint16_t len;\r
+       uint8_t *receivedAnswer = get_bigbufptr_recvrespbuf();\r
+       uint8_t *receivedAnswerPar = receivedAnswer + MAX_FRAME_SIZE;\r
+       \r
+       len = mifare_sendcmd_short(NULL, 1, 0x1A, 0x00, receivedAnswer,receivedAnswerPar ,NULL);\r
+       if (len == 1) {\r
+               if (MF_DBGLEVEL >= MF_DBG_ERROR)\r
+                       Dbprintf("Cmd Error: %02x", receivedAnswer[0]);\r
+               return 1;\r
+       }\r
+       if (len != 11)\r
+               return 1;\r
+\r
+       if (MF_DBGLEVEL >= MF_DBG_EXTENDED) {\r
+               Dbprintf("Auth1 Resp: %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",\r
+                       receivedAnswer[0],receivedAnswer[1],receivedAnswer[2],receivedAnswer[3],receivedAnswer[4],\r
+                       receivedAnswer[5],receivedAnswer[6],receivedAnswer[7],receivedAnswer[8],receivedAnswer[9],\r
+                       receivedAnswer[10]);\r
+               }\r
+       memcpy(blockData, receivedAnswer, 11);\r
+       return 0;\r
+}\r
+\r
+int mifare_ultra_auth2(uint32_t uid, uint8_t *key, uint8_t *blockData){\r
+\r
+       uint16_t len;\r
+       uint8_t *receivedAnswer = get_bigbufptr_recvrespbuf();\r
+       uint8_t *receivedAnswerPar = receivedAnswer + MAX_FRAME_SIZE;\r
+       \r
+       len = mifare_sendcmd_short_mfucauth(NULL, 1, 0xAF, key, receivedAnswer, receivedAnswerPar, NULL);\r
+       if (len == 1) {\r
+               if (MF_DBGLEVEL >= MF_DBG_ERROR)\r
+                       Dbprintf("Cmd Error: %02x", receivedAnswer[0]);\r
+               return 1;\r
+       }\r
+       if (len != 11)\r
+               return 1;       \r
+       \r
+       if (MF_DBGLEVEL >= MF_DBG_EXTENDED) {\r
+               Dbprintf("Auth2 Resp: %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",\r
+                       receivedAnswer[0],receivedAnswer[1],receivedAnswer[2],receivedAnswer[3],receivedAnswer[4],\r
+                       receivedAnswer[5],receivedAnswer[6],receivedAnswer[7],receivedAnswer[8],receivedAnswer[9],\r
+                       receivedAnswer[10]);\r
+       }\r
+       memcpy(blockData, receivedAnswer, 11);\r
+       return 0;\r
+}\r
+\r
 int mifare_ultra_readblock(uint32_t uid, uint8_t blockNo, uint8_t *blockData)
 {
        uint16_t len;
Impressum, Datenschutz