*** empty log message ***

This commit is contained in:
chris2511 2003-06-24 23:49:47 +00:00
parent 75e8368656
commit 5ac8e13d36
26 changed files with 211 additions and 4608 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,104 +0,0 @@
/*
* 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$
*
*/
#ifndef CERTVIEW_H
#define CERTVIEW_H
#include "XcaListView.h"
#include "lib/pki_x509.h"
#include "lib/pki_pkcs12.h"
#include <qlistview.h>
#include "widgets/NewX509.h"
class CertView : public XcaListView
{
Q_OBJECT
private:
int viewState;
bool mkDir(QString dir);
public:
CertView(QWidget * parent = 0, const char * name = 0, WFlags f = 0);
void showItem(pki_base *item, bool import);
void newItem();
void deleteItem();
void updateViewItem(pki_base *);
void load();
pki_base* loadItem(QString fname);
pki_base* insert(pki_base *item);
void store();
void popupMenu(QListViewItem *item, const QPoint &pt, int x);
void newCert();
void newCert(NewX509 *dlg);
void extendCert();
void loadPKCS12();
void insertP12(pki_pkcs12 *pk12);
void loadPKCS7();
void writePKCS12(QString s, bool chain);
void writePKCS7(QString s, int type);
public slots:
void signP7();
void encryptP7();
void setTrust();
void toRequest();
void revoke();
void unRevoke();
void setSerial();
void setCrlDays();
void setTemplate();
void changeView();
void toTinyCA();
bool updateView();
void updateViewAll();
};
#endif

View File

@ -1,236 +0,0 @@
/*
* 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$
*
*/
#include "CrlView.h"
#include <qpopupmenu.h>
#include "lib/pki_crl.h"
#include "widgets/MainWindow.h"
void CrlView::showItem(pki_base *item, bool import)
{
pki_crl *crl = (pki_crl *)item;
if (!crl) return;
try {
CrlDetail_UI *dlg = new CrlDetail(this,0,true);
connect( dlg->certList, SIGNAL( doubleClicked(QListViewItem*) ),
this, SLOT( showDetailsCert(QListViewItem *) ));
QString odesc = crl->getIntName();
ret = dlg->exec();
QString ndesc = dlg->descr->text();
delete dlg;
if (!ret && import) {
delete crl;
}
if (!ret) return;
if (MainWindow::crls == NULL) {
emit init_database();
}
if (import) {
crl = insert(crl);
}
if (ndesc != odesc) {
crls->renamePKI(crl, ndesc);
}
}
catch (errorEx &err) {
Error(err);
}
return;
}
void CrlView::deleteItem()
{
deleteItem_default(tr("The Revokation list"),
tr("is going to be deleted"));
}
pki_base *CrlView::loadItem(QString fname)
{
pki_base *crl = new pki_crl(fname, &MainWindow::passRead);
return crl;
}
void CrlView::loadCrl()
{
QStringList filter;
filt.append(tr("Revokation lists ( *.pem *.crl )"));
filt.append(tr("All files ( *.* )"));
load_default(filter, tr("Load CRL"));
}
pki_crl *CrlView::insert(pki_base *item)
{
pki_crl * crl = (pki_crl *)item;
try {
MARK
pki_crl *oldcrl = (pki_crl *)crls->findPKI(crl);
MARK
if (oldcrl) {
QMessageBox::information(this,tr(XCA_TITLE),
tr("The revokation list already exists in the database as") +":\n'" +
QString::fromLatin1(oldcrl->getDescription().c_str()) +
"'\n" + tr("and so it was not imported"), "OK");
delete(crl);
return oldcrl;
}
CERR( "insertCrl: inserting" );
crls->insertPKI(crl);
}
catch (errorEx &err) {
Error(err);
}
return crl;
}
void CrlView::writeCrl_pem()
{
store(true);
}
void CrlView::writeCrl_der()
{
store(false);
}
void CrlView::store(bool pem)
{
pki_crl *crl;
try {
crl = (pki_crl *)crls->getSelectedPKI();
}
catch (errorEx &err) {
Error(err);
return;
}
if (!crl) return;
QStringList filt;
filt.append("Revokation Lists ( *.crl *.pem)");
filt.append("All Files ( *.* )");
QString s="";
QFileDialog *dlg = new QFileDialog(this,0,true);
dlg->setCaption(tr("Export Certificate revokation list"));
dlg->setFilters(filt);
dlg->setMode( QFileDialog::AnyFile );
dlg->setSelection( (crl->getDescription() + ".crl").c_str() );
setPath(dlg);
if (dlg->exec()) {
s = dlg->selectedFile();
newPath(dlg);
}
delete dlg;
if (s.isEmpty()) return;
s=QDir::convertSeparators(s);
try {
crl->writeCrl(s.latin1(), pem);
}
catch (errorEx &err) {
Error(err);
}
}
void CrlView::popupMenu(QListViewItem *item, const QPoint &pt, int x) {
CERR( "popup Crl");
QPopupMenu *menu = new QPopupMenu(this);
QPopupMenu *subExport = new QPopupMenu(this);
if (!item) {
menu->insertItem(tr("Import"), this, SLOT(loadCrl()));
}
else {
menu->insertItem(tr("Rename"), this, SLOT(startRenameCrl()));
menu->insertItem(tr("Show Details"), this, SLOT(showDetailsCrl()));
menu->insertItem(tr("Export"), subExport);
subExport->insertItem(tr("PEM"), this, SLOT(writeCrl_pem()));
subExport->insertItem(tr("DER"), this, SLOT(writeCrl_der()));
menu->insertItem(tr("Delete"), this, SLOT(deleteCrl()));
}
menu->exec(pt);
delete menu;
delete subExport;
return;
}
pki_crl *CrlView::newItem(pki_x509 *cert)
{
QList<pki_x509> list;
pki_x509 *issuedcert = NULL;
pki_crl *crl = NULL;
try {
crl = new pki_crl(cert->getIntName(), cert);
list = MainWindow::certs->getIssuedCerts(cert);
if (!list.isEmpty()) {
for ( issuedcert = list.first(); issuedcert != NULL; issuedcert = list.next() ) {
if (issuedcert->isRevoked() ) {
crl->addRevoked(issuedcert);
}
}
}
crl->addV3ext(NID_authority_key_identifier,"keyid,issuer");
crl->addV3ext(NID_issuer_alt_name,"issuer:copy");
crl->sign(cert->getKey());
cert->setLastCrl(crl->getDate());
certs->updatePKI(cert);
CERR( "CRL done, completely");
}
catch (errorEx &err) {
Error(err);
}
return crl;
}

View File

@ -1,79 +0,0 @@
/*
* 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$
*
*/
#ifndef CRLVIEW_H
#define CRLVIEW_H
#include "XcaListView.h"
#include <qlistview.h>
class CrlView : public XcaListView
{
Q_OBJECT
private:
static const int sizeList[];
static void incProgress(int a, int b, void *progress);
public:
CrlView(QWidget * parent = 0, const char * name = 0, WFlags f = 0);
void showItem(pki_base *item, bool import);
void newItem();
void deleteItem();
void load();
pki_base *loadItem(QString fname);
pki_base* insert(pki_base *item);
void store(bool);
void popupMenu(QListViewItem *item, const QPoint &pt, int x);
void writeCrl_pem();
void writeCrl_der();
};
#endif

View File

