void db_key::toToken() { pki_key *key = static_cast<pki_scard*>(currentIdx.internalPointer()); if (!key || !pkcs11::loaded() || key->isToken()) return; pki_scard *card = NULL; try { pkcs11 p11; slotid slot; if (!p11.selectToken(&slot, mainwin)) return; card = new pki_scard(key->getIntName()); card->store_token(slot, key->decryptKey()); QString msg = tr("Shall the original key '%1' be replaced by the key on the token?\nThis will delete the key '%1' and make it unexportable"). arg(key->getIntName()); if (QMessageBox::question(mainwin, XCA_TITLE, msg, QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { deletePKI(); insertPKI(card); card = NULL; } } catch (errorEx &err) { mainwin->Error(err); } if (card) delete card; }
pki_base* db_key::insert(pki_base *item) { pki_key *lkey = (pki_key *)item; pki_key *oldkey; oldkey = (pki_key *)getByReference(lkey); if (oldkey != NULL) { if ((oldkey->isPrivKey() && lkey->isPrivKey()) || lkey->isPubKey()){ QMessageBox::information(mainwin, XCA_TITLE, tr("The key is already in the database as:\n'%1'\nand is not going to be imported").arg(oldkey->getIntName())); delete(lkey); return NULL; } else { QMessageBox::information(mainwin, XCA_TITLE, tr("The database already contains the public part of the imported key as\n'%1\nand will be completed by the new, private part of the key").arg(oldkey->getIntName())); lkey->setIntName(oldkey->getIntName()); currentIdx = index(oldkey->row(), 0, QModelIndex()); deletePKI(); currentIdx = QModelIndex(); } } insertPKI(lkey); return lkey; }
pki_base *db_x509req::insert(pki_base *item) { pki_x509req *oldreq, *req; req = (pki_x509req *)item; oldreq = (pki_x509req *)getByReference(req); if (oldreq) { XCA_INFO(tr("The certificate signing request already exists in the database as\n'%1'\nand thus was not stored").arg(oldreq->getIntName())); delete(req); return NULL; } insertPKI(req); return req; }