mirror of
https://github.com/chris2511/xca.git
synced 2026-09-13 18:46:25 +05:00
149 lines
3.9 KiB
C++
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()
|
|
{
|
|
NewKeyDlg_UI *dlg = new NewKeyDlg_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)
|
|
{
|
|
KeyDetailDlg_UI *detDlg = new KeyDetailDlg_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");
|
|
|
|
}
|
|
|
|
|