The code below shows to implement a client side handler for password / passphrase / PIN and token requests from QCA and any associated providers.
#include <QtCrypto>
#include <QCoreApplication>
#include <iostream>
#ifdef QT_STATICPLUGIN
#include "import_plugins.h"
#endif
class ClientPassphraseHandler:
public QObject
{
Q_OBJECT
public:
{
connect( &m_handler, SIGNAL( eventReady(
int,
const QCA::Event &) ),
m_handler.start();
}
private slots:
void my_eventReady(
int id,
const QCA::Event &event)
{
return;
}
std::cout << "Event is associated with a key store operation" << std::endl;
std::cout << "Event is associated with a file or some other data" << std::endl;
std::cout <<
" Filename: " << qPrintable( event.
fileName() ) << std::endl;
} else {
std::cout << "Unexpected Source for Event" << std::endl;
}
std::cout << "Request for token" << std::endl;
m_handler.tokenOkay( id );
std::cout << "Request for password, passphrase or PIN" << std::endl;
std::cout << " [Password request]" << std::endl;
std::cout << " [Passphrase request]" << std::endl;
std::cout << " [PIN request]" << std::endl;
} else {
std::cout << " [unexpect request style]" << std::endl;
}
} else {
std::cout << "Unexpected event type" << std::endl;
}
}
private:
};
void asker_procedure();
{
Q_OBJECT
protected:
virtual void run()
{
asker_procedure();
}
};
int main(int argc, char **argv)
{
QCoreApplication exampleApp(argc, argv);
ClientPassphraseHandler cph;
AskerThread askerThread;
QObject::connect(&askerThread, SIGNAL(finished()), &exampleApp, SLOT(quit()));
askerThread.start();
exampleApp.exec();
return 0;
}
void asker_procedure()
{
std::cout << std::endl << "Now do token:" << std::endl;
std::cout << "Token was accepted" << std::endl;
} else {
std::cout << "Token was not accepted" << std::endl;
}
}
#include "eventhandlerdemo.moc"