00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <QtCrypto>
00024
00025 #include <QCoreApplication>
00026 #include <QTimer>
00027
00028 #include <stdio.h>
00029
00030 class PassphraseHandler: public QObject
00031 {
00032 Q_OBJECT
00033 public:
00034 QCA::EventHandler handler;
00035
00036 PassphraseHandler(QObject *parent = 0) : QObject(parent)
00037 {
00038 connect(&handler, SIGNAL(eventReady(int, const QCA::Event &)),
00039 SLOT(eh_eventReady(int, const QCA::Event &)));
00040 handler.start();
00041 }
00042
00043 private slots:
00044 void eh_eventReady(int id, const QCA::Event &event)
00045 {
00046 if(event.type() == QCA::Event::Password)
00047 {
00048 QCA::SecureArray pass;
00049 QCA::ConsolePrompt prompt;
00050 prompt.getHidden("Passphrase");
00051 prompt.waitForFinished();
00052 pass = prompt.result();
00053 handler.submitPassword(id, pass);
00054 }
00055 else
00056 handler.reject(id);
00057 }
00058 };
00059
00060 class App : public QObject
00061 {
00062 Q_OBJECT
00063 public:
00064 QCA::KeyLoader keyLoader;
00065 QString str;
00066
00067 App()
00068 {
00069 connect(&keyLoader, SIGNAL(finished()), SLOT(kl_finished()));
00070 }
00071
00072 public slots:
00073 void start()
00074 {
00075 keyLoader.loadPrivateKeyFromPEMFile(str);
00076 }
00077
00078 signals:
00079 void quit();
00080
00081 private slots:
00082 void kl_finished()
00083 {
00084 if(keyLoader.convertResult() == QCA::ConvertGood)
00085 {
00086 QCA::PrivateKey key = keyLoader.privateKey();
00087 printf("Loaded successfully. Bits: %d\n", key.bitSize());
00088 }
00089 else
00090 printf("Unable to load.\n");
00091
00092 emit quit();
00093 }
00094 };
00095
00096 int main(int argc, char **argv)
00097 {
00098 QCA::Initializer init;
00099 QCoreApplication qapp(argc, argv);
00100
00101 if(argc < 2)
00102 {
00103 printf("usage: keyloader [privatekey.pem]\n");
00104 return 0;
00105 }
00106
00107 PassphraseHandler passphraseHandler;
00108 App app;
00109 app.str = argv[1];
00110 QObject::connect(&app, SIGNAL(quit()), &qapp, SLOT(quit()));
00111 QTimer::singleShot(0, &app, SLOT(start()));
00112 qapp.exec();
00113 return 0;
00114 }
00115
00116 #include "keyloader.moc"