closes #56; closes #54

master
Marc Wäckerlin 14 years ago
parent fb9211b523
commit ec169d58a1
  1. 30
      swisssurfer/src/browser.hxx
  2. 42
      swisssurfer/src/main.cxx
  3. 3
      swisssurfer/src/qmake.pro.in
  4. 10
      swisssurfer/src/settings.hxx
  5. 160
      swisssurfer/src/smartcardauth.hxx
  6. 60
      swisssurfer/src/swisssurfer_de.ts
  7. 60
      swisssurfer/src/swisssurfer_en.ts
  8. 60
      swisssurfer/src/swisssurfer_fr.ts
  9. 60
      swisssurfer/src/swisssurfer_it.ts

@ -58,9 +58,14 @@ class Browser: public QMainWindow, protected Ui::Browser {
bool kiosk = false, bool login = true): bool kiosk = false, bool login = true):
_url(0), _clearUrl(0), _addBookmark(0), _find(0), _url(0), _clearUrl(0), _addBookmark(0), _find(0),
_kiosk(kiosk), _kiosk(kiosk),
_settings(mimeTypes, this, settings, !kiosk), _settings(mimeTypes, this, settings, !kiosk), _errorLog(this) {
_scAuth(actlib, this, login), _errorLog(this) {
LOG<<urls; LOG<<urls;
try {
_scAuth = std::auto_ptr<SmartCardAuth>
(new SmartCardAuth(actlib, this, login));
} catch (const std::exception& x) {
LOG<<"No SmartCard Support:"<<x.what();
}
if (urls.size()) _home = urls.at(0); if (urls.size()) _home = urls.at(0);
QNetworkProxyFactory::setUseSystemConfiguration(true); QNetworkProxyFactory::setUseSystemConfiguration(true);
setupUi(this); setupUi(this);
@ -431,7 +436,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
if (!QSslSocket::supportsSsl()) if (!QSslSocket::supportsSsl())
QMessageBox::critical(this, tr("SSL Not Supported"), QMessageBox::critical(this, tr("SSL Not Supported"),
tr("SSL is not supported on your system")); tr("SSL is not supported on your system"));
_scAuth.login(); if (_scAuth.get()) _scAuth->login(false);
} }
if (!check(page)) { if (!check(page)) {
LOG<<"########## BLACK LISTED IGNORED ##########"; LOG<<"########## BLACK LISTED IGNORED ##########";
@ -1040,18 +1045,17 @@ class Browser: public QMainWindow, protected Ui::Browser {
:reply->url().path()).fileName(); :reply->url().path()).fileName();
} }
LOG<<"Filename:"<<filename; LOG<<"Filename:"<<filename;
Settings::MimeTypes::const_iterator it QStringList type
(_settings.mimetypes().find (_settings.mimetype
(reply->header(QNetworkRequest::ContentTypeHeader).toString() (reply->header(QNetworkRequest::ContentTypeHeader).toString(),
.split(';')[0])); filename));
if (it!=_settings.mimetypes().end()) { if (!type.isEmpty()) {
filename.replace(QRegExp("^(.*)\\."+it.value().toStringList() filename.replace(QRegExp("^(.*)\\."+type.at(0)+"$"),
.at(0)+"$"),
"\\1"); // remove extension "\\1"); // remove extension
QTemporaryFile *file = QTemporaryFile *file =
new QTemporaryFile(QDir::tempPath()+QDir::separator() new QTemporaryFile(QDir::tempPath()+QDir::separator()
+filename+"_XXXXXX." +filename+"_XXXXXX."
+it.value().toStringList().at(0), this); +type.at(0), this);
file->open(); file->open();
file->write(reply->readAll()); file->write(reply->readAll());
file->close(); file->close();
@ -1060,7 +1064,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
_downloadProcesses[process] = file; _downloadProcesses[process] = file;
assert(connect(process, SIGNAL(finished(int, QProcess::ExitStatus)), assert(connect(process, SIGNAL(finished(int, QProcess::ExitStatus)),
SLOT(processFinished()))); SLOT(processFinished())));
QStringList args(it.value().toStringList().at(1).split(" ") QStringList args(type.at(1).split(" ")
.replaceInStrings("%1", file->fileName())); .replaceInStrings("%1", file->fileName()));
QString prg(args.takeFirst()); QString prg(args.takeFirst());
LOG<<"Running:"<<prg<<args.join(" "); LOG<<"Running:"<<prg<<args.join(" ");
@ -1211,8 +1215,8 @@ class Browser: public QMainWindow, protected Ui::Browser {
typedef std::map<QProcess*, QTemporaryFile*> DownloadProcesses; typedef std::map<QProcess*, QTemporaryFile*> DownloadProcesses;
DownloadProcesses _downloadProcesses; DownloadProcesses _downloadProcesses;
Settings _settings; Settings _settings;
SmartCardAuth _scAuth;
ErrorLog _errorLog; ErrorLog _errorLog;
std::auto_ptr<SmartCardAuth> _scAuth;
}; };
#endif #endif

@ -26,6 +26,46 @@
#include <memory> #include <memory>
const QByteArray SWISSSIGN_EV_GOLD_CA_2009_G2
("-----BEGIN CERTIFICATE-----\n"
"MIIGvzCCBaegAwIBAgIQAPI39KUS4aGJo+mkR4+YuTANBgkqhkiG9w0BAQUFADBN\n"
"MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMScwJQYDVQQDEx5T\n"
"d2lzc1NpZ24gRVYgR29sZCBDQSAyMDA5IC0gRzIwHhcNMTAwNDI5MDgyMzA2WhcN\n"
"MTIwNDI5MDgyMzA2WjCCASQxCzAJBgNVBAYTAkNIMQ0wCwYDVQQIEwRCZXJuMQ0w\n"
"CwYDVQQHEwRCZXJuMSAwHgYDVQQKExdEaWUgU2Nod2VpemVyaXNjaGUgUG9zdDEa\n"
"MBgGA1UEAxMRaWRwLnN3aXNzc2lnbi5uZXQxJzAlBgkqhkiG9w0BCQEWGG9wZXJh\n"
"dGlvbnNAc3dpc3NzaWduLmNvbTEbMBkGA1UECRMSVmlrdG9yaWFzdHJhc3NlIDIx\n"
"MQ0wCwYDVQQREwQzMDMwMRUwEwYLKwYBBAGCNzwCAQITBEJlcm4xEzARBgsrBgEE\n"
"AYI3PAIBAxMCQ0gxGzAZBgNVBA8TElYxLjAsIENsYXVzZSA1LihiKTEbMBkGA1UE\n"
"BRMSQ0gtMDM1LjguMDE3LjIxNy03MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\n"
"CgKCAQEA6vtopNyjugIQb+OwsjcAN60Uo1ClcnFa+0Eme5MOCQg8khGwux42aRTL\n"
"kUfcTrOye4J8ThE5/9Qm32hagA+mPQRWAkQqZKDJCPU7LMEQKzClZs4LYA04Vv32\n"
"WFbeSVh3tK6j92tQ8mbtUep1S/dye9j72P1WQxdd2uJrwzQgA3ftEoVJ6lOMEcBS\n"
"cR4lfCdFbQMSwfRI3g2BKPfuYZ+Vp90rF/0Si2kNd1CrBYdLhoZFvPFBapdcK9g/\n"
"QzBXfoLQb7MZkR3o8HtUOzcmEl7fhvO/8PEh5hJgn/hnLlFW0TIrqd/ag+n4U17V\n"
"isDHS13eaSPE7qq1xhfeTda2QBk9/wIDAQABo4ICwDCCArwwHAYDVR0RBBUwE4IR\n"
"aWRwLnN3aXNzc2lnbi5uZXQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsG\n"
"AQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQUs/yd7N1TLOjtmtcB+S16SzcX5W8w\n"
"HwYDVR0jBBgwFoAUiHRGbcd8tfpycRnevydeDWjg9ycwgf8GA1UdHwSB9zCB9DBH\n"
"oEWgQ4ZBaHR0cDovL2NybC5zd2lzc3NpZ24ubmV0Lzg4NzQ0NjZEQzc3Q0I1RkE3\n"
"MjcxMTlERUJGMjc1RTBENjhFMEY3MjcwgaiggaWggaKGgZ9sZGFwOi8vZGlyZWN0\n"
"b3J5LnN3aXNzc2lnbi5uZXQvQ049ODg3NDQ2NkRDNzdDQjVGQTcyNzExOURFQkYy\n"
"NzVFMEQ2OEUwRjcyNyUyQ089U3dpc3NTaWduJTJDQz1DSD9jZXJ0aWZpY2F0ZVJl\n"
"dm9jYXRpb25MaXN0P2Jhc2U/b2JqZWN0Q2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9p\n"
"bnQwYgYDVR0gBFswWTBXBglghXQBWQECAQEwSjBIBggrBgEFBQcCARY8aHR0cDov\n"
"L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS9Td2lzc1NpZ24tR29sZC1DUC1DUFMt\n"
"UjQucGRmMIHGBggrBgEFBQcBAQSBuTCBtjBkBggrBgEFBQcwAoZYaHR0cDovL3N3\n"
"aXNzc2lnbi5uZXQvY2dpLWJpbi9hdXRob3JpdHkvZG93bmxvYWQvODg3NDQ2NkRD\n"
"NzdDQjVGQTcyNzExOURFQkYyNzVFMEQ2OEUwRjcyNzBOBggrBgEFBQcwAYZCaHR0\n"
"cDovL29jc3Auc3dpc3NzaWduLm5ldC84ODc0NDY2REM3N0NCNUZBNzI3MTE5REVC\n"
"RjI3NUUwRDY4RTBGNzI3MA0GCSqGSIb3DQEBBQUAA4IBAQCNpT2u/s/IKqXrWmHX\n"
"TTVbW2Kh8xul9jLole+hWXtx8Ln4E8oW+bV25HGUjt8QrC1wXGABRCijgIjQ8PtR\n"
"CQrcwJCmC9ShcckP7KXiaETaT67TUB8qIQ/pf3akNeWKcdFGcD6CDYM7umuu1Q1X\n"
"326mufNviiqlU0uoK1LJQHhme3HMHarYdzkuIeShvIYHUYP3JnorXaizcCqjBhdF\n"
"rj4QcCZx8hKE6gmNL+dJkBM/5CSqByy15tMs2qa0iMdwkPUiNxlL0VuZkwzooVQx\n"
"1eKQwsSx3807MkQMKs+4v1LexkY+5/xU9dvtyRysjuSEWS8yCx3+E3fOOVAIX5jD\n"
"0uSX\n"
"-----END CERTIFICATE-----");
const QByteArray SWISSSIGN_SERVER_GOLD_CA_2008_G2 const QByteArray SWISSSIGN_SERVER_GOLD_CA_2008_G2
("-----BEGIN CERTIFICATE-----\n" ("-----BEGIN CERTIFICATE-----\n"
"MIIGXjCCBEagAwIBAgIIXsz6acAzJ+8wDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UE\n" "MIIGXjCCBEagAwIBAgIIXsz6acAzJ+8wDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UE\n"
@ -185,6 +225,7 @@ int main(int argv, char** argc) try {
//............................................................................ //............................................................................
QSslConfiguration sslConfig(QSslConfiguration::defaultConfiguration()); QSslConfiguration sslConfig(QSslConfiguration::defaultConfiguration());
QList<QSslCertificate> certs(sslConfig.caCertificates()); QList<QSslCertificate> certs(sslConfig.caCertificates());
certs.push_back(QSslCertificate(SWISSSIGN_EV_GOLD_CA_2009_G2));
certs.push_back(QSslCertificate(SWISSSIGN_GOLD_CA_G2)); certs.push_back(QSslCertificate(SWISSSIGN_GOLD_CA_G2));
//certs.push_back(QSslCertificate(SWISSSIGN_SERVER_GOLD_CA_2008_G2)); //certs.push_back(QSslCertificate(SWISSSIGN_SERVER_GOLD_CA_2008_G2));
certs.push_back(QSslCertificate(SWISSSIGN_SILVER_CA_G2)); certs.push_back(QSslCertificate(SWISSSIGN_SILVER_CA_G2));
@ -326,6 +367,7 @@ int main(int argv, char** argc) try {
} }
sslConfig.setPeerVerifyMode(QSslSocket::VerifyPeer); sslConfig.setPeerVerifyMode(QSslSocket::VerifyPeer);
QSslConfiguration::setDefaultConfiguration(sslConfig); QSslConfiguration::setDefaultConfiguration(sslConfig);
assert(QSslConfiguration::defaultConfiguration().caCertificates().contains(SWISSSIGN_EV_GOLD_CA_2009_G2));
assert(QSslConfiguration::defaultConfiguration().caCertificates().contains(SWISSSIGN_GOLD_CA_G2)); assert(QSslConfiguration::defaultConfiguration().caCertificates().contains(SWISSSIGN_GOLD_CA_G2));
//assert(QSslConfiguration::defaultConfiguration().caCertificates().contains(SWISSSIGN_SERVER_GOLD_CA_2008_G2)))); //assert(QSslConfiguration::defaultConfiguration().caCertificates().contains(SWISSSIGN_SERVER_GOLD_CA_2008_G2))));
assert(QSslConfiguration::defaultConfiguration().caCertificates().contains(SWISSSIGN_SILVER_CA_G2)); assert(QSslConfiguration::defaultConfiguration().caCertificates().contains(SWISSSIGN_SILVER_CA_G2));

@ -3,6 +3,9 @@ CONFIG += no_keywords
QMAKE_LIBS += -lproxyface -lcryptoki++ -lssl -lcrypto QMAKE_LIBS += -lproxyface -lcryptoki++ -lssl -lcrypto
unix { unix {
!macx {
CONFIG += debug
}
} }
macx { macx {
QMAKE_INCDIR += /opt/local/include QMAKE_INCDIR += /opt/local/include

@ -117,6 +117,16 @@ class Settings: public QDialog, protected Ui::Settings {
return _mimetypes; return _mimetypes;
} }
QStringList mimetype(QString mimetype, QString filename) const {
Settings::MimeTypes::const_iterator
it(_mimetypes.find(mimetype.split(';')[0]));
if (it!=_mimetypes.end()) return it.value().toStringList();
for (it=_mimetypes.begin(); it!=_mimetypes.end(); ++it)
if (filename.endsWith("."+it.value().toStringList().at(0)))
return it.value().toStringList();
return QStringList();
}
QString& replaceSearchEngine(QString& url) { QString& replaceSearchEngine(QString& url) {
LOG; LOG;
int len(url.indexOf(QRegExp("[ :]"))); int len(url.indexOf(QRegExp("[ :]")));

@ -34,42 +34,79 @@ class CryptokiEngine: public QObject, public openssl::Engine {
operator bool() { operator bool() {
OPENSSL_LOG("Status of CryptokiEngine: " OPENSSL_LOG("Status of CryptokiEngine: "
<<(_privateKey.get() <<(_privateKey.get()
?"privateKey defined, ":"privateKey undefined") ?"privateKey defined, ":"privateKey undefined"));
<<(_cert.get()?"cert defined":"cert undefined")); return _privateKey.get();
return _privateKey.get() && _cert.get();
} }
cryptoki::Init& cryptoki() { cryptoki::Init& cryptoki() {
return _cryptoki; return _cryptoki;
} }
void cert(cryptoki::Object privateKey, std::auto_ptr<openssl::X509> c) { void cert(cryptoki::Object& privateKey, const std::string& certVal) {
OPENSSL_LOG("log"); OPENSSL_LOG("log");
_cert = c;
_privateKey = std::auto_ptr<cryptoki::Object> _privateKey = std::auto_ptr<cryptoki::Object>
(new cryptoki::Object(privateKey)); (new cryptoki::Object(privateKey));
_modulus = privateKey.attribute(CKA_MODULUS).value; try { // new
_exponent = privateKey.attribute(CKA_PUBLIC_EXPONENT).value; QSslConfiguration sslConfig(QSslConfiguration::defaultConfiguration());
QSslCertificate localcert(QByteArray(certVal.data(),
certVal.size()),
QSsl::Der);
sslConfig.setLocalCertificate(localcert);
assert(localcert.isValid());
QByteArray pem // empty dummy key for qt object instantiation
("-----BEGIN RSA PRIVATE KEY-----\n"
"MIIBOwIBAAJBAMH2yqAGeVNPdgeZ2GoHo"
"31m9aUxZ7QfK2Go2qLTahLpQ3UL1C8G\n"
"LkuMS8SNK0ZGfRMalIpIhv6bW5l3kjogO"
"ncCAwEAAQJABVGECtFCoGMsZFb2lSmy\n"
"dOzOzYHGSy0TnnDn1dEgNnZ8sIljElPtU"
"zm9dyXs2P3ICL1sOd7qjpzfJeyxknDL\n"
"AQIhAO5iKdLmhyuW+EDEH19vDs1Pmqs3/"
"ZnT5UgUiJnTJqz3AiEA0ExIfUOCnxq2\n"
"a3Z46KEivcr8JB2P9VqouBbVryiq/oECI"
"QDj8bPCejMoiEzMSX0iWWTTB9qC/KAg\n"
"FtF4skHIrXKfEwIgPCs86Uo+Ch2aQjKHv"
"JMHSRHAgeI0OmiEwiB+e0lhE4ECIQDd\n"
"IbUmHIXt6oHLJmoGFX46bCcfil5eE5FXf"
"iaw7Q9iPw==\n"
"-----END RSA PRIVATE KEY-----\n");
QSslKey privkey(pem, QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey);
RSA* rsa(0);
do {
rsa = ((RSA*)privkey.handle());
RSA_free(rsa); //→ occasional crashes?
rsa = RSA_new_method(_e);
set(rsa->n, privateKey, CKA_MODULUS, "CKA_MODULUS");
set(rsa->e, privateKey, CKA_PUBLIC_EXPONENT, "CKA_PUBLIC_EXPONENT");
set(rsa->d, privateKey, CKA_PRIVATE_EXPONENT, "CKA_PRIVATE_EXPONENT");
set(rsa->p, privateKey, CKA_PRIME_1, "CKA_PRIME_1");
set(rsa->q, privateKey, CKA_PRIME_2, "CKA_PRIME_2");
set(rsa->dmp1, privateKey, CKA_EXPONENT_1, "CKA_EXPONENT_1");
set(rsa->dmq1, privateKey, CKA_EXPONENT_2, "CKA_EXPONENT_2");
set(rsa->iqmp, privateKey, CKA_COEFFICIENT, "CKA_COEFFICIENT");
rsa->flags |= RSA_FLAG_SIGN_VER; // don't emulate with encrypt/decrypt
assert(!privkey.isNull());
} while (rsa!=(RSA*)privkey.handle());
sslConfig.setPrivateKey(privkey);
QSslConfiguration::setDefaultConfiguration(sslConfig);
} catch (const std::exception& e) {
OPENSSL_LOG("SETUP ERROR: "<<e.what());
}
} }
const openssl::X509& cert() { protected:
return *_cert;
}
virtual RSA* setupRsa(RSA* r) { void set(BIGNUM*& num, cryptoki::Object& key, int type, std::string name) {
RSA_free(r); //→ occasional crashes? try {
r = RSA_new_method(_e); std::string value(key.attribute(type).value);
r->n = BN_bin2bn((const unsigned char*)_modulus.data(), num = BN_bin2bn((const unsigned char*)value.data(),
_modulus.size(), r->n); value.size(), num);
r->e = BN_bin2bn((const unsigned char*)_exponent.data(), } catch (const std::exception& x) {
_exponent.size(), r->e); qDebug()<<"**** ERROR: key attribute missing:"<<name.c_str()<<x.what();
// otherwise OpenSSL emulates sign/verify with encrypt/decrypt }
r->flags |= RSA_FLAG_SIGN_VER;
return r;
} }
protected:
virtual const char* id() { virtual const char* id() {
OPENSSL_LOG("log"); OPENSSL_LOG("log");
return "CryptokiEngine_ID"; return "CryptokiEngine_ID";
@ -85,16 +122,18 @@ class CryptokiEngine: public QObject, public openssl::Engine {
if (type != NID_md5_sha1) throw std::runtime_error("wrong sign type"); if (type != NID_md5_sha1) throw std::runtime_error("wrong sign type");
if (in.size() != 36) throw std::runtime_error("wrong msg size to sign"); if (in.size() != 36) throw std::runtime_error("wrong msg size to sign");
OPENSSL_LOG("ready to sign"); OPENSSL_LOG("ready to sign");
return _privateKey->sign(in, CKM_RSA_PKCS); try {
return _privateKey->sign(in, CKM_RSA_PKCS);
} catch (const std::exception& x) {
certRequired(); // get new certificate
return _privateKey->sign(in, CKM_RSA_PKCS); // try again
}
} }
private: private:
cryptoki::Init _cryptoki; cryptoki::Init _cryptoki;
std::string _modulus;
std::string _exponent;
std::auto_ptr<cryptoki::Object> _privateKey; std::auto_ptr<cryptoki::Object> _privateKey;
std::auto_ptr<openssl::X509> _cert;
}; };
@ -104,36 +143,24 @@ class SmartCardAuth: public QObject {
public: public:
SmartCardAuth(const QString& lib, QWidget* p=0, bool loginAtStart=true): SmartCardAuth(const QString& lib, QWidget* p=0, bool loginAtStart=true):
_reg(e(lib)), _parent(p) { _parent(p), _e(new CryptokiEngine(lib.toStdString())), _reg(_e) {
qDebug()<<__PRETTY_FUNCTION__; qDebug()<<__PRETTY_FUNCTION__;
if (loginAtStart) login(); if (loginAtStart) login();
//assert(connect(e(), SIGNAL(certRequired()), SLOT(login()))); assert(connect(_e, SIGNAL(certRequired()), SLOT(login())));
} }
static CryptokiEngine* e(const QString& lib = QString()) try { public Q_SLOTS:
static CryptokiEngine* _e(new CryptokiEngine(lib.toStdString()));
return _e;
} catch (const std::exception& e) {
qDebug()<<"Smartcard Error: "<<e.what();
return 0;
}
private: void login(bool force=true) {
openssl::RegisterEngine<CryptokiEngine> _reg;
//std::map<ssl_ctx_st*, QSslSocket*> sockets;
public:
void login(bool force=false) {
qDebug()<<__PRETTY_FUNCTION__; qDebug()<<__PRETTY_FUNCTION__;
QMutexLocker lock(&_mutex); QMutexLocker lock(&_mutex);
if (!e() || (!force && *e())) return; // no smartcard or already logged in if (!_e || (!force && *_e)) return; // no smartcard or already logged in
try { try {
QList<CertInfo> authcerts; QList<CertInfo> authcerts;
QList<CertInfo> allcerts; QList<CertInfo> allcerts;
QSslConfiguration sslConfig(QSslConfiguration::defaultConfiguration()); QSslConfiguration sslConfig(QSslConfiguration::defaultConfiguration());
_slots = e()->cryptoki().slotList(); _slots = _e->cryptoki().slotList();
// look for login certificates ----------------------------------------
for (cryptoki::SlotList::iterator slot(_slots.begin()); for (cryptoki::SlotList::iterator slot(_slots.begin());
slot!=_slots.end(); ++slot) { slot!=_slots.end(); ++slot) {
_session = _session =
@ -167,6 +194,7 @@ class SmartCardAuth: public QObject {
} }
} }
} }
// get pin and install client certificate ------------------------------
if (!authcerts.isEmpty() || !allcerts.isEmpty()) { if (!authcerts.isEmpty() || !allcerts.isEmpty()) {
CertInfo c(authcerts.size()?authcerts[0]:allcerts[0]); CertInfo c(authcerts.size()?authcerts[0]:allcerts[0]);
PinEntry pinEntry(QSslCertificate(QByteArray(c.data.data(), PinEntry pinEntry(QSslCertificate(QByteArray(c.data.data(),
@ -174,7 +202,7 @@ class SmartCardAuth: public QObject {
QSsl::Der), _parent); QSsl::Der), _parent);
while (pinEntry.exec()==PinEntry::Accepted) while (pinEntry.exec()==PinEntry::Accepted)
try { try {
_session = _session = // session login with pin
std::auto_ptr<cryptoki::Session> std::auto_ptr<cryptoki::Session>
(new cryptoki::Session(*c.slot)); (new cryptoki::Session(*c.slot));
_session->login(pinEntry.pin().toStdString()); _session->login(pinEntry.pin().toStdString());
@ -184,42 +212,7 @@ class SmartCardAuth: public QObject {
c.id)); c.id));
if (keys.size()==1) { if (keys.size()==1) {
OPENSSL_LOG("**** found one private key"); OPENSSL_LOG("**** found one private key");
e()->cert(keys[0], _e->cert(keys[0], c.data); // install client cert
std::auto_ptr<openssl::X509>
(new openssl::X509(c.data)));
try { // new
QSslConfiguration sslConfig(QSslConfiguration::defaultConfiguration());
QSslCertificate localcert(QByteArray(c.data.data(),
c.data.size()),
QSsl::Der);
sslConfig.setLocalCertificate(localcert);
assert(localcert.isValid());
QByteArray pem
("-----BEGIN RSA PRIVATE KEY-----\n"
"MIIBOwIBAAJBAMH2yqAGeVNPdgeZ2GoHo31m9aUxZ7QfK2"
"Go2qLTahLpQ3UL1C8G\n"
"LkuMS8SNK0ZGfRMalIpIhv6bW5l3kjogOncCAwEAAQJABV"
"GECtFCoGMsZFb2lSmy\n"
"dOzOzYHGSy0TnnDn1dEgNnZ8sIljElPtUzm9dyXs2P3ICL"
"1sOd7qjpzfJeyxknDL\n"
"AQIhAO5iKdLmhyuW+EDEH19vDs1Pmqs3/ZnT5UgUiJnTJq"
"z3AiEA0ExIfUOCnxq2\n"
"a3Z46KEivcr8JB2P9VqouBbVryiq/oECIQDj8bPCejMoiE"
"zMSX0iWWTTB9qC/KAg\n"
"FtF4skHIrXKfEwIgPCs86Uo+Ch2aQjKHvJMHSRHAgeI0Om"
"iEwiB+e0lhE4ECIQDd\n"
"IbUmHIXt6oHLJmoGFX46bCcfil5eE5FXfiaw7Q9iPw==\n"
"-----END RSA PRIVATE KEY-----\n");
QSslKey privkey(pem, QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey);
e()->setupRsa((RSA*)privkey.handle());
assert(!privkey.isNull());
sslConfig.setPrivateKey(privkey);
QSslConfiguration::setDefaultConfiguration(sslConfig);
} catch (const std::exception& e) {
OPENSSL_LOG("SETUP ERROR: "<<e.what());
}
break; break;
} }
} catch (std::exception& x) { } catch (std::exception& x) {
@ -250,9 +243,12 @@ class SmartCardAuth: public QObject {
private: private:
QWidget* _parent; QWidget* _parent;
CryptokiEngine* _e;
openssl::RegisterEngine<CryptokiEngine> _reg;
cryptoki::SlotList _slots; cryptoki::SlotList _slots;
std::auto_ptr<cryptoki::Session> _session; std::auto_ptr<cryptoki::Session> _session;
QMutex _mutex; QMutex _mutex;
//std::map<ssl_ctx_st*, QSslSocket*> sockets;
// std::list<std::string> _cacerts; // std::list<std::string> _cacerts;
}; };

@ -236,98 +236,98 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="428"/> <location filename="browser.hxx" line="433"/>
<source>Checking: %1</source> <source>Checking: %1</source>
<oldsource>Opening: %1</oldsource> <oldsource>Opening: %1</oldsource>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="446"/> <location filename="browser.hxx" line="451"/>
<source>Reading: %1</source> <source>Reading: %1</source>
<oldsource>Reading: %1%</oldsource> <oldsource>Reading: %1%</oldsource>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="461"/> <location filename="browser.hxx" line="466"/>
<source>Zoom: %1%</source> <source>Zoom: %1%</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="448"/> <location filename="browser.hxx" line="453"/>
<source>Illegal URL: %1</source> <source>Illegal URL: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="510"/> <location filename="browser.hxx" line="515"/>
<source>Print Document</source> <source>Print Document</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="531"/> <location filename="browser.hxx" line="536"/>
<source>%1 - %2</source> <source>%1 - %2</source>
<oldsource>Back to %1 - %2</oldsource> <oldsource>Back to %1 - %2</oldsource>
<comment>statusbar actionBack_hovered %1=url %2=title</comment> <comment>statusbar actionBack_hovered %1=url %2=title</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="673"/> <location filename="browser.hxx" line="678"/>
<source>Info: %1</source> <source>Info: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="686"/> <location filename="browser.hxx" line="691"/>
<source>done.</source> <source>done.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="686"/> <location filename="browser.hxx" line="691"/>
<source>page load error.</source> <source>page load error.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="939"/> <location filename="browser.hxx" line="944"/>
<source>%1</source> <source>%1</source>
<comment>statusbar for hovered link %1=url</comment> <comment>statusbar for hovered link %1=url</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="438"/> <location filename="browser.hxx" line="443"/>
<source>Forbidden: %1</source> <source>Forbidden: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="432"/> <location filename="browser.hxx" line="437"/>
<source>SSL Not Supported</source> <source>SSL Not Supported</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="433"/> <location filename="browser.hxx" line="438"/>
<source>SSL is not supported on your system</source> <source>SSL is not supported on your system</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="439"/> <location filename="browser.hxx" line="444"/>
<source>Access Denied</source> <source>Access Denied</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="440"/> <location filename="browser.hxx" line="445"/>
<source>&lt;p&gt;Access denied due to security considerations.&lt;/p&gt;&lt;p&gt;You are not allowed to connect to %1.</source> <source>&lt;p&gt;Access denied due to security considerations.&lt;/p&gt;&lt;p&gt;You are not allowed to connect to %1.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="550"/> <location filename="browser.hxx" line="555"/>
<source>%1 - %2</source> <source>%1 - %2</source>
<comment>statusbar actionForward_hovered %1=url %2=title</comment> <comment>statusbar actionForward_hovered %1=url %2=title</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="618"/> <location filename="browser.hxx" line="623"/>
<source>About</source> <source>About</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="619"/> <location filename="browser.hxx" line="624"/>
<source>SwissSurfer %1 (%2) <source>SwissSurfer %1 (%2)
%3 %3
@ -341,22 +341,22 @@ Compiled: qt-%5</oldsource>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="668"/> <location filename="browser.hxx" line="673"/>
<source>%1</source> <source>%1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="1070"/> <location filename="browser.hxx" line="1074"/>
<source>Save File As ...</source> <source>Save File As ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="1133"/> <location filename="browser.hxx" line="1137"/>
<source>authentication required</source> <source>authentication required</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="1145"/> <location filename="browser.hxx" line="1149"/>
<source>ssl error</source> <source>ssl error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -582,12 +582,12 @@ p, li { white-space: pre-wrap; }
<context> <context>
<name>QMessageBox</name> <name>QMessageBox</name>
<message> <message>
<location filename="smartcardauth.hxx" line="228"/> <location filename="smartcardauth.hxx" line="219"/>
<source>Wrong PIN</source> <source>Wrong PIN</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="smartcardauth.hxx" line="229"/> <location filename="smartcardauth.hxx" line="220"/>
<source>Authentication failed, please try again.</source> <source>Authentication failed, please try again.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -595,7 +595,7 @@ p, li { white-space: pre-wrap; }
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="main.cxx" line="249"/> <location filename="main.cxx" line="290"/>
<source>Usage: %1 [OPTIONS...] [&lt;url&gt; ...] <source>Usage: %1 [OPTIONS...] [&lt;url&gt; ...]
Options: Options:
-h, --help show this help text -h, --help show this help text
@ -643,27 +643,27 @@ Environment:
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="294"/> <location filename="main.cxx" line="335"/>
<source>Cannot read PEM certificate from file: %1</source> <source>Cannot read PEM certificate from file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="300"/> <location filename="main.cxx" line="341"/>
<source>Read PEM certificates from file: %1</source> <source>Read PEM certificates from file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="307"/> <location filename="main.cxx" line="348"/>
<source>Cannot read PEM RSA key from file: %1</source> <source>Cannot read PEM RSA key from file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="312"/> <location filename="main.cxx" line="353"/>
<source>Read private key from file: %1</source> <source>Read private key from file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="323"/> <location filename="main.cxx" line="364"/>
<source>Too few arguments. <source>Too few arguments.
Try: %1 --help</source> Try: %1 --help</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>

@ -236,98 +236,98 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="428"/> <location filename="browser.hxx" line="433"/>
<source>Checking: %1</source> <source>Checking: %1</source>
<oldsource>Opening: %1</oldsource> <oldsource>Opening: %1</oldsource>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="446"/> <location filename="browser.hxx" line="451"/>
<source>Reading: %1</source> <source>Reading: %1</source>
<oldsource>Reading: %1%</oldsource> <oldsource>Reading: %1%</oldsource>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="461"/> <location filename="browser.hxx" line="466"/>
<source>Zoom: %1%</source> <source>Zoom: %1%</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="448"/> <location filename="browser.hxx" line="453"/>
<source>Illegal URL: %1</source> <source>Illegal URL: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="510"/> <location filename="browser.hxx" line="515"/>
<source>Print Document</source> <source>Print Document</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="531"/> <location filename="browser.hxx" line="536"/>
<source>%1 - %2</source> <source>%1 - %2</source>
<oldsource>Back to %1 - %2</oldsource> <oldsource>Back to %1 - %2</oldsource>
<comment>statusbar actionBack_hovered %1=url %2=title</comment> <comment>statusbar actionBack_hovered %1=url %2=title</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="673"/> <location filename="browser.hxx" line="678"/>
<source>Info: %1</source> <source>Info: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="686"/> <location filename="browser.hxx" line="691"/>
<source>done.</source> <source>done.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="686"/> <location filename="browser.hxx" line="691"/>
<source>page load error.</source> <source>page load error.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="939"/> <location filename="browser.hxx" line="944"/>
<source>%1</source> <source>%1</source>
<comment>statusbar for hovered link %1=url</comment> <comment>statusbar for hovered link %1=url</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="438"/> <location filename="browser.hxx" line="443"/>
<source>Forbidden: %1</source> <source>Forbidden: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="432"/> <location filename="browser.hxx" line="437"/>
<source>SSL Not Supported</source> <source>SSL Not Supported</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="433"/> <location filename="browser.hxx" line="438"/>
<source>SSL is not supported on your system</source> <source>SSL is not supported on your system</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="439"/> <location filename="browser.hxx" line="444"/>
<source>Access Denied</source> <source>Access Denied</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="440"/> <location filename="browser.hxx" line="445"/>
<source>&lt;p&gt;Access denied due to security considerations.&lt;/p&gt;&lt;p&gt;You are not allowed to connect to %1.</source> <source>&lt;p&gt;Access denied due to security considerations.&lt;/p&gt;&lt;p&gt;You are not allowed to connect to %1.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="550"/> <location filename="browser.hxx" line="555"/>
<source>%1 - %2</source> <source>%1 - %2</source>
<comment>statusbar actionForward_hovered %1=url %2=title</comment> <comment>statusbar actionForward_hovered %1=url %2=title</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="618"/> <location filename="browser.hxx" line="623"/>
<source>About</source> <source>About</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="619"/> <location filename="browser.hxx" line="624"/>
<source>SwissSurfer %1 (%2) <source>SwissSurfer %1 (%2)
%3 %3
@ -341,22 +341,22 @@ Compiled: qt-%5</oldsource>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="668"/> <location filename="browser.hxx" line="673"/>
<source>%1</source> <source>%1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="1070"/> <location filename="browser.hxx" line="1074"/>
<source>Save File As ...</source> <source>Save File As ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="1133"/> <location filename="browser.hxx" line="1137"/>
<source>authentication required</source> <source>authentication required</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="1145"/> <location filename="browser.hxx" line="1149"/>
<source>ssl error</source> <source>ssl error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -582,12 +582,12 @@ p, li { white-space: pre-wrap; }
<context> <context>
<name>QMessageBox</name> <name>QMessageBox</name>
<message> <message>
<location filename="smartcardauth.hxx" line="228"/> <location filename="smartcardauth.hxx" line="219"/>
<source>Wrong PIN</source> <source>Wrong PIN</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="smartcardauth.hxx" line="229"/> <location filename="smartcardauth.hxx" line="220"/>
<source>Authentication failed, please try again.</source> <source>Authentication failed, please try again.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -595,7 +595,7 @@ p, li { white-space: pre-wrap; }
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="main.cxx" line="249"/> <location filename="main.cxx" line="290"/>
<source>Usage: %1 [OPTIONS...] [&lt;url&gt; ...] <source>Usage: %1 [OPTIONS...] [&lt;url&gt; ...]
Options: Options:
-h, --help show this help text -h, --help show this help text
@ -643,27 +643,27 @@ Environment:
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="294"/> <location filename="main.cxx" line="335"/>
<source>Cannot read PEM certificate from file: %1</source> <source>Cannot read PEM certificate from file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="300"/> <location filename="main.cxx" line="341"/>
<source>Read PEM certificates from file: %1</source> <source>Read PEM certificates from file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="307"/> <location filename="main.cxx" line="348"/>
<source>Cannot read PEM RSA key from file: %1</source> <source>Cannot read PEM RSA key from file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="312"/> <location filename="main.cxx" line="353"/>
<source>Read private key from file: %1</source> <source>Read private key from file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="323"/> <location filename="main.cxx" line="364"/>
<source>Too few arguments. <source>Too few arguments.
Try: %1 --help</source> Try: %1 --help</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>

@ -236,98 +236,98 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="428"/> <location filename="browser.hxx" line="433"/>
<source>Checking: %1</source> <source>Checking: %1</source>
<oldsource>Opening: %1</oldsource> <oldsource>Opening: %1</oldsource>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="446"/> <location filename="browser.hxx" line="451"/>
<source>Reading: %1</source> <source>Reading: %1</source>
<oldsource>Reading: %1%</oldsource> <oldsource>Reading: %1%</oldsource>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="461"/> <location filename="browser.hxx" line="466"/>
<source>Zoom: %1%</source> <source>Zoom: %1%</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="448"/> <location filename="browser.hxx" line="453"/>
<source>Illegal URL: %1</source> <source>Illegal URL: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="510"/> <location filename="browser.hxx" line="515"/>
<source>Print Document</source> <source>Print Document</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="531"/> <location filename="browser.hxx" line="536"/>
<source>%1 - %2</source> <source>%1 - %2</source>
<oldsource>Back to %1 - %2</oldsource> <oldsource>Back to %1 - %2</oldsource>
<comment>statusbar actionBack_hovered %1=url %2=title</comment> <comment>statusbar actionBack_hovered %1=url %2=title</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="673"/> <location filename="browser.hxx" line="678"/>
<source>Info: %1</source> <source>Info: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="686"/> <location filename="browser.hxx" line="691"/>
<source>done.</source> <source>done.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="686"/> <location filename="browser.hxx" line="691"/>
<source>page load error.</source> <source>page load error.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="939"/> <location filename="browser.hxx" line="944"/>
<source>%1</source> <source>%1</source>
<comment>statusbar for hovered link %1=url</comment> <comment>statusbar for hovered link %1=url</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="438"/> <location filename="browser.hxx" line="443"/>
<source>Forbidden: %1</source> <source>Forbidden: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="432"/> <location filename="browser.hxx" line="437"/>
<source>SSL Not Supported</source> <source>SSL Not Supported</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="433"/> <location filename="browser.hxx" line="438"/>
<source>SSL is not supported on your system</source> <source>SSL is not supported on your system</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="439"/> <location filename="browser.hxx" line="444"/>
<source>Access Denied</source> <source>Access Denied</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="440"/> <location filename="browser.hxx" line="445"/>
<source>&lt;p&gt;Access denied due to security considerations.&lt;/p&gt;&lt;p&gt;You are not allowed to connect to %1.</source> <source>&lt;p&gt;Access denied due to security considerations.&lt;/p&gt;&lt;p&gt;You are not allowed to connect to %1.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="550"/> <location filename="browser.hxx" line="555"/>
<source>%1 - %2</source> <source>%1 - %2</source>
<comment>statusbar actionForward_hovered %1=url %2=title</comment> <comment>statusbar actionForward_hovered %1=url %2=title</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="618"/> <location filename="browser.hxx" line="623"/>
<source>About</source> <source>About</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="619"/> <location filename="browser.hxx" line="624"/>
<source>SwissSurfer %1 (%2) <source>SwissSurfer %1 (%2)
%3 %3
@ -341,22 +341,22 @@ Compiled: qt-%5</oldsource>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="668"/> <location filename="browser.hxx" line="673"/>
<source>%1</source> <source>%1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="1070"/> <location filename="browser.hxx" line="1074"/>
<source>Save File As ...</source> <source>Save File As ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="1133"/> <location filename="browser.hxx" line="1137"/>
<source>authentication required</source> <source>authentication required</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="1145"/> <location filename="browser.hxx" line="1149"/>
<source>ssl error</source> <source>ssl error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -582,12 +582,12 @@ p, li { white-space: pre-wrap; }
<context> <context>
<name>QMessageBox</name> <name>QMessageBox</name>
<message> <message>
<location filename="smartcardauth.hxx" line="228"/> <location filename="smartcardauth.hxx" line="219"/>
<source>Wrong PIN</source> <source>Wrong PIN</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="smartcardauth.hxx" line="229"/> <location filename="smartcardauth.hxx" line="220"/>
<source>Authentication failed, please try again.</source> <source>Authentication failed, please try again.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -595,7 +595,7 @@ p, li { white-space: pre-wrap; }
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="main.cxx" line="249"/> <location filename="main.cxx" line="290"/>
<source>Usage: %1 [OPTIONS...] [&lt;url&gt; ...] <source>Usage: %1 [OPTIONS...] [&lt;url&gt; ...]
Options: Options:
-h, --help show this help text -h, --help show this help text
@ -643,27 +643,27 @@ Environment:
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="294"/> <location filename="main.cxx" line="335"/>
<source>Cannot read PEM certificate from file: %1</source> <source>Cannot read PEM certificate from file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="300"/> <location filename="main.cxx" line="341"/>
<source>Read PEM certificates from file: %1</source> <source>Read PEM certificates from file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="307"/> <location filename="main.cxx" line="348"/>
<source>Cannot read PEM RSA key from file: %1</source> <source>Cannot read PEM RSA key from file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="312"/> <location filename="main.cxx" line="353"/>
<source>Read private key from file: %1</source> <source>Read private key from file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="323"/> <location filename="main.cxx" line="364"/>
<source>Too few arguments. <source>Too few arguments.
Try: %1 --help</source> Try: %1 --help</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>

@ -236,98 +236,98 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="428"/> <location filename="browser.hxx" line="433"/>
<source>Checking: %1</source> <source>Checking: %1</source>
<oldsource>Opening: %1</oldsource> <oldsource>Opening: %1</oldsource>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="446"/> <location filename="browser.hxx" line="451"/>
<source>Reading: %1</source> <source>Reading: %1</source>
<oldsource>Reading: %1%</oldsource> <oldsource>Reading: %1%</oldsource>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="461"/> <location filename="browser.hxx" line="466"/>
<source>Zoom: %1%</source> <source>Zoom: %1%</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="448"/> <location filename="browser.hxx" line="453"/>
<source>Illegal URL: %1</source> <source>Illegal URL: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="510"/> <location filename="browser.hxx" line="515"/>
<source>Print Document</source> <source>Print Document</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="531"/> <location filename="browser.hxx" line="536"/>
<source>%1 - %2</source> <source>%1 - %2</source>
<oldsource>Back to %1 - %2</oldsource> <oldsource>Back to %1 - %2</oldsource>
<comment>statusbar actionBack_hovered %1=url %2=title</comment> <comment>statusbar actionBack_hovered %1=url %2=title</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="673"/> <location filename="browser.hxx" line="678"/>
<source>Info: %1</source> <source>Info: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="686"/> <location filename="browser.hxx" line="691"/>
<source>done.</source> <source>done.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="686"/> <location filename="browser.hxx" line="691"/>
<source>page load error.</source> <source>page load error.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="939"/> <location filename="browser.hxx" line="944"/>
<source>%1</source> <source>%1</source>
<comment>statusbar for hovered link %1=url</comment> <comment>statusbar for hovered link %1=url</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="438"/> <location filename="browser.hxx" line="443"/>
<source>Forbidden: %1</source> <source>Forbidden: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="432"/> <location filename="browser.hxx" line="437"/>
<source>SSL Not Supported</source> <source>SSL Not Supported</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="433"/> <location filename="browser.hxx" line="438"/>
<source>SSL is not supported on your system</source> <source>SSL is not supported on your system</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="439"/> <location filename="browser.hxx" line="444"/>
<source>Access Denied</source> <source>Access Denied</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="440"/> <location filename="browser.hxx" line="445"/>
<source>&lt;p&gt;Access denied due to security considerations.&lt;/p&gt;&lt;p&gt;You are not allowed to connect to %1.</source> <source>&lt;p&gt;Access denied due to security considerations.&lt;/p&gt;&lt;p&gt;You are not allowed to connect to %1.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="550"/> <location filename="browser.hxx" line="555"/>
<source>%1 - %2</source> <source>%1 - %2</source>
<comment>statusbar actionForward_hovered %1=url %2=title</comment> <comment>statusbar actionForward_hovered %1=url %2=title</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="618"/> <location filename="browser.hxx" line="623"/>
<source>About</source> <source>About</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="619"/> <location filename="browser.hxx" line="624"/>
<source>SwissSurfer %1 (%2) <source>SwissSurfer %1 (%2)
%3 %3
@ -341,22 +341,22 @@ Compiled: qt-%5</oldsource>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="668"/> <location filename="browser.hxx" line="673"/>
<source>%1</source> <source>%1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="1070"/> <location filename="browser.hxx" line="1074"/>
<source>Save File As ...</source> <source>Save File As ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="1133"/> <location filename="browser.hxx" line="1137"/>
<source>authentication required</source> <source>authentication required</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="browser.hxx" line="1145"/> <location filename="browser.hxx" line="1149"/>
<source>ssl error</source> <source>ssl error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -582,12 +582,12 @@ p, li { white-space: pre-wrap; }
<context> <context>
<name>QMessageBox</name> <name>QMessageBox</name>
<message> <message>
<location filename="smartcardauth.hxx" line="228"/> <location filename="smartcardauth.hxx" line="219"/>
<source>Wrong PIN</source> <source>Wrong PIN</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="smartcardauth.hxx" line="229"/> <location filename="smartcardauth.hxx" line="220"/>
<source>Authentication failed, please try again.</source> <source>Authentication failed, please try again.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -595,7 +595,7 @@ p, li { white-space: pre-wrap; }
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="main.cxx" line="249"/> <location filename="main.cxx" line="290"/>
<source>Usage: %1 [OPTIONS...] [&lt;url&gt; ...] <source>Usage: %1 [OPTIONS...] [&lt;url&gt; ...]
Options: Options:
-h, --help show this help text -h, --help show this help text
@ -643,27 +643,27 @@ Environment:
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="294"/> <location filename="main.cxx" line="335"/>
<source>Cannot read PEM certificate from file: %1</source> <source>Cannot read PEM certificate from file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="300"/> <location filename="main.cxx" line="341"/>
<source>Read PEM certificates from file: %1</source> <source>Read PEM certificates from file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="307"/> <location filename="main.cxx" line="348"/>
<source>Cannot read PEM RSA key from file: %1</source> <source>Cannot read PEM RSA key from file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="312"/> <location filename="main.cxx" line="353"/>
<source>Read private key from file: %1</source> <source>Read private key from file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="main.cxx" line="323"/> <location filename="main.cxx" line="364"/>
<source>Too few arguments. <source>Too few arguments.
Try: %1 --help</source> Try: %1 --help</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>

Loading…
Cancel
Save