Ejemplo n.º 1
0
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;

}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
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;
}