xca/widgets/Options.cpp
Christian Hohnstaedt 0aced7f2c4 improve Smart-card handling
- if PublicKey or Cert CKA_LABEL fails, try CKA_SUBJECT
 - don't use CKA_VALUE attribute on PUBLIC_KEY,
   because not everyone supports it.
   While being at it, add code for DSA and EC Cards.
 - load PKCS#11 engine only after database open.
 - avoid reloading the DLL on windows, because it is not supported.
   Windows users need to restart XCA after changing the PKCS#11 path
 - fix getSlotList() and return a QList<unsigned long>
2009-11-11 22:58:34 +01:00

105 lines
2.2 KiB
C++

/* vi: set sw=4 ts=4:
*
* Copyright (C) 2001 - 2007 Christian Hohnstaedt.
*
* All rights reserved.
*/
#include "Options.h"
#include "lib/pki_scard.h"
#include <openssl/objects.h>
#include <qmessagebox.h>
Options::Options(MainWindow *parent)
:QDialog(parent)
{
mw = parent;
QStringList dnl;
if (!MainWindow::mandatory_dn.isEmpty())
dnl = MainWindow::mandatory_dn.split(",");
NIDlist dn_nid = *MainWindow::dn_nid;
setWindowTitle(tr(XCA_TITLE));
setupUi(this);
for (int i=0; i < dn_nid.count(); i++)
extDNobj->addItem(OBJ_nid2ln(dn_nid[i]));
for (int i=0; i < dnl.count(); i++) {
int nid;
nid = OBJ_sn2nid(CCHAR(dnl[i]));
extDNlist->insertItem(0, OBJ_nid2ln(nid));
}
string_opts << "default" << "nombstr" << "pkix" << "utf8only";
QStringList s;
s << tr("automatic detection (default)")
<< tr("No BMP strings: only printable and T61")
<< tr("PKIX recommendation in RFC2459")
<< tr("UTF8 strings only (RFC2459)");
mbstring->addItems(s);
}
void Options::on_extDNadd_clicked()
{
extDNlist->addItem(extDNobj->currentText());
}
void Options::on_extDNdel_clicked()
{
extDNlist->takeItem(extDNlist->currentRow());
}
QString Options::getDnString()
{
QStringList dn;
for (int j=0; j<extDNlist->count(); j++) {
int nid;
nid = OBJ_ln2nid(CCHAR(extDNlist->item(j)->text()));
dn << QString(OBJ_nid2sn(nid));
}
return dn.join(",");
}
void Options::setStringOpt(const QString string_opt)
{
int index = string_opts.indexOf(string_opt);
if (index < 0)
index = 0;
mbstring->setCurrentIndex(index);
}
QString Options::getStringOpt()
{
return string_opts[mbstring->currentIndex()];
}
void Options::on_fileButton_clicked(void)
{
load_pkcs11 l;
QString fname;
fname = QFileDialog::getOpenFileName(this, l.caption,
pkcs11path->text(), l.filter);
if (fname.isEmpty())
return;
pkcs11path->setText(fname);
}
void Options::on_tryLoadButton_clicked(void)
{
try {
QString lib = pkcs11path->text();
pki_scard::init_p11engine(lib, false);
pkcs11 p11;
p11.getSlotList();
if (!lib.isEmpty()) {
QMessageBox::information(this, XCA_TITLE,
tr("Successfully loaded PKCS#11 library: ") + lib,
tr("Ok"));
}
} catch (errorEx &err) {
mw->Error(err);
}
}