xca/MainWindowKeys.cpp
chris f39391c018 Version++
works with new classes in libs
images added
2002-03-03 19:22:12 +00:00

190 lines
5.3 KiB
C++

#include "MainWindow.h"
const int MainWindow::sizeList[] = {256, 512, 1024, 2048, 4096, 0 };
pki_key *MainWindow::getSelectedKey()
{
cerr << "get Selected Key\n";
pki_key *targetKey = (pki_key *)keys->getSelectedPKI();
cerr << "got selected: "<< (int)targetKey << endl;
if (targetKey) {
string errtxt = targetKey->getError();
if (errtxt != "")
QMessageBox::warning(this,"Schlüssel Fehler",
("Der Schlüssel: " + targetKey->getDescription() +
"\nist nicht konsistent:\n" + errtxt).c_str());
}
cerr << "targetKey = " << (int)targetKey << endl;
return targetKey;
}
void MainWindow::newKey()
{
NewKey_UI *dlg = new NewKey_UI(this,0,true,0);
QString x;
for (int i=0; sizeList[i] != 0; i++ )
dlg->keyLength->insertItem( x.number(sizeList[i]) +" bit");
dlg->keyLength->setCurrentItem(2);
if (dlg->exec()) {
int sel = dlg->keyLength->currentItem();
QProgressDialog *progress = new QProgressDialog(
"Bitte warten Sie, der Schlüssel wird erstellt",
"Abbrechen",90, 0, 0, true);
progress->setMinimumDuration(0);
progress->setProgress(0);
pki_key *nkey = new pki_key (dlg->keyDesc->text().latin1(),
&MainWindow::incProgress,
progress,
sizeList[sel]);
progress->cancel();
keys->insertPKI(nkey);
}
}
void MainWindow::deleteKey()
{
pki_key *delKey = getSelectedKey();
if (!delKey) return;
if (QMessageBox::information(this,"Schlüssel löschen",
("Möchten Sie den Schlüssel: '" +
delKey->getDescription() +
"'\nwirklich löschen ?\n").c_str(),
"Löschen", "Abbrechen")
) return;
keys->deletePKI(delKey);
}
void MainWindow::showDetailsKey(pki_key *key)
{
if (key == NULL ) return;
KeyDetail_UI *detDlg = new KeyDetail_UI(this, 0, true, 0 );
detDlg->keyDesc->setText(
key->getDescription().c_str() );
detDlg->keyLength->setText(
key->length().c_str() );
detDlg->keyPubEx->setText(
key->pubEx().c_str() );
detDlg->keyModulus->setText(
key->modulus().c_str() );
detDlg->keyPrivEx->setText(
key->privEx().c_str() );
if ( !detDlg->exec()) return;
string ndesc = detDlg->keyDesc->text().latin1();
if (ndesc != key->getDescription()) {
keys->updatePKI(key, ndesc);
}
}
void MainWindow::showDetailsKey()
{
pki_key *targetKey = getSelectedKey();
if (targetKey) showDetailsKey(targetKey);
}
void MainWindow::loadKey()
{
pki_key *oldkey;
QStringList filt;
filt.append( "PKI Schlüssel ( *.pem *.der *.pk8 )");
filt.append("Alle Dateien ( *.* )");
string s;
QFileDialog *dlg = new QFileDialog(this,0,true);
dlg->setCaption("Schlüssel importieren");
dlg->setFilters(filt);
if (dlg->exec())
s = dlg->selectedFile().latin1();
if (s == "") return;
string errtxt;
pki_key *lkey = new pki_key(s, &MainWindow::passRead);
if ((errtxt = lkey->getError()) != "") {
QMessageBox::warning(this,"Datei Fehler",
("Der Schlüssel: " + s +
"\nkonnte nicht geladen werden:\n" + errtxt).c_str());
return;
}
cerr << "before findkey\n";
if ((oldkey = (pki_key *)keys->findPKI(lkey))!= 0) {
if ((oldkey->isPrivKey() && lkey->isPrivKey()) ||
lkey->isPubKey()){
QMessageBox::information(this,"Schlüssel import",
("Der Schlüssel ist bereits vorhanden als:\n'" +
oldkey->getDescription() +
"'\nund wurde daher nicht importiert").c_str(), "OK");
return;
}
else {
QMessageBox::information(this,"Schlüssel import",
("Der öffentliche Teil des Schlüssels ist bereits vorhanden als:\n'" +
oldkey->getDescription() +
"'\nund wird durch den neuen, vollständigen Schlüssel ersetzt").c_str(), "OK");
cerr << "before deleting pki...\n";
keys->deletePKI(oldkey);
lkey->setDescription(oldkey->getDescription());
delete(oldkey);
}
}
showDetailsKey(lkey);
cerr << "after findkey\n";
if (keys->insertPKI(lkey))
QMessageBox::information(this,"Schlüssel import",
("Der Schlüssel wurde erfolgreich importiert als:\n'" +
lkey->getDescription() + "'").c_str(), "OK");
else
QMessageBox::warning(this,"Schlüssel import",
"Der Schlüssel konnte nicht in der Datenbank \
gespeichert werden", "OK");
cerr << "after insert\n";
}
void MainWindow::writeKey()
{
bool PEM=false;
EVP_CIPHER *enc = NULL;
pki_key *targetKey = NULL;
targetKey = getSelectedKey();
if (!targetKey) return;
ExportKey *dlg = new ExportKey((targetKey->getDescription() + ".pem").c_str(),
targetKey->isPubKey(), this);
dlg->exportFormat->insertItem("PEM");
dlg->exportFormat->insertItem("DER");
if (targetKey->isPrivKey())
dlg->exportFormat->insertItem("PKCS#8");
if (!dlg->exec()) return;
string fname = dlg->filename->text().latin1();
if (fname == "") return;
if (dlg->exportFormat->currentText() == "PEM") PEM = true;
if (dlg->exportFormat->currentText() == "PKCS#8")
targetKey->writePKCS8(fname, &MainWindow::passWrite);
else if (dlg->exportPrivate->isChecked()) {
if (dlg->encryptKey->isChecked())
enc = EVP_des_ede3_cbc();
targetKey->writeKey(fname, enc, &MainWindow::passWrite, PEM);
}
else {
targetKey->writePublic(fname, PEM);
}
string errtxt;
if ((errtxt = targetKey->getError()) != "") {
QMessageBox::warning(this,"Datei Fehler",
("Der Schlüssel: '" + fname +
"'\nkonnte nicht geschrieben werden:\n" + errtxt).c_str());
return;
}
QMessageBox::information(this,"Schlüssel export",
("Der Schlüssel wurde erfolgreich in die Datei:\n'" +
fname + "' exportiert").c_str(), "OK");
}