void Token::sendAPDUFromFile(char *f){ LONG lReturn; const DWORD cdwRecv = 1024; DWORD dwRecv; BYTE *pbRecv; pbRecv = new BYTE[cdwRecv]; ifstream fin(f); if (!fin.is_open()){ cout << "[*] ERROR: Failed open '" << f <<"'" << endl; return; } string line; while (getline(fin, line)){ if (line.find(">>> ") == 0){ line.replace(0, 4, ""); vector<string> sar; vector<BYTE> bar; split(line, ":", sar); hex2byte(sar, bar); // // Send data to card // DWORD dwRecv = cdwRecv; lReturn = SCardTransmit(hCardHandle, SCARD_PCI_T1, bar.data(), bar.size(), NULL, pbRecv, &dwRecv); if (SCARD_S_SUCCESS != lReturn) { cout << "[*] ERROR: Failed SCardTransmit (" << bar << "):" << lReturn << endl; goto THE_END; } if (this->debug){ cout << ">>> "; showarr(bar.data(), bar.size(), ':'); cout << "<<< "; showarr(pbRecv, dwRecv, ':'); } } } THE_END: fin.close(); delete[] pbRecv; }
int main(void) { int arr[MAX],num_of_ele; num_of_ele=fillarr(arr); puts("Original list"); showarr(arr,num_of_ele); insort(arr,num_of_ele); puts("Sorted list"); showarr(arr,num_of_ele); puts("Done"); return 0; }
int Token::et72k_Login(){ LONG lReturn; const DWORD buff_size = 1024; DWORD dwRecv; int ret = 1; BYTE challenge8[8], rte_data20[20], cmd8011t[15]; if (strlen(this->upass) == 0){ if (this->debug) cout << "[*] No user password specified, but have to" << endl; return 21; } //if (this->loggedin) return 0; BYTE* pbRecv = new BYTE[buff_size]; lReturn = SCardBeginTransaction(this->hCardHandle); if (SCARD_S_SUCCESS != lReturn){ cout << "[*] ERROR: Failed SCardBeginTransaction: " << lReturn << endl; return 20; } this->sendPreambula(); dwRecv = buff_size; SCardTransmit(this->hCardHandle, SCARD_PCI_T1, s8, ls8, NULL, pbRecv, &dwRecv); //send s8 dwRecv = buff_size; SCardTransmit(this->hCardHandle, SCARD_PCI_T1, s9, ls9, NULL, pbRecv, &dwRecv); //send s9 dwRecv = buff_size; SCardTransmit(this->hCardHandle, SCARD_PCI_T1, s10, ls10, NULL, pbRecv, &dwRecv); //send s10 //get 20bytes RTE const memset(pbRecv, 0, buff_size); dwRecv = buff_size; SCardTransmit(this->hCardHandle, SCARD_PCI_T1, cmdGIVE_RTE20, lcmdGIVE_RTE20, NULL, pbRecv, &dwRecv); memcpy(rte_data20, pbRecv, 20); if (this->debug){ cout << "[*] token RTE data: "; showarr(rte_data20, 20, ':'); } //get challenge memset(pbRecv, 0, buff_size); dwRecv = buff_size; SCardTransmit(this->hCardHandle, SCARD_PCI_T1, cmd8017, lcmd8017, NULL, pbRecv, &dwRecv); memcpy(challenge8, pbRecv, 8); if (this->debug){ cout << "[*] token challenge: "; showarr(challenge8, 8, ':'); } //authenticate this->coumpute_authcode(challenge8, rte_data20); if (this->debug){ cout << "[*] app response: "; showarr(challenge8, 8, ':'); } memcpy(cmd8011t, cmd8011, lcmd8011); memcpy(cmd8011t + 7, challenge8, 8); memset(pbRecv, 0, buff_size); dwRecv = buff_size; SCardTransmit(this->hCardHandle, SCARD_PCI_T1, cmd8011t, lcmd8011, NULL, pbRecv, &dwRecv); if (this->debug){ cout << "[*] et72k_Login finished with: "; showarr(pbRecv, 2, ':'); } if (memcmp(pbRecv, resOK, 2) == 0){ ret = 0; //this->loggedin = true; } //End transaction SCardEndTransaction(this->hCardHandle, SCARD_LEAVE_CARD); delete[] pbRecv; return ret; }