]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - armsrc/epa.c
Merge branch 'master' of https://github.com/Proxmark/proxmark3
[proxmark3-svn] / armsrc / epa.c
index a3c6669ed648374608c30fc000ac1a7fc2bcda30..9012bf11a8cb9713e0d5804eee142e86448fbb95 100644 (file)
@@ -15,6 +15,7 @@
 #include "epa.h"
 #include "../common/cmd.h"
 
+
 // Protocol and Parameter Selection Request
 // use regular (1x) speed in both directions
 // CRC is already included
@@ -108,9 +109,9 @@ size_t EPA_Parse_CardAccess(uint8_t *data,
                if (data[index] == 0x31 || data[index] == 0x30) {
                        // enter the set (skip tag + length)
                        index += 2;
-                       // extended length
+                       // check for extended length
                        if ((data[index - 1] & 0x80) != 0) {
-                               index += (data[index] & 0x7F);
+                               index += (data[index-1] & 0x7F);
                        }
                }
                // OID
@@ -258,10 +259,6 @@ void EPA_PACE_Collect_Nonce(UsbCommand *c)
                return;
        }
 
-       // increase the timeout (at least some cards really do need this!)
-       iso14a_set_timeout(0x0002FFFF);
-       Dbprintf("epa: Epic!");
-       
        // read the CardAccess file
        // this array will hold the CardAccess file
        uint8_t card_access[256] = {0};
@@ -423,89 +420,29 @@ int EPA_PACE_MSE_Set_AT(pace_version_info_t pace_version_info, uint8_t password)
 //-----------------------------------------------------------------------------
 int EPA_Setup()
 {
-       // return code
-       //int return_code = 0;
-       
-       // card UID
-       //uint8_t uid[10] = {0x00};
-       
+
+       int return_code = 0;
+       uint8_t uid[10];
+       uint8_t pps_response[3];
+       uint8_t pps_response_par[1];
+       iso14a_card_select_t card_select_info;
+
        // power up the field
        iso14443a_setup(FPGA_HF_ISO14443A_READER_MOD);
-       iso14a_clear_trace();
-       iso14a_set_tracing(TRUE);
-       iso14a_set_timeout(10500);
-       
-       // card select information
-       byte_t cardbuf[USB_CMD_DATA_SIZE];
-       memset(cardbuf,0,USB_CMD_DATA_SIZE);
-       iso14a_card_select_t *card = (iso14a_card_select_t*)cardbuf;
        
        // select the card
-       // if (!iso14443a_select_card(uid, &card_info, NULL)) {
-               // Dbprintf("Epa: Can't select card");
-               // return -1;
-       // }
-       
-       uint8_t wupa[]     = { 0x26 };  // 0x26 - REQA  0x52 - WAKE-UP
-       uint8_t sel_all[]  = { 0x93,0x20 };
-       uint8_t sel_uid[]  = { 0x93,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-       uint8_t rats[]       = { 0xE0,0x81,0x00,0x00 }; // FSD=256, FSDI=8, CID=1
-       
-       uint8_t *resp = ((uint8_t *)BigBuf) + RECV_RESP_OFFSET;
-       uint8_t *resp_par = ((uint8_t *)BigBuf) + RECV_RESP_PAR_OFFSET;
-       
-       byte_t uid_resp[4];
-       size_t uid_resp_len = 4;
-
-       uint8_t sak = 0x04; // cascade uid
-       int len;
-        
-       // Broadcast for a card, WUPA (0x52) will force response from all cards in the field
-    ReaderTransmitBitsPar(wupa,7,0, NULL);
-       
-       // Receive the ATQA
-       if(!ReaderReceive(resp, resp_par)) return -1;
-  
-    // SELECT_ALL
-    ReaderTransmit(sel_all,sizeof(sel_all), NULL);
-    if (!ReaderReceive(resp, resp_par)) return -1;
-       
-       // uid response from tag
-       memcpy(uid_resp,resp,uid_resp_len);
-
-       // Construct SELECT UID command
-       // transmitting a full UID (1 Byte cmd, 1 Byte NVB, 4 Byte UID, 1 Byte BCC, 2 Bytes CRC)
-    memcpy(sel_uid+2,uid_resp,4);                                                                              // the UID
-       sel_uid[6] = sel_uid[2] ^ sel_uid[3] ^ sel_uid[4] ^ sel_uid[5];         // calculate and add BCC
-    AppendCrc14443a(sel_uid,7);                                                                                        // calculate and add CRC
-    ReaderTransmit(sel_uid,sizeof(sel_uid), NULL);
-
-    // Receive the SAK
-    if (!ReaderReceive(resp, resp_par)) return -1;
-    sak = resp[0];
-       
-       // Request for answer to select
-       AppendCrc14443a(rats, 2);
-       ReaderTransmit(rats, sizeof(rats), NULL);
-
-       if ( !(len = ReaderReceive(resp, resp_par) )) return -1;
+       return_code = iso14443a_select_card(uid, &card_select_info, NULL);
+       if (return_code != 1) {
+               Dbprintf("Epa: Can't select card");
+               return 1;
+       }
 
-       // populate the collected data.
-    memcpy( card->uid, uid_resp, uid_resp_len);
-    card->uidlen += uid_resp_len;
-    card->sak = sak;
-    card->ats_len = len;
-    memcpy(card->ats, resp, sizeof(card->ats));
-       
-       
        // send the PPS request
-       // ReaderTransmit((uint8_t *)pps, sizeof(pps), NULL);
-       // uint8_t pps_response[3];
-       // uint8_t pps_response_par[1];
-       // return_code = ReaderReceive(pps_response,pps_response_par);
-       // if (return_code != 3 || pps_response[0] != 0xD0) {
-               // return return_code == 0 ? 2 : return_code;
-       // }
+       ReaderTransmit((uint8_t *)pps, sizeof(pps), NULL);
+       return_code = ReaderReceive(pps_response, pps_response_par);
+       if (return_code != 3 || pps_response[0] != 0xD0) {
+               return return_code == 0 ? 2 : return_code;
+       }
        
-       return -1;
+       return 0;
 }
\ No newline at end of file
Impressum, Datenschutz