#include "MainWindow.h" const int MainWindow::sizeList[] = {256, 512, 1024, 2048, 4096, 0 }; RSAkey *MainWindow::getSelectedKey() { RSAkey *targetKey = keys->getSelectedKey(); if (targetKey) { char *errtxt = targetKey->getError(); if (errtxt) QMessageBox::warning(this,"Schlüssel Fehler", "Der Schlüssel: " + targetKey->description() + "\nist nicht konsistent:\n" + errtxt); } 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); RSAkey *nkey = new RSAkey (dlg->keyDesc->text(), sizeList[sel], &MainWindow::incProgress, progress); progress->cancel(); keys->insertKey(nkey); } } void MainWindow::deleteKey() { RSAkey *delKey = getSelectedKey(); if (!delKey) return; if (QMessageBox::information(this,"Schlüssel löschen", "Möchten Sie den Schlüssel: '" + delKey->description() + "'\nwirklich löschen ?\n", "Löschen", "Abbrechen") ) return; keys->deleteKey(delKey); } void MainWindow::showDetailsKey(RSAkey *key) { KeyDetail_UI *detDlg = new KeyDetail_UI(this, 0, true, 0 ); detDlg->keyDesc->setText( key->description() ); detDlg->keyLength->setText( key->length() ); detDlg->keyPubEx->setText( key->pubEx() ); detDlg->keyModulus->setText( key->modulus() ); detDlg->keyPrivEx->setText( key->privEx() ); if ( !detDlg->exec()) return; QString ndesc = detDlg->keyDesc->text(); if (ndesc != key->description()) { keys->updateKey(key, ndesc); } } void MainWindow::showDetailsKey() { RSAkey *targetKey = getSelectedKey(); if (targetKey) showDetailsKey(targetKey); } void MainWindow::loadKey() { RSAkey *oldkey; QStringList filt; filt.append( "PKI Schlüssel ( *.pem *.der *.pk8 )"); filt.append("Alle Dateien ( *.* )"); QString s; QFileDialog *dlg = new QFileDialog(this,0,true); dlg->setCaption("Schlüssel importieren"); dlg->setFilters(filt); if (dlg->exec()) s = dlg->selectedFile(); if (s.isEmpty()) return; char *errtxt; RSAkey *lkey = new RSAkey(s, &MainWindow::passRead); if ((errtxt = lkey->getError()) != NULL) { QMessageBox::warning(this,"Datei Fehler", "Der Schlüssel: " + s + "\nkonnte nicht geladen werden:\n" + errtxt); return; } if ((oldkey = keys->findPublicKey(lkey))!= 0) { if ((!oldkey->onlyPubKey && !lkey->onlyPubKey) || lkey->onlyPubKey){ QMessageBox::information(this,"Schlüssel import", "Der Schlüssel ist bereits vorhanden als:\n'" + oldkey->description() + "'\nund wurde daher nicht importiert", "OK"); return; } else { QMessageBox::information(this,"Schlüssel import", "Der öffentliche Teil des Schlüssels ist bereits vorhanden als:\n'" + oldkey->description() + "'\nund wird durch den neuen, vollständigen Schlüssel ersetzt", "OK"); keys->deleteKey(oldkey); lkey->setDescription(oldkey->description()); delete(oldkey); } } if (keys->insertKey(lkey)) QMessageBox::information(this,"Schlüssel import", "Der Schlüssel wurde erfolgreich importiert als:\n'" + lkey->description() + "'", "OK"); else QMessageBox::warning(this,"Schlüssel import", "Der Schlüssel konnte nicht in der Datenbank \ gespeichert werden", "OK"); } void MainWindow::writeKey() { bool PEM=false; EVP_CIPHER *enc = NULL; RSAkey *targetKey = NULL; targetKey = getSelectedKey(); if (!targetKey) return; ExportKey *dlg = new ExportKey(targetKey->description() + ".pem", targetKey->onlyPubKey, this); dlg->exportFormat->insertItem("PEM"); dlg->exportFormat->insertItem("DER"); if (!targetKey->onlyPubKey) dlg->exportFormat->insertItem("PKCS#8"); if (!dlg->exec()) return; QString fname = dlg->filename->text(); if (fname.isEmpty()) 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); } char *errtxt; if ((errtxt = targetKey->getError()) != NULL) { QMessageBox::warning(this,"Datei Fehler", "Der Schlüssel: '" + fname + "'\nkonnte nicht geschrieben werden:\n" + errtxt); return; } QMessageBox::information(this,"Schlüssel export", "Der Schlüssel wurde erfolgreich in die Datei:\n'" + fname + "' exportiert", "OK"); }