From ea832c6654e1358690d048f758a16c9eda477d4e Mon Sep 17 00:00:00 2001 From: Christian Hohnstaedt Date: Sun, 26 Oct 2014 06:42:57 +0100 Subject: [PATCH] Refuse signing with ECC token as long as it does not work --- lib/pkcs11_lib.cpp | 4 ++++ lib/pki_key.cpp | 2 +- lib/pki_key.h | 2 +- lib/pki_scard.cpp | 7 ++++--- lib/pki_scard.h | 2 +- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/pkcs11_lib.cpp b/lib/pkcs11_lib.cpp index cc704eae..259d791a 100644 --- a/lib/pkcs11_lib.cpp +++ b/lib/pkcs11_lib.cpp @@ -40,12 +40,16 @@ pkcs11_lib::pkcs11_lib(QString f) goto how_bad; rv = p11->C_Initialize(NULL); + ign_openssl_error(); if (rv != CKR_OK && rv != CKR_CRYPTOKI_ALREADY_INITIALIZED) pk11error("C_Initialize", rv); + ign_openssl_error(); return; how_bad: + if (dl_handle) + lt_dlclose(dl_handle); lt_dlexit(); throw errorEx(QObject::tr("Failed to open PKCS11 library: %1"). arg(file)); diff --git a/lib/pki_key.cpp b/lib/pki_key.cpp index 1d33cc70..55b47b06 100644 --- a/lib/pki_key.cpp +++ b/lib/pki_key.cpp @@ -83,7 +83,7 @@ QString pki_key::length() return QString("%1 bit").arg(EVP_PKEY_bits(key)); } -QString pki_key::getTypeString() +QString pki_key::getTypeString() const { QString type; switch (EVP_PKEY_type(key->type)) { diff --git a/lib/pki_key.h b/lib/pki_key.h index 05a6322c..ca64d273 100644 --- a/lib/pki_key.h +++ b/lib/pki_key.h @@ -51,7 +51,7 @@ class pki_key: public pki_base return NULL; } virtual bool isToken(); - virtual QString getTypeString(void); + virtual QString getTypeString(void) const; virtual QString getIntNameWithType(void); virtual QList possibleHashNids() { diff --git a/lib/pki_scard.cpp b/lib/pki_scard.cpp index cb49ac8d..8b09f766 100644 --- a/lib/pki_scard.cpp +++ b/lib/pki_scard.cpp @@ -585,7 +585,7 @@ bool pki_scard::isPubKey() const return false; } -QString pki_scard::getTypeString(void) +QString pki_scard::getTypeString(void) const { return tr("Token %1").arg(pki_key::getTypeString()); } @@ -613,9 +613,10 @@ EVP_PKEY *pki_scard::decryptKey() const } EVP_PKEY *pkey = p11->getPrivateKey(key, priv_objects[0]); - if (!pkey) + if (!pkey) { delete p11; - + throw errorEx(tr("Failed to initialize the key on the token")); + } pki_openssl_error(); return pkey; } diff --git a/lib/pki_scard.h b/lib/pki_scard.h index babe178b..cffe9104 100644 --- a/lib/pki_scard.h +++ b/lib/pki_scard.h @@ -37,7 +37,7 @@ class pki_scard: public pki_key void fromData(const unsigned char *p, db_header_t *head); QByteArray toData(); bool isPubKey() const; - QString getTypeString(void); + QString getTypeString(void) const; QString getManufacturer() const { return card_manufacturer;