示例#1
0
ECARD_STATUS process_CA_Step_B(const RAPDU& rapdu)
{
	if (rapdu.getSW() != RAPDU::ISO_SW_NORMAL)
		return EAC_CA_STEP_B_FAILED;

	return EAC_SUCCESS;
}
示例#2
0
void ICard::debug_RAPDU(const char *label, const RAPDU& rapdu) const
{
	eCardCore_info(DEBUG_LEVEL_APDU, "%s%sR-APDU:  SW=%04X  Nr=%u",
			label, label ? " " : "", rapdu.getSW(), rapdu.getData().size());
	if (!rapdu.getData().empty())
		hexdump(DEBUG_LEVEL_APDU, NULL,
				DATA(rapdu.getData()), rapdu.getData().size());
}
示例#3
0
ECARD_STATUS process_CA_Step_C(const RAPDU rapdu,
	std::vector<unsigned char>& GeneralAuthenticationResult)
{
	if (rapdu.getSW() != RAPDU::ISO_SW_NORMAL)
		return EAC_CA_STEP_B_FAILED;

	GeneralAuthenticationResult = rapdu.getData();

	return EAC_SUCCESS;
}
示例#4
0
RAPDU ePACard::removeSM(const RAPDU &sm_rapdu)
{
	std::vector<unsigned char> response;
	std::vector<unsigned char> sm_rdata;

	sm_rdata = sm_rapdu.getData();

	m_ssc++;

	if (!verifyResponse_AES(m_kMac, sm_rdata, m_ssc))
		throw WrongSM();

	response = decryptResponse_AES(m_kEnc, sm_rdata, m_ssc);
	/* TODO compare DO99 with SW */
	RAPDU rapdu(response, sm_rapdu.getSW());

	debug_RAPDU("Decrypted", rapdu);

	return rapdu;
}