xca/MainWindowKeys.cpp
2002-02-19 21:20:57 +00:00

180 lines
4.8 KiB
C++

#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");
}