std::string OmnikeyReaderUnit::getReaderSerialNumber() { std::string ret; std::vector<unsigned char> ucReceivedData; //This Command is from ICAO Command Set (Test-Commands). If you use ICAO Test-Commands then the driver stop the tracking (the reader is « stuck » ). ucReceivedData = getDefaultPCSCReaderCardAdapter()->sendAPDUCommand(0xFF, 0x9A, 0x01, 0x05, 0x00); //After using this command you must "Close" the Test-Mode with the following command: size_t le = ucReceivedData.size() - 2; if (le > 0) { ret = BufferHelper::getStdString(ucReceivedData); } try { getDefaultPCSCReaderCardAdapter()->sendAPDUCommand(0xFF, 0x9A, 0x04, 0x01); } catch (std::exception&) { } return ret; }
std::string ACSACRReaderUnit::getFirmwareVersion() { std::shared_ptr<ResultChecker> checker = getDefaultPCSCReaderCardAdapter()->getResultChecker(); getDefaultPCSCReaderCardAdapter()->setResultChecker(std::shared_ptr<ResultChecker>()); std::vector<unsigned char> res = getDefaultPCSCReaderCardAdapter()->sendAPDUCommand(0xFF, 0x00, 0x48, 0x00, 0x00); getDefaultPCSCReaderCardAdapter()->setResultChecker(checker); return BufferHelper::getStdString(res); }
void OmnikeyXX21ReaderUnit::changeReaderKey(std::shared_ptr<ReaderMemoryKeyStorage> keystorage, const std::vector<unsigned char>& key) { EXCEPTION_ASSERT_WITH_LOG(keystorage, std::invalid_argument, "Key storage must be defined."); EXCEPTION_ASSERT_WITH_LOG(key.size() > 0, std::invalid_argument, "key cannot be empty."); std::shared_ptr<PCSCReaderCardAdapter> rca = getDefaultPCSCReaderCardAdapter(); //rca.reset(new OmnikeyHIDiClassReaderCardAdapter()); //rca->setReaderUnit(shared_from_this()); //setIsSecureConnectionMode(true); //rca->initSecureModeSession(0xFF); rca->sendAPDUCommand(0x84, 0x82, (keystorage->getVolatile() ? 0x00 : 0x20), keystorage->getKeySlot(), static_cast<unsigned char>(key.size()), key); //rca->closeSecureModeSession(); //setIsSecureConnectionMode(false); }