⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainwindowkeys.cpp

📁 一个小型证书管理系统
💻 CPP
字号:
/* * Copyright (C) 2001 Christian Hohnstaedt. * *  All rights reserved. * * *  Redistribution and use in source and binary forms, with or without  *  modification, are permitted provided that the following conditions are met: * *  - Redistributions of source code must retain the above copyright notice, *    this list of conditions and the following disclaimer. *  - Redistributions in binary form must reproduce the above copyright notice, *    this list of conditions and the following disclaimer in the documentation *    and/or other materials provided with the distribution. *  - Neither the name of the author nor the names of its contributors may be  *    used to endorse or promote products derived from this software without *    specific prior written permission. * * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * * This program links to software with different licenses from: * *	http://www.openssl.org which includes cryptographic software * 	written by Eric Young (eay@cryptsoft.com)" * *	http://www.sleepycat.com * *	http://www.trolltech.com *  * * * http://www.hohnstaedt.de/xca * email: christian@hohnstaedt.de * * $Id: MainWindowKeys.cpp,v 1.42 2003/01/06 19:35:46 chris Exp $  * */                           #include "MainWindow.h"const int MainWindow::sizeList[] = {256, 512, 1024, 2048, 4096, 0 };pki_key *MainWindow::getSelectedKey(){	CERR( "get Selected Key");	pki_key *targetKey = (pki_key *)keys->getSelectedPKI();	CERR( "got selected: "<< (int)targetKey );	if (targetKey) {	   string errtxt = targetKey->getError();	   if (errtxt != "")		QMessageBox::warning(this,tr(XCA_TITLE),			tr("The Key: ") + QString::fromLatin1(targetKey->getDescription().c_str()) +			tr(" is not consistent:") + QString::fromLatin1(errtxt.c_str()) );	}	CERR( "targetKey = " << (int)targetKey );	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);	dlg->image->setPixmap(*keyImg);	if (dlg->exec()) {	  try {	   int sel = dlg->keyLength->currentItem();	   QProgressDialog *progress = new QProgressDialog(		tr("Please wait, Key generation is in progress"),		tr("Cancel"),90, 0, 0, true);	   progress->setMinimumDuration(0);	   progress->setProgress(0);		   progress->setCaption(tr(XCA_TITLE));	   pki_key *nkey = new pki_key (dlg->keyDesc->text().latin1(), 		       &MainWindow::incProgress,		       progress,		       sizeList[sel]);           progress->cancel();	   delete progress;	   insertKey(nkey);	   x = nkey->getDescription().c_str();	   emit keyDone(x);	  }	  catch (errorEx &err) {		  Error(err);	  }	}	delete dlg;}void MainWindow::deleteKey(){	pki_key *delKey = getSelectedKey();	if (!delKey) return;	if (QMessageBox::information(this,tr(XCA_TITLE),			tr("The key") + ": '" + 			QString::fromLatin1(delKey->getDescription().c_str()) +			"'\n" + tr("is going to be deleted"),			"Delete", "Cancel")	) return;	try {		keys->deletePKI(delKey);	}	catch (errorEx &err) {		Error(err);	}}bool MainWindow::showDetailsKey(pki_key *key, bool import){	if (opensslError(key)) return false;	KeyDetail_UI *detDlg = new KeyDetail_UI(this, 0, true, 0 );	try {			detDlg->setCaption(tr(XCA_TITLE));		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() );		if (key->isPubKey()) {			detDlg->keyPrivEx->setText(tr("not available") );			detDlg->keyPrivEx->setDisabled(true);		}		detDlg->image->setPixmap(*keyImg);		if (import) {			detDlg->but_ok->setText(tr("Import"));			detDlg->but_cancel->setText(tr("Discard"));		}	}	catch (errorEx &err) {		Error(err);		delete detDlg;		return false;	}	bool ret = detDlg->exec();	string ndesc = detDlg->keyDesc->text().latin1();	delete detDlg;	CERR(ndesc << " " << key->getDescription());	if ( ret && ndesc != key->getDescription()) {		MARK		try {			keys->renamePKI(key, ndesc);			MARK		}		catch (errorEx &err) {			Error(err);		}		return true;	}	MARK	return false;}void MainWindow::showDetailsKey(){	pki_key *targetKey = getSelectedKey();	if (targetKey) showDetailsKey(targetKey);}void MainWindow::showDetailsKey(QListViewItem *item){	string key = item->text(0).latin1();	showDetailsKey((pki_key *)keys->getSelectedPKI(key));}void MainWindow::loadKey(){	QStringList filt;	filt.append( "PKI Keys ( *.pem *.der )"); 	filt.append( "PKCS#8 Keys ( *.p8 *.pk8 )"); 	filt.append( "All Files ( *.* )");	QString s="";	QStringList slist;	QFileDialog *dlg = new QFileDialog(this,0,true);	dlg->setCaption("Import key");	dlg->setFilters(filt);	dlg->setMode( QFileDialog::ExistingFiles );	setPath(dlg);	if (dlg->exec()) {		slist = dlg->selectedFiles();		newPath(dlg);	}	delete dlg;	for ( QStringList::Iterator it = slist.begin(); it != slist.end(); ++it ) {		s = *it;		s = QDir::convertSeparators(s);		try {			pki_key *lkey = new pki_key(s.latin1(), &MainWindow::passRead);			insertKey(lkey);		}		catch (errorEx &err) {			Error(err);		}	}}void MainWindow::insertKey(pki_key *lkey){		pki_key *oldkey;	try {	    oldkey = (pki_key *)keys->findPKI(lkey);	    if (oldkey != NULL) {		if ((oldkey->isPrivKey() && lkey->isPrivKey()) ||		    lkey->isPubKey()){	   	    QMessageBox::information(this,tr(XCA_TITLE),			tr("The key is already in the database as") +":\n'" +			QString::fromLatin1(oldkey->getDescription().c_str()) + 			"'\n" + tr("and is not going to be imported"), "OK");		    delete(lkey);		    return;		}		else {	   	    QMessageBox::information(this,tr(XCA_TITLE),			tr("The database already contains the public part of the imported key as") +":\n'" +			QString::fromLatin1(oldkey->getDescription().c_str()) + 			"'\n" + tr("and will be completed by the new, private part of the key"), "OK");		    CERR( "before deleting pki...");		    keys->deletePKI(oldkey);		    lkey->setDescription(oldkey->getDescription());		    delete(oldkey);		}	    }	    CERR( "after findkey");	    keys->insertPKI(lkey);	}	catch (errorEx &err) {		Error(err);	}}void MainWindow::writeKey(){	bool PEM=false;	const 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->image->setPixmap(*keyImg);	if (!dlg->exec()) {		delete dlg;		return;	}	string fname = dlg->filename->text().latin1();	if (fname == "") {		delete dlg;		return;	}	try {		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);		}	}	catch (errorEx &err) {		Error(err);	}	delete dlg;}void MainWindow::showPopupKey(QListViewItem *item, const QPoint &pt, int x) {	CERR( " popup key" );	QPopupMenu *menu = new QPopupMenu(this);	if (!item) {		menu->insertItem(tr("New Key"), this, SLOT(newKey()));		menu->insertItem(tr("Import"), this, SLOT(loadKey()));	}	else {		menu->insertItem(tr("Rename"), this, SLOT(startRenameKey()));		menu->insertItem(tr("Show Details"), this, SLOT(showDetailsKey()));		menu->insertItem(tr("Export"), this, SLOT(writeKey()));		menu->insertItem(tr("Delete"), this, SLOT(deleteKey()));	}	menu->exec(pt);	delete menu;	return;}void MainWindow::renameKey(QListViewItem *item, int col, const QString &text){	try {		pki_base *pki = keys->getSelectedPKI(item);		string txt =  text.latin1();		keys->renamePKI(pki, txt);	}	catch (errorEx &err) {		Error(err);	}}void MainWindow::startRenameKey(){	try {#ifdef qt3		pki_base *pki = keys->getSelectedPKI();		if (!pki) return;		QListViewItem *item = (QListViewItem *)pki->getPointer();		item->startRename(0);#else		renamePKI(keys);#endif	}	catch (errorEx &err) {		Error(err);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -