xca/MainWindowKeys.cpp
2002-02-14 21:08:01 +00:00

149 lines
3.9 KiB
C++

#include "MainWindow.h"
const int MainWindow::sizeList[] = {256, 512, 1024, 2048, 4096, 0 };
RSAkey *MainWindow::getSelectedKey()
{
RSAkey *targetKey = keys->getSelectedKey();
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() +
"' wirklich 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()
{
QString s(QFileDialog::getOpenFileName( QString::null, "PEM Schlüssel (*.pem *.der)", this));
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 (keys->insertKey(lkey))
QMessageBox::information(this,"Schlüssel import",
"Der Schlüssel wurde erfolgreich importiert als: '" +
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 = 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 '" +
fname + "' exportiert", "OK");
}