@ -1,283 +0,0 @@
/*
* 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$
*
*/
#include "KeyView.h"
#include "ui/NewKey.h"
#include "ui/KeyDetail.h"
#include "widgets/ExportKey.h"
#include "widgets/MainWindow.h"
#include <qcombobox.h>
#include <qlabel.h>
#include <qprogressdialog.h>
#include <qtextview.h>
#include <qmessagebox.h>
#include <qpopupmenu.h>
const int KeyView::sizeList[] = {256, 512, 1024, 2048, 4096, 0 };
KeyView::KeyView(QWidget * parent = 0, const char * name = 0, WFlags f = 0)
:XcaListView(parent, name, f)
{
addColumn(tr("Keysize"));
addColumn(tr("Use count"));
}
void KeyView::newItem()
{
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(*MainWindow::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(),
&incProgress,
progress,
sizeList[sel]);
progress->cancel();
delete progress;
insert(nkey);
x = nkey->getIntName();
emit keyDone(x);
}
catch (errorEx &err) {
Error(err);
}
}
delete dlg;
}
void KeyView::deleteItem()
{
deleteItem_default(tr("The key"), tr("is going to be deleted"));
}
void KeyView::showItem(pki_base *item, bool import)
{
pki_key *key = (pki_key *)item;
if (!key) return;
KeyDetail_UI *detDlg = new KeyDetail_UI(this, 0, true, 0 );
try {
detDlg->setCaption(tr(XCA_TITLE));
detDlg->keyDesc->setText( key->getIntName() );
detDlg->keyLength->setText( key->length() );
detDlg->keyPubEx->setText( key->pubEx() );
detDlg->keyModulus->setText( key->modulus());
if (key->isPubKey()) {
detDlg->keyPrivEx->setText(tr("not available") );
detDlg->keyPrivEx->setDisabled(true);
}
detDlg->image->setPixmap(*MainWindow::keyImg);
if (import) {
detDlg->but_ok->setText(tr("Import"));
detDlg->but_cancel->setText(tr("Discard"));
}
}
catch (errorEx &err) {
Error(err);
delete detDlg;
return;
}
QString odesc = key->getIntName();
bool ret = detDlg->exec();
QString ndesc = detDlg->keyDesc->text();
delete detDlg;
if (!ret && import) {
delete key;
}
if (!ret) return;
emit init_database();
if (import) {
key = (pki_key *)insert(key);
}
CERR(ndesc << " " << key->getIntName());
if ( ndesc != odesc) {
MARK
try {
db->renamePKI(key, ndesc);
MARK
}
catch (errorEx &err) {
Error(err);
}
return;
}
}
void KeyView::load()
{
QStringList filter;
filter.append( "PKI Keys ( *.pem *.der *.key )");
filter.append( "PKCS#8 Keys ( *.p8 *.pk8 )");
load_default(filter, tr("Import key"));
}
pki_base *KeyView::loadItem(QString fname)
{
pki_base *lkey = new pki_key(fname, &MainWindow::passRead);
return lkey;
}
pki_base* KeyView::insert(pki_base *item)
{
pki_key *lkey = (pki_key *)item;
pki_key *oldkey;
emit init_database();
try {
oldkey = (pki_key *)db->getByReference(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'" +
oldkey->getIntName() +
"'\n" + tr("and is not going to be imported"), "OK");
delete(lkey);
return oldkey;
}
else {
QMessageBox::information(this,tr(XCA_TITLE),
tr("The database already contains the public part of the imported key as") +":\n'" +
oldkey->getIntName() +
"'\n" + tr("and will be completed by the new, private part of the key"), "OK");
CERR( "before deleting pki...");
db->deletePKI(oldkey);
lkey->setIntName(oldkey->getIntName());
delete(oldkey);
}
}
CERR( "after findkey");
db->insertPKI(lkey);
}
catch (errorEx &err) {
Error(err);
}
return lkey;
}
void KeyView::store()
{
bool PEM = false;
const EVP_CIPHER *enc = NULL;
pki_key *targetKey = NULL;
targetKey = (pki_key *)getSelected();
if (!targetKey) return;
ExportKey *dlg = new ExportKey((targetKey->getIntName() + ".pem"),
targetKey->isPubKey(), MainWindow::getPath(), this);
dlg->image->setPixmap(*MainWindow::keyImg);
int dlgret = dlg->exec();
MainWindow::setPath(dlg->dirPath);
if (!dlgret) {
delete dlg;
return;
}
QString fname = dlg->filename->text();
if (fname.isEmpty()) {
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 KeyView::popupMenu(QListViewItem *item, const QPoint &pt, int x) {
CERR( " popup key" );
QPopupMenu *menu = new QPopupMenu(this);
if (!item) {
menu->insertItem(tr("New Key"), this, SLOT(newItem()));
menu->insertItem(tr("Import"), this, SLOT(load()));
}
else {
menu->insertItem(tr("Rename"), this, SLOT(startRename()));
menu->insertItem(tr("Show Details"), this, SLOT(show()));
menu->insertItem(tr("Export"), this, SLOT(store()));
menu->insertItem(tr("Delete"), this, SLOT(deleteItem()));
}
menu->exec(pt);
delete menu;
return;
}
void KeyView::incProgress(int a, int b, void *progress)
{
int i = ((QProgressDialog *)progress)->progress();
((QProgressDialog *)progress)->setProgress(++i);
}

View File

@ -1,82 +0,0 @@
/*
* 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$
*
*/
#ifndef KEYVIEW_H
#define KEYVIEW_H
#include "XcaListView.h"
#include "lib/pki_key.h"
#include <qlistview.h>
class KeyView : public XcaListView
{
Q_OBJECT
private:
static const int sizeList[];
static void incProgress(int a, int b, void *progress);
public:
KeyView(QWidget * parent = 0, const char * name = 0, WFlags f = 0);
void showItem(pki_base *item, bool import);
void newItem();
void deleteItem();
void load();
pki_base *loadItem(QString fname);
pki_base* insert(pki_base *item);
void store();
void popupMenu(QListViewItem *item, const QPoint &pt, int x);
signals:
void keyDone(QString &);
void init_database();
};
#endif

View File

@ -1,356 +0,0 @@
/*
* 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$
*
*/
#include "MainWindow.h"
void MainWindow::showDetailsCrl()
{
pki_crl *crl = (pki_crl *)crls->getSelectedPKI();
showDetailsCrl(crl);
}
void MainWindow::showDetailsCrl(QListViewItem *item)
{
string crl = item->text(0).latin1();
showDetailsCrl((pki_crl *)crls->getSelectedPKI(crl));
}
bool MainWindow::showDetailsCrl(pki_crl *crl, bool import)
{
if (!crl) return false;
if (opensslError(crl)) return false;
char buf[20];
bool ret;
int numc, i;
pki_x509 *iss, *rev;
QListViewItem *current;
try {
CrlDetail_UI *dlg = new CrlDetail_UI(this,0,true);
dlg->image->setPixmap(*revImg);
dlg->descr->setText(crl->getDescription().c_str());
dlg->setCaption(tr(XCA_TITLE));
iss = certs->getBySubject(crl->getIssuerX509_NAME());
numc = crl->numRev();
dlg->certList->clear();
dlg->certList->addColumn(tr("Name"));
dlg->certList->addColumn(tr("Serial"));
dlg->certList->addColumn(tr("Revokation"));
CERR("NUMBER:" << numc);
for (i=0; i<numc; i++) {
CERR("SERIAL: "<< crl->getSerial(i));
rev = certs->getByIssSerial(iss, crl->getSerial(i));
if (rev != NULL) {
CERR(rev->getDescription());
current = new QListViewItem(dlg->certList,
rev->getDescription().c_str());
}
else {
current = new QListViewItem(dlg->certList, "Unknown certificate" );
}
current->setText(1, QString::number(crl->getSerial(i)) );
current->setText(2, pki_x509::asn1TimeToSortable(crl->getRevDate(i)).c_str());
}
dlg->v3Extensions->setText(crl->printV3ext().c_str());
dlg->issuer->setText(iss->getDescription().c_str());
if (crl->verify(iss->getKey()) == 0) {
dlg->signCheck->setText(tr("Success"));
}
sprintf(buf, "%d", ASN1_INTEGER_get(crl->crl->crl->version)+1);
/* yeah, this is really oo programming :-( */
dlg->lUpdate->setText(pki_x509::asn1TimeToSortable(crl->crl->crl->lastUpdate).c_str());
dlg->nUpdate->setText(pki_x509::asn1TimeToSortable(crl->crl->crl->nextUpdate).c_str());
dlg->version->setText(buf);
connect( dlg->certList, SIGNAL( doubleClicked(QListViewItem*) ),
this, SLOT( showDetailsCert(QListViewItem *) ));
string odesc = crl->getDescription();
ret = dlg->exec();
string ndesc = dlg->descr->text().latin1();
delete dlg;
if (!ret && import) {
delete crl;
}
if (!ret) return false;
if (crls == NULL) {
init_database();
}
if (import) {
crl = insertCrl(crl);
}
if (ndesc != odesc) {
crls->renamePKI(crl, ndesc);
}
}
catch (errorEx &err) {
Error(err);
}
return false;
}
void MainWindow::deleteCrl()
{
try {
pki_crl *crl = (pki_crl *)crls->getSelectedPKI();
if (!crl) return;
if (QMessageBox::information(this,tr(XCA_TITLE),
tr("Really want to delete the Revokation list") +":\n'" +
QString::fromLatin1(crl->getDescription().c_str()) + "'\n" ,
tr("Delete"), tr("Cancel") )
) return;
crls->deletePKI(crl);
}
catch (errorEx &err) {
Error(err);
}
}
void MainWindow::loadCrl()
{
QStringList filt;
filt.append(tr("Revokation lists ( *.pem *.crl )"));
filt.append(tr("All files ( *.* )"));
QStringList slist;
QString s="";
QFileDialog *dlg = new QFileDialog(this,0,true);
dlg->setCaption(tr("Certificate import"));
dlg->setFilters(filt);
dlg->setMode( QFileDialog::ExistingFiles );
setPath(dlg);
MARK
if (dlg->exec()) {
slist = dlg->selectedFiles();
newPath(dlg);
}
delete dlg;
MARK
for ( QStringList::Iterator it = slist.begin(); it != slist.end(); ++it ) {
s = *it;
s = QDir::convertSeparators(s);
MARK
try {
pki_crl *crl = new pki_crl(s.latin1());
MARK
insertCrl(crl);
MARK
}
catch (errorEx &err) {
Error(err);
}
}
}
pki_crl *MainWindow::insertCrl(pki_crl *crl)
{
try {
MARK
pki_crl *oldcrl = (pki_crl *)crls->findPKI(crl);
MARK
if (oldcrl) {
QMessageBox::information(this,tr(XCA_TITLE),
tr("The revokation list already exists in the database as") +":\n'" +
QString::fromLatin1(oldcrl->getDescription().c_str()) +
"'\n" + tr("and so it was not imported"), "OK");
delete(crl);
return oldcrl;
}
CERR( "insertCrl: inserting" );
crls->insertPKI(crl);
}
catch (errorEx &err) {
Error(err);
}
return crl;
}
void MainWindow::writeCrl_pem()
{
writeCrl(true);
}
void MainWindow::writeCrl_der()
{
writeCrl(false);
}
void MainWindow::writeCrl(bool pem)
{
pki_crl *crl;
try {
crl = (pki_crl *)crls->getSelectedPKI();
}
catch (errorEx &err) {
Error(err);
return;
}
if (!crl) return;
QStringList filt;
filt.append("Revokation Lists ( *.crl *.pem)");
filt.append("All Files ( *.* )");
QString s="";
QFileDialog *dlg = new QFileDialog(this,0,true);
dlg->setCaption(tr("Export Certificate revokation list"));
dlg->setFilters(filt);
dlg->setMode( QFileDialog::AnyFile );
dlg->setSelection( (crl->getDescription() + ".crl").c_str() );
setPath(dlg);
if (dlg->exec()) {
s = dlg->selectedFile();
newPath(dlg);
}
delete dlg;
if (s.isEmpty()) return;
s=QDir::convertSeparators(s);
try {
crl->writeCrl(s.latin1(), pem);
}
catch (errorEx &err) {
Error(err);
}
}
void MainWindow::showPopupCrl(QListViewItem *item, const QPoint &pt, int x) {
CERR( "popup Crl");
QPopupMenu *menu = new QPopupMenu(this);
QPopupMenu *subExport = new QPopupMenu(this);
if (!item) {
menu->insertItem(tr("Import"), this, SLOT(loadCrl()));
}
else {
menu->insertItem(tr("Rename"), this, SLOT(startRenameCrl()));
menu->insertItem(tr("Show Details"), this, SLOT(showDetailsCrl()));
menu->insertItem(tr("Export"), subExport);
subExport->insertItem(tr("PEM"), this, SLOT(writeCrl_pem()));
subExport->insertItem(tr("DER"), this, SLOT(writeCrl_der()));
menu->insertItem(tr("Delete"), this, SLOT(deleteCrl()));
}
menu->exec(pt);
delete menu;
delete subExport;
return;
}
void MainWindow::renameCrl(QListViewItem *item, int col, const QString &text)
{
if (col != 0) return;
try {
pki_base *pki = crls->getSelectedPKI(item);
string txt = text.latin1();
crls->renamePKI(pki, txt);
}
catch (errorEx &err) {
Error(err);
}
}
void MainWindow::genCrl()
{
pki_x509 *cert = (pki_x509 *)certs->getSelectedPKI();
if (!cert) return;
if (cert->getKey()->isPubKey()) return;
pki_crl *crl = genCrl(cert);
crls->insertPKI(crl);
}
pki_crl *MainWindow::genCrl(pki_x509 *cert)
{
QList<pki_x509> list;
pki_x509 *issuedcert = NULL;
pki_crl *crl = NULL;
try {
crl = new pki_crl(cert->getDescription(), cert);
list = certs->getIssuedCerts(cert);
if (!list.isEmpty()) {
for ( issuedcert = list.first(); issuedcert != NULL; issuedcert = list.next() ) {
if (issuedcert->isRevoked() ) {
crl->addRevoked(issuedcert);
}
}
}
crl->addV3ext(NID_authority_key_identifier,"keyid,issuer");
crl->addV3ext(NID_issuer_alt_name,"issuer:copy");
crl->sign(cert->getKey());
cert->setLastCrl(crl->getDate());
certs->updatePKI(cert);
CERR( "CRL done, completely");
}
catch (errorEx &err) {
Error(err);
}
return crl;
}
void MainWindow::startRenameCrl()
{
try {
#ifdef qt3
pki_base *pki = crls->getSelectedPKI();
if (!pki) return;
QListViewItem *item = (QListViewItem *)pki->getPointer();
item->startRename(0);
#else
renamePKI(crls);
#endif
}
catch (errorEx &err) {
Error(err);
}
}

View File

@ -44,12 +44,15 @@ $(SUBDIRS):
$(MAKE) -C $@ all
clean:
$(MAKE) -C lib clean
$(MAKE) -C ui clean
for x in $(SUBDIRS); do \
$(MAKE) -C $${x} clean; \
done
rm -f $(MOC_CPP) $(UI_CPP) $(UI_H) *~ *.o xca
distclean: clean
$(MAKE) -C lib distclean
for x in $(SUBDIRS); do \
$(MAKE) -C $${x} distclean; \
done
rm -f Makefile config.cache config.h config.log config.status results
rm -rf autom4te.cache
@ -73,9 +76,5 @@ install: xca
install -m 755 -o root xca $(prefix)@prefix@/bin
install -m 644 -o root img/*.png $(prefix)@prefix@/share/xca
install -m 644 -o root xca_??.qm $(prefix)@prefix@/share/xca
moc_%.cpp: %.h %.cpp
$(MOC) $< -o $@
.PHONY: $(SUBDIRS)

View File

@ -1,541 +0,0 @@
/*
* 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$
*
*/
#include "NewX509.h"
#include <qgroupbox.h>
#include <qcheckbox.h>
#include <qcombobox.h>
#include <qradiobutton.h>
#include <qlineedit.h>
#include <qlabel.h>
#include <qwhatsthis.h>
#include <qlistbox.h>
#include <qpixmap.h>
#include <qpushbutton.h>
#include <qvalidator.h>
#include <qbuttongroup.h>
#include "MainWindow.h"
#include "lib/x509name.h"
NewX509::NewX509(QWidget *parent , const char *name, db_key *key, db_x509req *req, db_x509 *cert, db_temp *temp, QPixmap *image, QPixmap *ns)
:NewX509_UI(parent, name, true, 0)
{
connect( this, SIGNAL(genKey()), parent, SLOT(newKey()) );
connect( parent, SIGNAL(keyDone(QString)), this, SLOT(newKeyDone(QString)) );
setCaption(tr(XCA_TITLE));
keys = key;
reqs = req;
temps = temp;
certs = cert;
fixtemp = NULL;
if (image) {
bigImg1->setPixmap(*image);
bigImg2->setPixmap(*image);
bigImg3->setPixmap(*image);
bigImg4->setPixmap(*image);
bigImg5->setPixmap(*image);
bigImg6->setPixmap(*image);
nsImg->setPixmap(*ns);
}
#ifdef qt3
// pretty fat Title :-)
QFont tFont;// = getFont();
tFont.setPointSize(14);
tFont.setBold(true);
tFont.setUnderline(true);
setTitleFont( tFont );
#else
//setFont( tFont );
#endif
serialNr->setValidator( new QIntValidator(0, 32767, this));
QStringList strings;
// are there any useable private keys ?
if (keys) {
strings = keys->get0PrivateDesc();
keyList->insertStringList(strings);
}
else {
keyList->setEnabled(false);
genKeyBUT->setEnabled(false);
}
// any PKCS#10 requests to be used ?
if (reqs) {
strings = reqs->getDesc();
if (strings.isEmpty()) {
fromReqCB->setDisabled(true);
}
else {
reqList->insertStringList(strings);
}
}
else {
reqList->setEnabled(false);
fromReqCB->setEnabled(false);
}
// How about signing certificates ?
if (certs) {
strings = certs->getSignerDesc();
if (strings.isEmpty()) {
foreignSignRB->setDisabled(true);
certList->setDisabled(true);
}
else {
certList->insertStringList(strings);
}
}
else {
foreignSignRB->setDisabled(true);
certList->setDisabled(true);
}
// settings for the templates ....
if (temps) {
strings = temps->getDesc();
strings.prepend(tr("Server Template"));
strings.prepend(tr("Client Template"));
strings.prepend(tr("CA Template"));
strings.prepend(tr("Empty Template"));
tempList->insertStringList(strings);
}
else {
templateBox->setEnabled(false);
}
setFinishEnabled(page7,true);
setNextEnabled(page2,false);
signerChanged();
}
void NewX509::setRequest()
{
setAppropriate(page4, false);
setAppropriate(page5, false);
setAppropriate(page6, false);
finishButton()->setEnabled(true);
changeDefault->setEnabled(false);
changeDefault->setChecked(false);
signerBox->setEnabled(false);
startText=tr("\
Welcome to the settings for certificate signing requests.
A signing request needs a private key, so it will be created \
if there isn't any unused key available in the key database. \
This signing request can then be given to a Certification authority \
while the private key of the request and of the resulting certificate \
returned from the CA does never leave your computer.");
endText=tr("\
You are done with entering all parameters for generating a Certificate signing \
request. The resulting request should be exported and send to an appropriate CA \
for signing it.");
tText=tr("Certificate request");
setup();
}
NewX509::~NewX509()
{
}
void NewX509::setTemp(pki_temp *temp)
{
setAppropriate(page1, false);
finishButton()->setEnabled(true);
startText=tr("\
Welcome to the settings for Templates.
This templates do not refer to any ASN.1 structure but are used to keep default \
settings for signing requests and certificates. \
When creating a Request or Certificate the template can preset the needed fields \
with default settings.");
endText=tr("\
You are done with entering all parameters for the Template.
After this step the template can be assigned to one of your CAs to be autoatically \
applied when signing with this CA.");
tText=tr("Template");
if (temp->getIntName() != "--") {
description->setText(temp->getIntName());
tText += tr(" change");
}
setup();
}
void NewX509::setCert()
{
finishButton()->setEnabled(true);
startText=tr("Welcome to the settings for Certificates. The information for the new Certificate can either be grabbed from a given Certificate-request or be filled in by hand. In the case of not signing a request there needs to be at least one unused key. If this is not the case it will be created. If you want to self-sign a request (unusual but nevertheless possible) you need the private key used to create the request.");
endText=tr("You are done with entering all parameters for creating a Certificate.");
tText=tr("Certificate");
setup();
}
void NewX509::setup()
{
startLabel->setText(startText);
endLabel->setText(endText);
setTitle(page0, tText + " Wizard");
setTitle(page1, tText + " template selection");
setTitle(page2, tText + " personal settings");
setTitle(page4, tText + " X.509 v3 Extensions");
setTitle(page5, tText + " key usage setup");
setTitle(page6, tText + " Netscape extensions");
setTitle(page7, tText + " Wizard finished");
}
void NewX509::defineTemplate(pki_temp *temp)
{
fromTemplate(temp);
templateChanged(temp);
tempList->setEnabled(false);
}
void NewX509::defineRequest(pki_x509req *req)
{
if (!req) return;
fromReqCB->setEnabled(true);
fromReqCB->setChecked(true);
QString reqname = req->getIntName();
#ifdef qt3
reqList->setCurrentText(reqname);
#else
for (int i=0; i<reqList->count(); i++) {
if (reqList->text(i) == reqname) {
reqList->setCurrentItem(i);
break;
}
}
#endif
}
void NewX509::defineCert(pki_x509 *defcert)
{
// suggested from: Andrey Brindeew <abr@abr.pp.ru>
if (defcert && defcert->canSign()) {
QString name = defcert->getIntName();
#ifdef qt3
certList->setCurrentText(name);
#else
for (int i=0; i<certList->count();i++) {
if (certList->text(i) == name) {
certList->setCurrentItem(i);
break;
}
}
#endif
foreignSignRB->setChecked(true);
// certList->setEnabled(true);
}
}
int NewX509::lb2int(QListBox *lb)
{
int x=0;
for (int i=0; lb->item(i); i++) {
if (lb->isSelected(i)){
x |= 1<<i;
}
}
return x;
}
void NewX509::int2lb(QListBox *lb, int x)
{
for (int i=0; lb->item(i); i++) {
lb->setSelected(i, (1<<i) & x);
}
}
void NewX509::fromTemplate(pki_temp *temp)
{
countryName->setText(temp->C);
stateOrProvinceName->setText(temp->P);
localityName->setText(temp->L);
organisationName->setText(temp->O);
organisationalUnitName->setText(temp->OU);
commonName->setText(temp->CN);
emailAddress->setText(temp->EMAIL);
subAltName->setText(temp->subAltName);
issAltName->setText(temp->issAltName);
crlDist->setText(temp->crlDist);
nsComment->setText(temp->nsComment);
nsBaseUrl->setText(temp->nsBaseUrl);
nsRevocationUrl->setText(temp->nsRevocationUrl);
nsCARevocationUrl->setText(temp->nsCARevocationUrl);
nsRenewalUrl->setText(temp->nsRenewalUrl);
nsCaPolicyUrl->setText(temp->nsCaPolicyUrl);
nsSslServerName->setText(temp->nsSslServerName);
int2lb(nsCertType, temp->nsCertType);
basicCA->setCurrentItem(temp->ca?1:0);
bcCritical->setChecked(temp->bcCrit);
kuCritical->setChecked(temp->keyUseCrit);
ekuCritical->setChecked(temp->eKeyUseCrit);
subKey->setChecked(temp->subKey);
authKey->setChecked(temp->authKey);
subAltCp->setChecked(temp->subAltCp);
issAltCp->setChecked(temp->issAltCp);
int2lb(keyUsage, temp->keyUse);
int2lb(ekeyUsage, temp->eKeyUse);
//validNumber->setText(QString::number(temp->validN));
//validRange->setCurrentItem(temp->validM);
if (temp->pathLen) {
basicPath->setText(QString::number(temp->pathLen));
}
}
void NewX509::toTemplate(pki_temp *temp)
{
temp->setIntName(description->text());
temp->C = countryName->text();
temp->P = stateOrProvinceName->text();
temp->L = localityName->text();
temp->O = organisationName->text();
temp->OU = organisationalUnitName->text();
temp->CN = commonName->text();
temp->EMAIL = emailAddress->text();
temp->subAltName = subAltName->text();
temp->issAltName = issAltName->text();
temp->crlDist = crlDist->text();
temp->nsComment = nsComment->text();
temp->nsBaseUrl = nsBaseUrl->text();
temp->nsRevocationUrl = nsRevocationUrl->text();
temp->nsCARevocationUrl = nsCARevocationUrl->text();
temp->nsRenewalUrl = nsRenewalUrl->text();
temp->nsCaPolicyUrl = nsCaPolicyUrl->text();
temp->nsSslServerName = nsSslServerName->text();
temp->nsCertType = lb2int(nsCertType);
temp->ca = basicCA->currentItem();
temp->bcCrit = bcCritical->isChecked();
temp->keyUseCrit = kuCritical->isChecked();
temp->eKeyUseCrit = ekuCritical->isChecked();
temp->subKey = subKey->isChecked();
temp->authKey = authKey->isChecked();
temp->subAltCp = subAltCp->isChecked();
temp->issAltCp = issAltCp->isChecked();
temp->keyUse = lb2int(keyUsage);
temp->eKeyUse = lb2int(ekeyUsage);
//temp->validN = validNumber->text().toInt();
//temp->validM = validRange->currentItem();
temp->pathLen = basicPath->text().toInt();
}
void NewX509::toggleFromRequest()
{
if (fromReqCB->isChecked()) {
setAppropriate(page2, false);
reqList->setEnabled(true);
}
else {
setAppropriate(page2, true);
reqList->setEnabled(false);
}
}
void NewX509::dataChangeP2()
{
CERR( "Data changed" );
if (description->text() != "" && countryName->text().length() !=1 &&
(keyList->count() > 0 || !keyList->isEnabled())){
setNextEnabled(page2,true);
}
else {
setNextEnabled(page2,false);
}
}
void NewX509::showPage(QWidget *page)
{
if (page == page0) {
signerChanged();
switchExtended();
toggleFromRequest();
}
else if ( page == page2 ) {
if (keyList->isEnabled() && keyList->count() == 0 ) {
newKey();
}
dataChangeP2();
}
QWizard::showPage(page);
if ( page == page2 ) {
description->setFocus();
}
else if (page == page4) {
basicCA->setFocus();
}
}
void NewX509::signerChanged()
{
CERR("signer Changed");
if (!certs) return;
QString name = certList->currentText();
CERR( "Certificate: " << name);
if (name.isEmpty()) return;
pki_x509 *cert = (pki_x509 *)certs->getByName(name);
if (!cert) return;
QString templ = cert->getTemplate();
if (templ.isEmpty()) return;
CERR( "set Template: " << templ );
templateChanged(templ);
}
void NewX509::templateChanged(QString tempname)
{
if (!tempList->isEnabled()) return;
#ifdef qt3
tempList->setCurrentText(tempname);
#else
for (int i=0; i<tempList->count();i++) {
if (tempList->text(i) == tempname) {
tempList->setCurrentItem(i);
break;
}
}
#endif
}
void NewX509::templateChanged(pki_temp *templ)
{
QString tempname = templ->getIntName();
templateChanged(tempname);
}
void NewX509::templateChanged()
{
pki_temp *temp = NULL;
int item;
if (!appropriate(page1)) return;
if (!tempList->isEnabled()) return;
if ((item = tempList->currentItem())<4) {
temp = new pki_temp("temp",item);
if (temp) {
fromTemplate(temp);
CERR("using default template: "<< item);
delete (temp);
}
return;
}
QString name = tempList->currentText();
if (name == "" || !temps) return;
temp = (pki_temp *)temps->getByName(name);
if (!temp) return;
CERR("CHANGING TEMPLATE");
fromTemplate(temp);
}
void NewX509::switchExtended()
{
if ( !appropriate(page1) ) return;
CERR( "SWITCH Extended");
if (changeDefault->isChecked() || !templateBox->isEnabled()) {
setAppropriate(page4, true);
setAppropriate(page5, true);
setAppropriate(page6, true);
}
else {
setAppropriate(page4, false);
setAppropriate(page5, false);
setAppropriate(page6, false);
}
}
void NewX509::newKey()
{
emit genKey();
}
void NewX509::newKeyDone(QString name)
{
keyList->insertItem(name,0);
keyList->setCurrentItem(0);
dataChangeP2();
}
void NewX509::helpClicked()
{
QWhatsThis::enterWhatsThisMode();
}
pki_key *NewX509::getSelectedKey()
{
return (pki_key *)MainWindow::keys->getByName(keyList->currentText());
}
x509name NewX509::getX509name()
{
x509name x;
x.addEntryByNid(NID_commonName, commonName->text());
x.addEntryByNid(NID_countryName, countryName->text());
x.addEntryByNid(NID_localityName ,localityName->text());
x.addEntryByNid(NID_stateOrProvinceName, stateOrProvinceName->text());
x.addEntryByNid(NID_organizationName, organisationName->text());
x.addEntryByNid(NID_organizationalUnitName, organisationalUnitName->text());
x.addEntryByNid(NID_pkcs9_emailAddress, emailAddress->text());
return x;
}

107
NewX509.h
View File

@ -1,107 +0,0 @@
/*
* 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$
*
*/
#include "ui/NewX509.h"
#include "lib/db_key.h"
#include "lib/db_x509req.h"
#include "lib/db_x509.h"
#include "lib/db_temp.h"
#ifndef NEWX509_H
#define NEWX509_H
class MainWindow;
class NewX509: public NewX509_UI
{
Q_OBJECT
private:
db_x509req *reqs;
db_x509 *certs;
db_key *keys;
db_temp *temps;
pki_temp *fixtemp;
QString startText, endText, tText;
public:
NewX509(QWidget *parent, const char *name, db_key *key, db_x509req *req, db_x509 *cert, db_temp *temp, QPixmap *image, QPixmap *ns);
~NewX509();
void setRequest(); // reduce to request form
void setTemp(pki_temp *temp); // reduce to template form
void setCert(); // reduce to certificate form
void setup();
void showPage(QWidget *page);
void toTemplate(pki_temp *temp);
void fromTemplate(pki_temp *temp);
void defineTemplate(pki_temp *temp);
void defineRequest(pki_x509req *req);
void defineCert(pki_x509 *defcert);
int lb2int(QListBox *lb);
void int2lb(QListBox *lb, int x);
void templateChanged(pki_temp *templ);
void templateChanged(QString templatename);
pki_key *getSelectedKey();
x509name getX509name();
public slots:
void toggleFromRequest();
void newKey();
void dataChangeP2();
void newKeyDone(QString name);
void switchExtended();
void templateChanged();
void signerChanged();
void helpClicked();
signals:
void genKey();
};
#endif

View File

@ -1,295 +0,0 @@
/*
* 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$
*
*/
#include "ReqView.h"
#include "ui/ReqDetail.h"
#include <qpopupmenu.h>
#include <qmessagebox.h>
#include <qfiledialog.h>
#include <qdir.h>
#include <qlabel.h>
#include <qcombobox.h>
#include <qpushbutton.h>
#include "widgets/MainWindow.h"
#include "widgets/NewX509.h"
#include "distname.h"
ReqView::ReqView(QWidget * parent = 0, const char * name = 0, WFlags f = 0)
:XcaListView(parent, name, f)
{
addColumn(tr("Common Name"));
/*
connect(keyl, SIGNAL(delKey(pki_key *)), this, SLOT(delKey(pki_key *)));
connect(keyl, SIGNAL(newKey(pki_key *)), this, SLOT(newKey(pki_key *)));
*/
}
void ReqView::newItem()
{
newItem(NULL);
}
void ReqView::newItem(pki_temp *temp)
{
NewX509 *dlg = MainWindow::newX509(MainWindow::csrImg);
if (temp) {
dlg->defineTemplate(temp);
}
dlg->setRequest();
if (! dlg->exec()){
delete dlg;
return;
}
try {
pki_key *key = dlg->getSelectedKey();
x509name xn = dlg->getX509name();
pki_x509req *req = new pki_x509req();
req->createReq(key, xn);
insert(req);
}
catch (errorEx &err) {
Error(err);
}
}
void ReqView::showItem(pki_base *item, bool import)
{
if (!item) return;
emit init_database();
try {
pki_x509req *req = (pki_x509req *)item;
ReqDetail_UI *dlg = new ReqDetail_UI(this,0,true);
dlg->descr->setText(req->getIntName());
dlg->setCaption(tr(XCA_TITLE));
if (!req->verify() ) {
dlg->verify->setDisabled(true);
dlg->verify->setText("ERROR");
}
pki_key *key =req->getRefKey();
if (key) {
dlg->privKey->setText(key->getIntName());
dlg->privKey->setDisabled(false);
}
/*
x509name rn = req->getSubject();
dlg->dnCN->setText(rn.getEntryByNid(NID_commonName));
dlg->dnC->setText(rn.getEntryByNid(NID_countryName) + " / "
+ rn.getEntryByNid(NID_stateOrProvinceName));
dlg->dnL->setText(rn.getEntryByNid(NID_localityName));
dlg->dnO->setText(rn.getEntryByNid(NID_organizationName));
dlg->dnOU->setText(rn.getEntryByNid(NID_organizationalUnitName));
dlg->dnEmail->setText(rn.getEntryByNid(NID_pkcs9_emailAddress));
dlg->image->setPixmap(*MainWindow::csrImg);
*/
dlg->subject->setX509name(req->getSubject());
// rename the buttons in case of import
if (import) {
dlg->but_ok->setText(tr("Import"));
dlg->but_cancel->setText(tr("Discard"));
}
QString odesc = req->getIntName();
bool ret = dlg->exec();
QString ndesc = dlg->descr->text();
delete dlg;
if (!ret && import) {
delete req;
}
if (!ret) return;
emit init_database();
if (import) {
req = (pki_x509req *)insert((pki_x509req *)req);
}
if (ndesc != odesc) {
db->renamePKI(req, ndesc);
}
}
catch (errorEx &err) {
Error(err);
}
}
void ReqView::deleteItem()
{
deleteItem_default(tr("The Certificate signing request"),
tr("is going to be deleted"));
}
void ReqView::load()
{
QStringList filter;
filter.append("PKCS#10 CSR ( *.pem *.der *.csr )");
filter.append("All Files ( *.* )");
load_default(filter, tr("Import CSR"));
}
pki_base *ReqView::loadItem(QString fname)
{
pki_base *req = new pki_x509req(fname);
return req;
}
void ReqView::writeReq_pem() { store(true); }
void ReqView::writeReq_der() { store(false); }
void ReqView::store(bool pem)
{
pki_x509req *req;
try {
req = (pki_x509req *)getSelected();
}
catch (errorEx &err) {
Error(err);
return;
}
if (!req) return;
QStringList filt;
filt.append("PKCS#10 CSR ( *.pem *.der *.csr )");
filt.append("All Files ( *.* )");
QString s="";
QFileDialog *dlg = new QFileDialog(this,0,true);
dlg->setCaption(tr("Export Certificate signing request"));
dlg->setFilters(filt);
dlg->setMode( QFileDialog::AnyFile );
dlg->setSelection( req->getIntName() + ".csr" );
if (dlg->exec()) {
s = dlg->selectedFile();
MainWindow::setPath(dlg->dirPath());
}
delete dlg;
if (s.isEmpty()) return;
s=QDir::convertSeparators(s);
try {
req->writeReq(s, pem);
}
catch (errorEx &err) {
Error(err);
}
}
void ReqView::signReq()
{
pki_x509req *req;
try {
req = (pki_x509req *)getSelected();
}
catch (errorEx &err) {
Error(err);
return;
}
newCert(req);
}
pki_base *ReqView::insert(pki_base *item)
{
pki_x509req *oldreq, *req;
req = (pki_x509req *)item;
emit init_database();
try {
oldreq = (pki_x509req *)db->getByReference(req);
}
catch (errorEx &err) {
Error(err);
}
if (oldreq) {
QMessageBox::information(this,tr(XCA_TITLE),
tr("The certificate signing request already exists in the database as") +":\n'" +
oldreq->getIntName() +
"'\n" + tr("and thus was not stored"), "OK");
delete(req);
return oldreq;
}
try {
db->insertPKI(req);
}
catch (errorEx &err) {
Error(err);
}
return req;
}
void ReqView::popupMenu(QListViewItem *item, const QPoint &pt, int x) {
CERR("hallo popup Req");
QPopupMenu *menu = new QPopupMenu(this);
QPopupMenu *subExport = new QPopupMenu(this);
if (!item) {
menu->insertItem(tr("New Request"), this, SLOT(newReq()));
menu->insertItem(tr("Import"), this, SLOT(loadReq()));
}
else {
menu->insertItem(tr("Rename"), this, SLOT(startRenameReq()));
menu->insertItem(tr("Show Details"), this, SLOT(showDetailsReq()));
menu->insertItem(tr("Sign"), this, SLOT(signReq()));
menu->insertItem(tr("Export"), subExport);
subExport->insertItem(tr("PEM"), this, SLOT(writeReq_pem()));
subExport->insertItem(tr("DER"), this, SLOT(writeReq_der()));
menu->insertItem(tr("Delete"), this, SLOT(deleteItem()));
}
menu->exec(pt);
delete menu;
delete subExport;
return;
}

View File

@ -1,87 +0,0 @@
/*
* 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$
*
*/
#ifndef REQVIEW_H
#define REQVIEW_H
#include "XcaListView.h"
#include "lib/pki_x509req.h"
#include "lib/pki_temp.h"
#include "widgets/NewX509.h"
class ReqView : public XcaListView
{
Q_OBJECT
public:
ReqView(QWidget * parent = 0, const char * name = 0, WFlags f = 0);
void showItem(pki_base *item, bool import);
void newItem();
void newItem(pki_temp *temp);
void deleteItem();
void load();
void updateViewItem(pki_base *);
pki_base *loadItem(QString fname);
pki_base* insert(pki_base *item);
void store(bool pem);
void popupMenu(QListViewItem *item, const QPoint &pt, int x);
public slots:
void writeReq_pem();
void writeReq_der();
void signReq();
signals:
void keyDone(QString &);
void newCert(pki_x509req *req);
};
#endif

View File

@ -1,151 +0,0 @@
/*
* 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$
*
*/
#include "TempView.h"
#include "widgets/MainWindow.h"
#include "widgets/NewX509.h"
#include <qmessagebox.h>
#include <qpopupmenu.h>
TempView::TempView(QWidget * parent = 0, const char * name = 0, WFlags f = 0)
:XcaListView(parent, name, f)
{
keyicon = loadImg("template.png");
addColumn(tr("Type"));
}
void TempView::newItem(int type)
{
pki_temp *temp = new pki_temp("--", type);
if (alterTemp(temp)) {
insert(temp);
}
}
bool TempView::alterTemp(pki_temp *temp)
{
NewX509 *dlg = MainWindow::newX509(MainWindow::tempImg);
dlg->setTemp(temp);
dlg->fromTemplate(temp);
if (!dlg->exec()) {
delete dlg;
return false;
}
dlg->toTemplate(temp);
delete dlg;
return true;
}
void TempView::showItem(pki_base *item, bool import)
{
pki_temp *temp = (pki_temp *)item;
if (!temp) return;
QString oldname = temp->getIntName();
alterTemp(temp);
QString newname = temp->getIntName();
if (newname!= oldname) {
temp->setIntName(oldname);
MainWindow::temps->renamePKI(temp, newname);
}
MainWindow::temps->updatePKI(temp);
}
void TempView::deleteItem()
{
deleteItem_default(tr("The Template"), tr("is going to be deleted"));
}
pki_base *TempView::insert(pki_base *temp)
{
MainWindow::temps->insertPKI(temp);
return temp;
}
void TempView::certFromTemp()
{
pki_temp *temp = (pki_temp *)getSelected();
// FIXME: newCert(temp);
}
void TempView::reqFromTemp()
{
pki_temp *temp = (pki_temp *)getSelected();
// FIXME: newReq(temp);
}
void TempView::popupMenu(QListViewItem *item, const QPoint &pt, int x)
{
QPopupMenu *menu = new QPopupMenu(this);
QPopupMenu *subMenu = new QPopupMenu(this);
if (!item) {
menu->insertItem(tr("New Template"), subMenu);
subMenu->insertItem(tr("Empty"), this, SLOT(newEmpTemp()));
subMenu->insertItem(tr("CA"), this, SLOT(newCATemp()));
subMenu->insertItem(tr("Client"), this, SLOT(newCliTemp()));
subMenu->insertItem(tr("Server"), this, SLOT(newSerTemp()));
}
else {
menu->insertItem(tr("Rename"), this, SLOT(startRenameTemp()));
menu->insertItem(tr("Change"), this, SLOT(alterTemp()));
menu->insertItem(tr("Delete"), this, SLOT(deleteTemp()));
menu->insertItem(tr("Create certificate"), this, SLOT(certFromTemp()));
menu->insertItem(tr("Create request"), this, SLOT(reqFromTemp()));
}
menu->exec(pt);
delete menu;
delete subMenu;
return;
}

View File

@ -1,85 +0,0 @@
/*
* 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$
*
*/
#ifndef TEMPVIEW_H
#define TEMPVIEW_H
#include "XcaListView.h"
#include "lib/pki_temp.h"
#include <qlistview.h>
class TempView : public XcaListView
{
Q_OBJECT
private:
QPixmap *keyicon;
public:
TempView(QWidget * parent = 0, const char * name = 0, WFlags f = 0);
void showItem(pki_base *item, bool import);
void newItem(int type);
void deleteItem();
//void load();
void updateViewItem(pki_base *);
//pki_base *loadItem(QString fname);
pki_base* insert(pki_base *item);
//void store();
void popupMenu(QListViewItem *item, const QPoint &pt, int x);
bool alterTemp(pki_temp *temp);
public slots:
void certFromTemp();
void reqFromTemp();
signals:
void init_database();
};
#endif

View File

@ -1,272 +0,0 @@
/*
* 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$
*
*/
#include "XcaListView.h"
#include "widgets/MainWindow.h"
#include <qinputdialog.h>
#include <qfiledialog.h>
#include <qmessagebox.h>
#ifdef WIN32
#include <windows.h>
#endif
XcaListView::XcaListView( QWidget * parent = 0,
const char * name = 0, WFlags f = 0)
:QListView(parent, name, f)
{
#ifdef qt3
connect( this, SIGNAL(itemRenamed(QListViewItem *, int, const QString &)),
this, SLOT(rename(QListViewItem *, int, const QString &)));
#endif
connect( this, SIGNAL(rightButtonPressed(QListViewItem *, const QPoint &, int)),
this, SLOT(popupMenu(QListViewItem *, const QPoint &, int))) ;
connect( this, SIGNAL(doubleClicked(QListViewItem *)),
this, SLOT(showItem(QListViewItem *))) ;
}
void XcaListView::setDB(db_base *mydb)
{
db = mydb;
updateView();
}
void XcaListView::loadCont()
{
emit init_database();
db->loadContainer();
updateView();
}
pki_base *XcaListView::getSelected()
{
emit init_database();
QListViewItem *lvi = selectedItem();
if (!lvi) return NULL;
QString name = lvi->text(0);
return db->getByName(name);
}
void XcaListView::showItem()
{
showItem(getSelected(), false);
}
void XcaListView::showItem(QListViewItem *item)
{
showItem(db->getByName(item->text(0)), false);
}
void XcaListView::rename(QListViewItem *item, int col, const QString &text)
{
emit init_database();
try {
pki_base *pki = db->getByPtr(item);
db->renamePKI(pki, text);
}
catch (errorEx &err) {
Error(err);
}
}
void XcaListView::startRename()
{
try {
#ifdef qt3
QListViewItem *item = selectedItem();
if (item == NULL) return;
item->startRename(0);
#else
renameDialog();
#endif
}
catch (errorEx &err) {
Error(err);
}
}
void XcaListView::renameDialog()
{
pki_base * pki = getSelected();
if (!pki) return;
QString name= pki->getIntName();
bool ok;
QString nname = QInputDialog::getText (XCA_TITLE, "Please enter the new name",
QLineEdit::Normal, name, &ok, this );
if (ok && name != nname) {
db->renamePKI(pki, nname);
pki->getLvi()->setText(0, pki->getIntName());
}
}
void XcaListView::deleteItem_default(QString t1, QString t2)
{
pki_base *del = getSelected();
if (!del) return;
if (QMessageBox::information(this,tr(XCA_TITLE),
t1 + ": '" + del->getIntName() + "'\n" + t2,
tr("Delete"), tr("Cancel"))
) return;
try {
db->deletePKI(del);
}
catch (errorEx &err) {
Error(err);
}
}
void XcaListView::load_default(QStringList &filter, QString caption)
{
filter.append( tr("All Files ( *.* )") );
QString s = "";
QStringList slist;
QFileDialog *dlg = new QFileDialog(this,0,true);
dlg->setCaption(caption);
dlg->setFilters(filter);
dlg->setMode( QFileDialog::ExistingFiles );
dlg->setDir(MainWindow::getPath());
if (dlg->exec()) {
slist = dlg->selectedFiles();
MainWindow::setPath(dlg->dirPath());
}
delete dlg;
for ( QStringList::Iterator it = slist.begin(); it != slist.end(); ++it ) {
s = *it;
s = QDir::convertSeparators(s);
try {
pki_base *item = loadItem(s);
insert(item);
}
catch (errorEx &err) {
Error(err);
}
}
}
void XcaListView::Error(errorEx &err)
{
if (err.isEmpty()) {
CERR("Empty error Exception silently ignored");
return;
}
QMessageBox::warning(this,tr(XCA_TITLE), tr("The following error occured:") + "\n" +
QString::fromLatin1(err.getCString()));
}
bool XcaListView::Error(pki_base *pki)
{
if (!pki) {
QMessageBox::warning(this,tr(XCA_TITLE), tr("The system detected a NULL pointer, maybe the system is out of memory" ));
qFatal("NULL pointer detected - Exiting");
}
return false;
}
void XcaListView::updateView()
{
clear();
QList<pki_base> container;
pki_base *pki;
container = db->getContainer();
if (container.isEmpty()) return;
for ( pki = container.first(); pki != NULL; pki = container.next() ) pki->delLvi();
QListIterator<pki_base> it(container);
for ( ; it.current(); ++it ) {
pki = it.current();
QListViewItem *lvi = new QListViewItem(this, pki->getIntName());
insertItem(lvi);
pki->setLvi(lvi);
pki->updateView();
}
}
pki_base *XcaListView::loadItem(QString) { CERR("Virtual called..."); return NULL; }
void XcaListView::newItem(void) { CERR("Virtual called..."); }
void XcaListView::deleteItem(void) { CERR("Virtual called..."); }
void XcaListView::load(void) { CERR("Virtual called..."); }
void XcaListView::store(void) { CERR("Virtual called..."); }
pki_base *XcaListView::insert(pki_base *) { CERR("Virtual called..."); return NULL; }
void XcaListView::popupMenu(QListViewItem *, QPoint const &, int) { CERR("Virtual called..."); }
void XcaListView::showItem(pki_base *, bool) { CERR("Virtual called...");}
QPixmap *XcaListView::loadImg(const char *name )
{
#ifdef WIN32
static unsigned char PREFIX[100]="";
if (PREFIX[0] == '\0') {
LONG lRc;
HKEY hKey;
lRc=RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\xca",0,KEY_READ, &hKey);
if(lRc!= ERROR_SUCCESS){
// No key error
QMessageBox::warning(NULL,tr(XCA_TITLE), "Registry Key: 'HKEY_LOCAL_MACHINE->Software->xca' not found");
PREFIX[0] = '\0';
}
else {
ULONG dwLength = 100;
lRc=RegQueryValueEx(hKey,"Install_Dir",NULL,NULL, PREFIX, &dwLength);
if(lRc!= ERROR_SUCCESS){
// No key error
QMessageBox::warning(NULL,tr(XCA_TITLE), "Registry Key: 'HKEY_LOCAL_MACHINE->Software->xca->Install_Dir' not found");
PREFIX[0] = '\0';
}
}
lRc=RegCloseKey(hKey);
}
#endif
QString path = (char *)PREFIX;
path += QDir::separator();
return new QPixmap(path + name);
}

View File

@ -1,95 +0,0 @@
/*
* 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$
*
*/
#ifndef XCALISTVIEW_H
#define XCALISTVIEW_H
#include <qlistview.h>
#include "lib/db_base.h"
#include "lib/exception.h"
class XcaListView : public QListView
{
Q_OBJECT
protected:
db_base *db;
public:
XcaListView(QWidget * parent = 0, const char * name = 0, WFlags f = 0);
void setDB(db_base *mydb);
virtual pki_base *getSelected();
virtual void showItem(pki_base *item, bool import);
void deleteItem_default(QString t1, QString t2);
virtual pki_base *loadItem(QString fname);
void load_default(QStringList &filter, QString caption);
void setDB(db_base *mydb, QPixmap *myimage);
void Error(errorEx &err);
bool Error(pki_base *pki);
void loadCont();
QPixmap *loadImg(const char *name );
public slots:
virtual void newItem();
virtual void deleteItem();
void showItem();
void showItem(QListViewItem *item);
virtual void load();
virtual void store();
virtual pki_base *insert(pki_base *item);
virtual void popupMenu(QListViewItem *item, const QPoint &pt, int x);
void startRename();
void renameDialog();
void rename(QListViewItem *item, int col, const QString &text);
void updateView();
signals:
void init_database();
};
#endif

View File

@ -1,99 +0,0 @@
/*
* 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$
*
*/
#include "distname.h"
#include <qcombobox.h>
#include <qlabel.h>
#include <qlineedit.h>
#include <qpushbutton.h>
#include <qlayout.h>
#include <qvariant.h>
#include <qtooltip.h>
#include <qwhatsthis.h>
#include "lib/x509name.h"
DistName::DistName( QWidget* parent, const char* name )
: QGroupBox( parent, name )
{
if ( !name )
setName( "DistName" );
setTitle( tr( "Distinguished Name" ) );
DistNameLayout = new QGridLayout( this );
DistNameLayout->setSpacing( 6 );
DistNameLayout->setMargin( 11 );
}
void DistName::setX509name(const x509name &n)
{
QLabel *lb;
QLineEdit *le;
QStringList sl;
for (int i=0; i<n.entryCount(); i++) {
lb = new QLabel( this );
le = new QLineEdit( this );
sl = n.entryList(i);
lb->setText(sl[0]);
if (lb->text().isEmpty())
lb->setText(sl[1]);
le->setText(sl[2]);
DistNameLayout->addWidget( lb, i, 0 );
DistNameLayout->addWidget( le, i, 1 );
}
//DistNameLayout->invalidate();
}
DistName::~DistName()
{
// no need to delete child widgets, Qt does it all for us
}

View File

@ -1,80 +0,0 @@
/*
* 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$
*
*/
#ifndef DISTNAME_H
#define DISTNAME_H
#include <qvariant.h>
#include <qgroupbox.h>
class QGridLayout;
class x509name;
class QLabel;
class QComboBox;
class QLineEdit;
class DistName : public QGroupBox
{
Q_OBJECT
public:
DistName( QWidget* parent = 0, const char* name = 0);
~DistName();
void setX509name(const x509name &n);
protected:
QGridLayout* DistNameLayout;
QLabel *Label1, *Label2;
QComboBox *nbDay, *nbMon, *naMon, *naDay;
QLineEdit *nbYear, *naYear;
};
#endif

View File

@ -1,88 +0,0 @@
/*
* 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$
*
*/
#include <qapplication.h>
#include <qtranslator.h>
#include <qtextcodec.h>
#include "widgets/MainWindow.h"
int main( int argc, char *argv[] )
{
int ret = 0;
QApplication a( argc, argv );
MainWindow *mw = new MainWindow( NULL, "Main Widget");
a.setMainWidget( mw );
// translation file for Qt
QTranslator qtTr( 0 );
qtTr.load( QString( "qt_" ) + QTextCodec::locale(), "." );
a.installTranslator( &qtTr );
//translation file for application strings
QTranslator xcaTr( 0 );
#ifdef WIN32
xcaTr.load( QString( "xca_" ) + QTextCodec::locale(), "." );
a.installTranslator( &xcaTr );
#else
xcaTr.load( QString( "xca_" ) + QTextCodec::locale(), PREFIX );
a.installTranslator( &xcaTr );
#endif
CERR("PKI Counter:" << pki_base::get_pki_counter());
if (mw->exitApp == 0) {
mw->show();
ret = a.exec();
}
MARK
delete mw;
MARK
clog << "PKI Counter: " << pki_base::get_pki_counter() << endl;
clog << "The PKI counter must be 0, if not contact me." << endl;
return ret;
}

View File

@ -11,8 +11,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>544</width>
<height>298</height>
<width>550</width>
<height>369</height>
</rect>
</property>
<property stdset="1">
@ -744,11 +744,42 @@
</property>
</spacer>
<widget>
<class>DistName</class>
<class>QGroupBox</class>
<property stdset="1">
<name>name</name>
<cstring>subject</cstring>
<cstring>GroupBox2</cstring>
</property>
<property stdset="1">
<name>title</name>
<string>Subject</string>
</property>
<property>
<name>layoutMargin</name>
</property>
<vbox>
<property stdset="1">
<name>margin</name>
<number>2</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>0</number>
</property>
<widget>
<class>DistName</class>
<property stdset="1">
<name>name</name>
<cstring>subject</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<sizepolicy>
<hsizetype>7</hsizetype>
<vsizetype>7</vsizetype>
</sizepolicy>
</property>
</widget>
</vbox>
</widget>
<spacer>
<property>
@ -852,7 +883,7 @@
<images>
<image>
<name>image0</name>
<data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
<data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1ddec44f503c0ae2a154410f53d0ed20e2bf6bdb656dd6861dd23d9a66591b0587fd1654235ebded6f0edcd53e419d87ae7b1f4f9b8f906d0bfe012317426a70b07bdc2f3ec77f8ed6b89559061a0343d06a124cc105596482585094bc0ae599b04646c9018926491b2205e140c485cace25755c175d0a967b622ff900b8cc9c7d29af594ea722d589167f813aa852ba07d94b9dce296e883fe7bb163f23896753</data>
</image>
</images>
<connections>

View File

@ -1,149 +0,0 @@
/*
* 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$
*
*/
#include "validity.h"
#include <qcombobox.h>
#include <qlabel.h>
#include <qlineedit.h>
#include <qpushbutton.h>
#include <qlayout.h>
#include <qvariant.h>
#include <qtooltip.h>
#include <qwhatsthis.h>
#include "lib/asn1time.h"
Validity::Validity( QWidget* parent, const char* name )
: QGroupBox( parent, name )
{
QStringList months, days;
months << tr("Jan") << tr("Feb") << tr("Mar") << tr("Apr")
<< tr("Mai") << tr("Jun") << tr("Jul") << tr("Aug")
<< tr("Sep") << tr("Okt") << tr("Nov") << tr("Dez");
for (int i=1; i<32; i++)
days += QString::number(i);
if ( !name )
setName( "Validity" );
setTitle( tr( "Validity" ) );
ValidityLayout = new QGridLayout( this );
ValidityLayout->setSpacing( 6 );
ValidityLayout->setMargin( 11 );
Label1 = new QLabel( this, "Label1" );
Label1->setText( tr( "not Before" ) );
Label2 = new QLabel( this, "Label2" );
Label2->setText( tr( "not After" ) );
nbDay = new QComboBox( FALSE, this, "nbDay" );
nbMon = new QComboBox( FALSE, this, "nbMon" );
nbYear = new QLineEdit( this, "nbYear" );
naDay = new QComboBox( FALSE, this, "naDay" );
naMon = new QComboBox( FALSE, this, "naMon" );
naYear = new QLineEdit( this, "naYear" );
ValidityLayout->addWidget( Label1, 0, 0 );
ValidityLayout->addWidget( nbDay, 0, 1 );
ValidityLayout->addWidget( nbMon, 0, 2 );
ValidityLayout->addWidget( nbYear, 0, 3 );
ValidityLayout->addWidget( Label2, 1, 0 );
ValidityLayout->addWidget( naDay, 1, 1 );
ValidityLayout->addWidget( naMon, 1, 2 );
ValidityLayout->addWidget( naYear, 1, 3 );
nbMon->insertStringList(months);
naMon->insertStringList(months);
nbDay->insertStringList(days);
naDay->insertStringList(days);
}
Validity::~Validity()
{
// no need to delete child widgets, Qt does it all for us
}
a1time Validity::getNotBefore() const
{
a1time date;
date.set(nbYear->text().toInt(), nbMon->currentItem() + 1,
nbDay->currentItem() +1, 0, 0, 0);
return date;
}
a1time Validity::getNotAfter() const
{
a1time date;
date.set(naYear->text().toInt(), naMon->currentItem() + 1,
naDay->currentItem() +1, 0, 0, 0);
return date;
}
void Validity::setNotBefore(const a1time &a)
{
int y, m, d, g;
a.ymdg(&y,&m,&d,&g);
nbYear->setText(QString::number(y));
nbMon->setCurrentItem(m-1);
nbDay->setCurrentItem(d-1);
}
void Validity::setNotAfter(const a1time &a)
{
int y, m, d, g;
a.ymdg(&y,&m,&d,&g);
naYear->setText(QString::number(y));
naMon->setCurrentItem(m-1);
naDay->setCurrentItem(d-1);
}

View File

@ -1,83 +0,0 @@
/*
* 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$
*
*/
#ifndef VALIDITY_H
#define VALIDITY_H
#include <qvariant.h>
#include <qgroupbox.h>
class QGridLayout;
class a1time;
class QLabel;
class QComboBox;
class QLineEdit;
class Validity : public QGroupBox
{
Q_OBJECT
public:
Validity( QWidget* parent = 0, const char* name = 0);
~Validity();
a1time getNotBefore() const;
a1time getNotAfter() const;
void setNotBefore(const a1time &t);
void setNotAfter(const a1time &t);
protected:
QGridLayout* ValidityLayout;
QLabel *Label1, *Label2;
QComboBox *nbDay, *nbMon, *naMon, *naDay;
QLineEdit *nbYear, *naYear;
};
#endif // VALIDITY_H

156
widgets/CertDetail.cpp Normal file
View File

@ -0,0 +1,156 @@
/*
* 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$
*
*/
#include "CertDetail.h"
#include "MainWindow.h"
#include <qlabel.h>
#include <qtextview.h>
#include <qlistview.h>
CertDetail::CertDetail(QWidget *parent, const char *name)
:CertDetail_UI(parent,name,true,0)
{
setCaption(tr(XCA_TITLE));
image->setPixmap(*MainWindow::revImg);
}
CertDetail::setCrt(pki_x509 *cert)
{
descr->setText(cert->getIntName());
// examine the key
pki_key *key= cert->getRefKey();
if (key && key->isPrivKey()) {
privKey->setText(key->getIntName());
privKey->setDisabled(false);
}
// examine the signature
if ( cert->getSigner() == NULL) {
verify->setText(tr("SIGNER UNKNOWN"));
}
else if ( cert == cert->getSigner()) {
verify->setText(tr("SELF SIGNED"));
}
else {
verify->setText(cert->getSigner()->getIntName());
}
// check trust state
if (cert->getEffTrust() == 0) {
verify->setDisabled(true);
}
CERR( cert->getEffTrust() );
// the serial
serialNr->setText(cert->getSerial().toHex());
// details of subject
x509name subj = cert->getSubject();
QString land = subj.getEntryByNid(NID_countryName);
QString land1 = subj.getEntryByNid(NID_stateOrProvinceName);
if (land != "" && land1 != "")
land += " / " +land1;
else
land+=land1;
dlg->dnCN->setText(subj.getEntryByNid(NID_commonName));
dlg->dnC->setText(land);
dlg->dnL->setText(subj.getEntryByNid(NID_localityName));
dlg->dnO->setText(subj.getEntryByNid(NID_organizationName));
dlg->dnOU->setText(subj.getEntryByNid(NID_organizationalUnitName));
dlg->dnEmail->setText(subj.getEntryByNid(NID_pkcs9_emailAddress));
// same for issuer....
x509name iss = cert->getIssuer();
land = iss.getEntryByNid(NID_countryName);
land1 = iss.getEntryByNid(NID_stateOrProvinceName);
if (land != "" && land1 != "")
land += " / " +land1;
else
land+=land1;
dlg->dnCN_2->setText(iss.getEntryByNid(NID_commonName) );
dlg->dnC_2->setText(land);
dlg->dnL_2->setText(iss.getEntryByNid(NID_localityName));
dlg->dnO_2->setText(iss.getEntryByNid(NID_organizationName));
dlg->dnOU_2->setText(iss.getEntryByNid(NID_organizationalUnitName));
dlg->dnEmail_2->setText(iss.getEntryByNid(NID_pkcs9_emailAddress));
dlg->notBefore->setText(cert->getNotBefore().toPretty());
dlg->notAfter->setText(cert->getNotAfter().toPretty());
MARK
// validation of the Date
if (cert->checkDate() != 0) {
dateValid->setText(tr("Not valid"));
dateValid->setDisabled(true);
}
if (cert->isRevoked()) {
dateValid->setText(tr("Revoked: ") +
cert->getRevoked().toPretty());
dateValid->setDisabled(true);
}
// the fingerprints
fpMD5->setText(cert->fingerprint(EVP_md5()));
fpSHA1->setText(cert->fingerprint(EVP_sha1()));
// V3 extensions
dlg->v3Extensions->setText(cert->printV3ext());
void CertDetail::setImport()
{
// rename the buttons in case of import
but_ok->setText(tr("Import"));
but_cancel->setText(tr("Discard"));
}

View File

@ -48,29 +48,19 @@
*
*/
#ifndef CERTDETAIL_H
#define CERTDETAIL_H
#include "ui/ExportKey.h"
#include <qfiledialog.h>
#include <qcombobox.h>
#include <qcheckbox.h>
#include <qlineedit.h>
#include "lib/pki_base.h"
#include <iostream>
#include "ui/CertDetail.h"
#include "lib/pki_x509.h"
#ifndef EXPORTKEY_H
#define EXPORTKEY_H
class ExportKey: public ExportKey_UI
class CertDetail: public CertDetail_UI
{
Q_OBJECT
bool onlyPub;
public:
ExportKey(QString fname, bool onlypub, QString dpath,
QWidget *parent = 0, const char *name = 0);
QString dirPath;
public slots:
virtual void chooseFile();
virtual void canEncrypt();
CertDetail( QWidget *parent = 0, const char *name = 0);
void setCert(pki_crl *crl);
};
#endif

View File

@ -62,20 +62,13 @@
#include <iostream>
DistName::DistName( QWidget* parent, const char* name )
: QGroupBox( parent, name )
: QWidget( parent, name )
{
if ( !name )
setName( "DistName" );
setTitle( tr( "Distinguished Name" ) );
setFrameShape( QGroupBox::Box );
setFrameShadow( QGroupBox::Sunken );
setColumnLayout(0, Qt::Vertical );
layout()->setSpacing( 0 );
layout()->setMargin( 0 );
DistNameLayout = new QGridLayout( this );
DistNameLayout = new QGridLayout(this);
DistNameLayout->setAlignment( Qt::AlignTop );
DistNameLayout->setSpacing( 6 );
DistNameLayout->setMargin( 11 );
}
@ -85,7 +78,6 @@ void DistName::setX509name(const x509name &n)
QLabel *lb;
QLineEdit *le;
QStringList sl;
for (int i=0; i<n.entryCount(); i++) {
lb = new QLabel( this );
le = new QLineEdit( this );
@ -98,7 +90,6 @@ void DistName::setX509name(const x509name &n)
DistNameLayout->addWidget( lb, i, 0 );
DistNameLayout->addWidget( le, i, 1 );
}
DistNameLayout->invalidate();
}
DistName::~DistName()

View File

@ -61,7 +61,7 @@ class QComboBox;
class QLineEdit;
class myGridlayout;
class DistName : public QGroupBox
class DistName : public QWidget
{
Q_OBJECT