diff --git a/CertView.cpp b/CertView.cpp index 3daf9e13..928f4298 100644 --- a/CertView.cpp +++ b/CertView.cpp @@ -52,11 +52,13 @@ #include "CertView.h" #include "MainWindow.h" #include +#include #include #include #include #include #include "CertExtend.h" +#include "CertDetail.h" CertView::CertView(QWidget * parent = 0, const char * name = 0, WFlags f = 0) :XcaListView(parent, name, f) @@ -234,7 +236,7 @@ void CertView::newCert(NewX509 *dlg) } } if (cont.length() > 0){ - addStr(subAltName,cont.latin1()); + addStr(subAltName,cont); } if (subAltName.length() > 0) { CERR( "SubAltName:" << subAltName); @@ -257,7 +259,7 @@ void CertView::newCert(NewX509 *dlg) } } if (cont.length() > 0){ - addStr(issAltName,cont.latin1()); + addStr(issAltName,cont); } if (issAltName.length() > 0) { CERR("IssAltName:" << issAltName); @@ -316,7 +318,8 @@ void CertView::extendCert() { pki_x509 *oldcert = NULL, *signer = NULL, *newcert =NULL; pki_key *signkey = NULL; - int serial, days, x; + int days, x; + a1int serial; try { CertExtend_UI *dlg = new CertExtend_UI(this, NULL, true); dlg->image->setPixmap(*MainWindow::certImg); @@ -325,16 +328,15 @@ void CertView::extendCert() return; } oldcert = (pki_x509 *)getSelected(); - if (!oldcert || !(signer = oldcert->getSigner()) || !(signkey = signer->getKey()) || signkey->isPubKey()) return; + if (!oldcert || !(signer = oldcert->getSigner()) || !(signkey = signer->getRefKey()) || signkey->isPubKey()) return; newcert = new pki_x509(oldcert); serial = signer->getIncCaSerial(); // get signers own serial to avoid having the same - if (serial == atoi(signer->getSerial().c_str())) { // FIXME: anybody tell me the string method for this ? + if (serial == signer->getSerial()) { serial = signer->getIncCaSerial(); // just take the next one } - certs->updatePKI(signer); // not so pretty .... - CERR("serial is: " << serial ); + db->updatePKI(signer); // FIXME::not so pretty .... // Date handling x = dlg->validNumber->text().toInt(); @@ -344,7 +346,8 @@ void CertView::extendCert() // change date and serial newcert->setSerial(serial); - newcert->setDates(x); // now and now + x days + newcert->setNotBefore(dlg->getNotBefore()); + newcert->setNotAfter(dlg->getNotAfter()); if (newcert->resetTimes(signer) > 0) { if (QMessageBox::information(this,tr(XCA_TITLE), @@ -358,7 +361,7 @@ void CertView::extendCert() // and finally sign the request newcert->sign(signkey); CERR( "SIGNED"); - insertCert(newcert); + insert(newcert); CERR("inserted"); delete dlg; } @@ -369,23 +372,23 @@ void CertView::extendCert() } } -bool CertView::show(pki_base *basecert, bool import) +void CertView::show(pki_base *basecert, bool import) { pki_x509 *cert = (pki_x509 *)basecert; - if (!cert) return false; - if (opensslError(cert)) return false; + if (!cert) return; + if (opensslError(cert)) return ; try { CertDetail_UI *dlg = new CertDetail_UI(this,0,true); bool ret; dlg->image->setPixmap(*certImg); - dlg->descr->setText(cert->getDescription().c_str()); + dlg->descr->setText(cert->getIntName()); dlg->setCaption(tr(XCA_TITLE)); // examine the key pki_key *key= cert->getKey(); if (key) if (key->isPrivKey()) { - dlg->privKey->setText(key->getDescription().c_str()); + dlg->privKey->setText(key->getIntName()); dlg->privKey->setDisabled(false); } @@ -398,7 +401,7 @@ bool CertView::show(pki_base *basecert, bool import) } else { - dlg->verify->setText(cert->getSigner()->getDescription().c_str()); + dlg->verify->setText(cert->getSigner()->getIntName()); } // check trust state @@ -408,40 +411,41 @@ bool CertView::show(pki_base *basecert, bool import) CERR( cert->getEffTrust() ); // the serial - dlg->serialNr->setText(cert->getSerial().c_str()); + dlg->serialNr->setText(cert->getSerial().toHex()); // details of subject - string land = cert->getDNs(NID_countryName); - string land1 = cert->getDNs(NID_stateOrProvinceName); + 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.geEntryByNid(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)); - dlg->dnCN->setText(cert->getDNs(NID_commonName).c_str() ); - dlg->dnC->setText(land.c_str()); - dlg->dnL->setText(cert->getDNs(NID_localityName).c_str()); - dlg->dnO->setText(cert->getDNs(NID_organizationName).c_str()); - dlg->dnOU->setText(cert->getDNs(NID_organizationalUnitName).c_str()); - dlg->dnEmail->setText(cert->getDNs(NID_pkcs9_emailAddress).c_str()); - - MARK // same for issuer.... - land = cert->getDNi(NID_countryName); - land1 = cert->getDNi(NID_stateOrProvinceName); + 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(cert->getDNi(NID_commonName).c_str() ); - dlg->dnC_2->setText(land.c_str()); - dlg->dnL_2->setText(cert->getDNi(NID_localityName).c_str()); - dlg->dnO_2->setText(cert->getDNi(NID_organizationName).c_str()); - dlg->dnOU_2->setText(cert->getDNi(NID_organizationalUnitName).c_str()); - dlg->dnEmail_2->setText(cert->getDNi(NID_pkcs9_emailAddress).c_str()); - dlg->notBefore->setText(cert->notBefore().c_str()); - dlg->notAfter->setText(cert->notAfter().c_str()); + + 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 @@ -453,18 +457,18 @@ bool CertView::show(pki_base *basecert, bool import) dlg->dateValid->setText(tr("Not valid")); dlg->dateValid->setDisabled(true); } - string revdate = cert->revokedAt(); - if (revdate != "") { - dlg->dateValid->setText(tr("Revoked: ")+ revdate.c_str()); + if (cert->isRevoked()) { + dlg->dateValid->setText(tr("Revoked: ") + + cert->getRevoked().toPretty()); dlg->dateValid->setDisabled(true); } // the fingerprints - dlg->fpMD5->setText(cert->fingerprint(EVP_md5()).c_str()); - dlg->fpSHA1->setText(cert->fingerprint(EVP_sha1()).c_str()); + dlg->fpMD5->setText(cert->fingerprint(EVP_md5())); + dlg->fpSHA1->setText(cert->fingerprint(EVP_sha1())); // V3 extensions - dlg->v3Extensions->setText(cert->printV3ext().c_str()); + dlg->v3Extensions->setText(cert->printV3ext()); // rename the buttons in case of import if (import) { @@ -473,33 +477,33 @@ bool CertView::show(pki_base *basecert, bool import) } // show it to the user... - string odesc = cert->getDescription(); + QString odesc = cert->getIntName(); ret = dlg->exec(); - string ndesc = dlg->descr->text().latin1(); + QString ndesc = dlg->descr->text(); delete dlg; if (!ret && import) { delete cert; } - if (!ret) return false; + if (!ret) return; - if (!certs) { + if (!db) { init_database(); } if (import) { - cert = insertCert(cert); + cert = insert(cert); } if (ndesc != odesc) { - certs->renamePKI(cert, ndesc); - return true; + db->renamePKI(cert, ndesc); + return; } } catch (errorEx &err) { Error(err); } - return false; + return ; } -void CertView::deleteCert() +void CertView::deleteItem() { try { pki_x509 *cert = (pki_x509 *)getSelected(); @@ -517,7 +521,7 @@ void CertView::deleteCert() } } -void CertView::loadCert() +void CertView::loadItem() { QStringList filter; filter.append(tr("Certificates ( *.pem *.der *.crt *.cer )")); @@ -527,7 +531,7 @@ void CertView::loadCert() void CertView::loadItem(QString fname) { - pki_x509 *cert = new pki_x509(s.latin1()); + pki_x509 *cert = new pki_x509(s); return cert; } @@ -553,7 +557,7 @@ void CertView::loadPKCS12() s = *it; s = QDir::convertSeparators(s); try { - pk12 = new pki_pkcs12(s.latin1(), &CertView::passRead); + pk12 = new pki_pkcs12(s, &CertView::passRead); insertP12(pk12); MARK } @@ -630,9 +634,9 @@ void CertView::loadPKCS7() s = *it; s = QDir::convertSeparators(s); try { - pk7 = new pki_pkcs7(s.latin1()); + pk7 = new pki_pkcs7(s); MARK - pk7->readP7(s.latin1()); + pk7->readP7(s); MARK for (int i=0; inumCert(); i++) { acert = pk7->getCert(i); @@ -658,7 +662,7 @@ pki_x509 *CertView::insert(pki_base *item) if (oldcert) { QMessageBox::information(this,tr(XCA_TITLE), tr("The certificate already exists in the database as") +":\n'" + - QString::fromLatin1(oldcert->getDescription().c_str()) + + QString::fromLatin1(oldcert->getIntName()) + "'\n" + tr("and so it was not imported"), "OK"); delete(cert); return oldcert; @@ -671,7 +675,7 @@ pki_x509 *CertView::insert(pki_base *item) } int serial; if (cert->getSigner() != cert && cert->getSigner()) { - sscanf(cert->getSerial().c_str(), "%x", &serial); + sscanf(cert->getSerial(), "%x", &serial); CERR("OTHER SIGNER" << serial); if (serial >= cert->getSigner()->getCaSerial()) { QMessageBox::information(this,tr(XCA_TITLE), @@ -703,8 +707,8 @@ void CertView::writeCert() pki_x509 *oldcrt = NULL; if (!crt) return; pki_key *privkey = crt->getKey(); - ExportCert *dlg = new ExportCert((crt->getDescription() + ".crt").c_str(), - (privkey && privkey->isPrivKey()), getPath(), crt->tinyCAfname().c_str() ); + ExportCert *dlg = new ExportCert((crt->getIntName() + ".crt"), + (privkey && privkey->isPrivKey()), getPath(), crt->tinyCAfname() ); dlg->image->setPixmap(*certImg); int dlgret = dlg->exec(); newPath(dlg->dirPath); @@ -721,11 +725,11 @@ void CertView::writeCert() try { switch (dlg->exportFormat->currentItem()) { case 0: // PEM - crt->writeCert(fname.latin1(),true,false); + crt->writeCert(fname,true,false); break; case 1: // PEM with chain while(crt && crt != oldcrt) { - crt->writeCert(fname.latin1(),true,true); + crt->writeCert(fname,true,true); oldcrt = crt; crt = crt->getSigner(); } @@ -737,7 +741,7 @@ void CertView::writeCert() certs->writeAllCerts(fname,false); break; case 4: // DER - crt->writeCert(fname.latin1(),false,false); + crt->writeCert(fname,false,false); break; case 5: // P7 lonely writePKCS7(fname, P7_ONLY); @@ -774,12 +778,12 @@ void CertView::writePKCS12(QString s, bool chain) if (!privkey || privkey->isPubKey()) { QMessageBox::warning(this,tr(XCA_TITLE), tr("There was no key found for the Certificate: ") + - QString::fromLatin1(cert->getDescription().c_str()) ); + QString::fromLatin1(cert->getIntName()) ); return; } if (s.isEmpty()) return; s = QDir::convertSeparators(s); - pki_pkcs12 *p12 = new pki_pkcs12(cert->getDescription(), cert, privkey, &CertView::passWrite); + pki_pkcs12 *p12 = new pki_pkcs12(cert->getIntName(), cert, privkey, &CertView::passWrite); pki_x509 *signer = cert->getSigner(); int cnt =0; while ((signer != NULL ) && (signer != cert) && chain) { @@ -790,7 +794,7 @@ void CertView::writePKCS12(QString s, bool chain) signer=signer->getSigner(); } CERR("start writing" ); - p12->writePKCS12(s.latin1()); + p12->writePKCS12(s); delete p12; } catch (errorEx &err) { @@ -822,7 +826,7 @@ void CertView::writePKCS7(QString s, int type) { } } } - p7->writeP7(s.latin1(), false); + p7->writeP7(s, false); } catch (errorEx &err) { Error(err); @@ -841,7 +845,7 @@ void CertView::signP7() if (!privkey || privkey->isPubKey()) { QMessageBox::warning(this,tr(XCA_TITLE), tr("There was no key found for the Certificate: ") + - QString::fromLatin1(cert->getDescription().c_str()) ); + QString::fromLatin1(cert->getIntName()) ); return; } filt.append("All Files ( *.* )"); @@ -861,8 +865,8 @@ void CertView::signP7() for ( QStringList::Iterator it = slist.begin(); it != slist.end(); ++it ) { s = *it; s = QDir::convertSeparators(s); - p7->signFile(cert, s.latin1()); - p7->writeP7((s + ".p7s").latin1(), true); + p7->signFile(cert, s); + p7->writeP7((s + ".p7s"), true); } delete p7; } @@ -881,7 +885,7 @@ void CertView::encryptP7() if (!privkey || privkey->isPubKey()) { QMessageBox::warning(this,tr(XCA_TITLE), tr("There was no key found for the Certificate: ") + - QString::fromLatin1(cert->getDescription().c_str()) ); + QString::fromLatin1(cert->getIntName()) ); return; } filt.append("All Files ( *.* )"); @@ -904,9 +908,9 @@ void CertView::encryptP7() MARK s = QDir::convertSeparators(s); MARK - p7->encryptFile(cert, s.latin1()); + p7->encryptFile(cert, s); MARK - p7->writeP7((s + ".p7m").latin1(), true); + p7->writeP7((s + ".p7m"), true); MARK } delete p7; @@ -933,7 +937,7 @@ void CertView::popupMenu(QListViewItem *item, const QPoint &pt, int x) { menu->insertItem(tr("Import from PKCS#7"), this, SLOT(loadPKCS7())); } else { - pki_x509 *cert = (pki_x509 *)certs->getSelectedPKI(item->text(0).latin1()); + pki_x509 *cert = (pki_x509 *)certs->getSelectedPKI(item->text(0)); menu->insertItem(tr("Rename"), this, SLOT(startRenameCert())); menu->insertItem(tr("Show Details"), this, SLOT(showDetailsCert())); menu->insertItem(tr("Export"), subExport); @@ -999,7 +1003,7 @@ void CertView::setTrust() if (state == 0 ) dlg->trust0->setChecked(true); if (state == 1 ) dlg->trust1->setChecked(true); if (state == 2 ) dlg->trust2->setChecked(true); - dlg->certName->setText(cert->getDescription().c_str()); + dlg->certName->setText(cert->getIntName()); if (dlg->exec()) { if (dlg->trust0->isChecked()) newstate = 0; if (dlg->trust1->isChecked()) newstate = 1; @@ -1082,7 +1086,7 @@ void CertView::setTemplate() { pki_x509 *cert = (pki_x509 *)certs->getSelectedPKI(); if (!cert) return; - QString templ = cert->getTemplate().c_str(); + QString templ = cert->getTemplate(); QStringList tempList = temps->getDesc(); unsigned int i, sel=0; bool ok; @@ -1095,7 +1099,7 @@ void CertView::setTemplate() tr("Please select the default Template for signing"), tempList, sel, false, &ok, this ); if (ok && (templ != nTempl)) { - cert->setTemplate(nTempl.latin1()); + cert->setTemplate(nTempl); certs->updatePKI(cert); } } @@ -1129,9 +1133,9 @@ void CertView::toTinyCA() char buf[200]; QList list; pki_x509 *issuedcert; - QString dname = crt->getDescription().c_str(); - QString tcatempdir = settings->getString("TinyCAtempdir").c_str(); - QString tcadir = settings->getString("TinyCAdir").c_str(); + QString dname = crt->getIntName(); + QString tcatempdir = settings->getString("TinyCAtempdir"); + QString tcadir = settings->getString("TinyCAdir"); if (tcatempdir.isEmpty()) { tcatempdir = "templates"; } @@ -1147,8 +1151,8 @@ void CertView::toTinyCA() tcadir = dlg->tinycadir->text(); dname = dlg->dname->text(); - settings->putString("TinyCAtempdir", tcatempdir.latin1()); - settings->putString("TinyCAdir", tcadir.latin1()); + settings->putString("TinyCAtempdir", tcatempdir); + settings->putString("TinyCAdir", tcadir); if (dname.isEmpty()) return; const EVP_CIPHER *enc = EVP_des_ede3_cbc(); @@ -1160,7 +1164,7 @@ void CertView::toTinyCA() //create directory tree if (! mkDir(tcadir)) return; - chdir(tcadir.latin1()); + chdir(tcadir); if (! mkDir("certs")) return; if (! mkDir("crl")) return; if (! mkDir("keys")) return; @@ -1188,7 +1192,7 @@ void CertView::toTinyCA() // copy openssl.cnf tcatempdir += QDir::separator(); tcatempdir += "openssl.cnf"; - fpr = fopen(tcatempdir.latin1(), "r"); + fpr = fopen(tcatempdir, "r"); if (!fpr) { fopenerror("openssl.cnf" ); return; @@ -1204,7 +1208,7 @@ void CertView::toTinyCA() if (x != 0) { x[0]='\0'; fputs(buf, fp); - fputs(tcadir.latin1(), fp); + fputs(tcadir, fp); fputs(x+5, fp); } else { @@ -1234,8 +1238,8 @@ void CertView::toTinyCA() chdir(".."); } fprintf(fp, "%c\t%s\t%s\t%s\tunknown\t%s\n", rev? 'R':'V', - nadate.c_str(), revdate.c_str(), issuedcert->getSerial().c_str(), - issuedcert->subjectOneLine().c_str() ); + nadate, revdate, issuedcert->getSerial(), + issuedcert->subjectOneLine() ); } } @@ -1270,12 +1274,12 @@ bool db_x509::updateView() if (((parentitem != NULL) || (signer == pki) || (signer == NULL) || viewState == 0) && (pki->getPointer() == NULL )) { // create the listview item if (parentitem != NULL) { - current = new QListViewItem(parentitem, pki->getDescription().c_str()); - CERR("Adding as client: "<getDescription().c_str()); + current = new QListViewItem(parentitem, pki->getIntName()); + CERR("Adding as client: "<getIntName()); } else { - current = new QListViewItem(listView, pki->getDescription().c_str()); - CERR("Adding as parent: "<getDescription().c_str()); + current = new QListViewItem(listView, pki->getIntName()); + CERR("Adding as parent: "<getIntName()); } pki->setPointer(current); mycont.remove(pki); diff --git a/KeyView.cpp b/KeyView.cpp index f1aa7a5e..2d4fcaaa 100644 --- a/KeyView.cpp +++ b/KeyView.cpp @@ -89,14 +89,14 @@ void KeyView::newItem() progress->setMinimumDuration(0); progress->setProgress(0); progress->setCaption(tr(XCA_TITLE)); - pki_key *nkey = new pki_key (dlg->keyDesc->text().latin1(), + pki_key *nkey = new pki_key (dlg->keyDesc->text(), &incProgress, progress, sizeList[sel]); progress->cancel(); delete progress; insert(nkey); - x = nkey->getDescription().c_str(); + x = nkey->getIntName(); emit keyDone(x); } catch (errorEx &err) { @@ -118,14 +118,10 @@ void KeyView::show(pki_base *item, bool import) KeyDetail_UI *detDlg = new KeyDetail_UI(this, 0, true, 0 ); try { detDlg->setCaption(tr(XCA_TITLE)); - detDlg->keyDesc->setText( - key->getDescription().c_str() ); - detDlg->keyLength->setText( - key->length().c_str() ); - detDlg->keyPubEx->setText( - key->pubEx().c_str() ); - detDlg->keyModulus->setText( - key->modulus().c_str() ); + 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); @@ -155,7 +151,7 @@ void KeyView::show(pki_base *item, bool import) if (import) { key = (pki_key *)insert(key); } - CERR(ndesc << " " << key->getDescription()); + CERR(ndesc << " " << key->getIntName()); if ( ndesc != odesc) { MARK try { @@ -179,7 +175,7 @@ void KeyView::load() pki_base *KeyView::loadItem(QString fname) { - pki_base *lkey = new pki_key(fname.latin1(), &MainWindow::passRead); + pki_base *lkey = new pki_key(fname, &MainWindow::passRead); return lkey; } @@ -194,7 +190,7 @@ pki_base* KeyView::insert(pki_base *item) lkey->isPubKey()){ QMessageBox::information(this,tr(XCA_TITLE), tr("The key is already in the database as") +":\n'" + - QString::fromLatin1(oldkey->getDescription().c_str()) + + oldkey->getIntName() + "'\n" + tr("and is not going to be imported"), "OK"); delete(lkey); return oldkey; @@ -202,11 +198,11 @@ pki_base* KeyView::insert(pki_base *item) else { QMessageBox::information(this,tr(XCA_TITLE), tr("The database already contains the public part of the imported key as") +":\n'" + - QString::fromLatin1(oldkey->getDescription().c_str()) + + 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->setDescription(oldkey->getDescription()); + lkey->setIntName(oldkey->getIntName()); delete(oldkey); } } @@ -227,7 +223,7 @@ void KeyView::store() pki_key *targetKey = NULL; targetKey = (pki_key *)getSelected(); if (!targetKey) return; - ExportKey *dlg = new ExportKey((targetKey->getDescription() + ".pem").c_str(), + ExportKey *dlg = new ExportKey((targetKey->getIntName() + ".pem"), targetKey->isPubKey(), MainWindow::getPath(), this); dlg->image->setPixmap(*image); int dlgret = dlg->exec(); @@ -237,8 +233,8 @@ void KeyView::store() delete dlg; return; } - string fname = dlg->filename->text().latin1(); - if (fname == "") { + QString fname = dlg->filename->text(); + if (fname.isEmpty()) { delete dlg; return; } @@ -293,10 +289,10 @@ void KeyView::updateViewItem(pki_base *pki) if (! pki) return; XcaListView::updateViewItem(pki); int pixnum = 0; - QListViewItem *current = (QListViewItem *)pki->getPointer(); + QListViewItem *current = pki->getLvi(); if (!current) return; if (((pki_key *)pki)->isPubKey()) pixnum += 1; current->setPixmap(0, *keyicon[pixnum]); - current->setText(1, ((pki_key *)pki)->length().c_str()); + current->setText(1, ((pki_key *)pki)->length()); current->setText(2, QString::number(((pki_key *)pki)->getUcount())); } diff --git a/NewX509.cpp b/NewX509.cpp index 3107a0f5..707419f9 100644 --- a/NewX509.cpp +++ b/NewX509.cpp @@ -199,8 +199,8 @@ 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->getDescription() != "--") { - description->setText(temp->getDescription().c_str()); + if (temp->getIntName() != "--") { + description->setText(temp->getIntName()); tText += tr(" change"); } setup(); @@ -241,7 +241,7 @@ void NewX509::defineRequest(pki_x509req *req) if (!req) return; fromReqCB->setEnabled(true); fromReqCB->setChecked(true); - QString reqname = req->getDescription().c_str(); + QString reqname = req->getIntName(); #ifdef qt3 reqList->setCurrentText(reqname); #else @@ -298,23 +298,23 @@ void NewX509::int2lb(QListBox *lb, int x) void NewX509::fromTemplate(pki_temp *temp) { - countryName->setText(temp->C.c_str()); - stateOrProvinceName->setText(temp->P.c_str()); - localityName->setText(temp->L.c_str()); - organisationName->setText(temp->O.c_str()); - organisationalUnitName->setText(temp->OU.c_str()); - commonName->setText(temp->CN.c_str()); - emailAddress->setText(temp->EMAIL.c_str()); - subAltName->setText(temp->subAltName.c_str()); - issAltName->setText(temp->issAltName.c_str()); - crlDist->setText(temp->crlDist.c_str()); - nsComment->setText(temp->nsComment.c_str()); - nsBaseUrl->setText(temp->nsBaseUrl.c_str()); - nsRevocationUrl->setText(temp->nsRevocationUrl.c_str()); - nsCARevocationUrl->setText(temp->nsCARevocationUrl.c_str()); - nsRenewalUrl->setText(temp->nsRenewalUrl.c_str()); - nsCaPolicyUrl->setText(temp->nsCaPolicyUrl.c_str()); - nsSslServerName->setText(temp->nsSslServerName.c_str()); + 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); @@ -326,8 +326,8 @@ void NewX509::fromTemplate(pki_temp *temp) issAltCp->setChecked(temp->issAltCp); int2lb(keyUsage, temp->keyUse); int2lb(ekeyUsage, temp->eKeyUse); - validNumber->setText(QString::number(temp->validN)); - validRange->setCurrentItem(temp->validM); + //validNumber->setText(QString::number(temp->validN)); + //validRange->setCurrentItem(temp->validM); if (temp->pathLen) { basicPath->setText(QString::number(temp->pathLen)); } @@ -336,24 +336,24 @@ void NewX509::fromTemplate(pki_temp *temp) void NewX509::toTemplate(pki_temp *temp) { - temp->setDescription(description->text().latin1()); - temp->C = countryName->text().latin1(); - temp->P = stateOrProvinceName->text().latin1(); - temp->L = localityName->text().latin1(); - temp->O = organisationName->text().latin1(); - temp->OU = organisationalUnitName->text().latin1(); - temp->CN = commonName->text().latin1(); - temp->EMAIL = emailAddress->text().latin1(); - temp->subAltName = subAltName->text().latin1(); - temp->issAltName = issAltName->text().latin1(); - temp->crlDist = crlDist->text().latin1(); - temp->nsComment = nsComment->text().latin1(); - temp->nsBaseUrl = nsBaseUrl->text().latin1(); - temp->nsRevocationUrl = nsRevocationUrl->text().latin1(); - temp->nsCARevocationUrl = nsCARevocationUrl->text().latin1(); - temp->nsRenewalUrl = nsRenewalUrl->text().latin1(); - temp->nsCaPolicyUrl = nsCaPolicyUrl->text().latin1(); - temp->nsSslServerName = nsSslServerName->text().latin1(); + 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(); @@ -365,8 +365,8 @@ void NewX509::toTemplate(pki_temp *temp) temp->issAltCp = issAltCp->isChecked(); temp->keyUse = lb2int(keyUsage); temp->eKeyUse = lb2int(ekeyUsage); - temp->validN = validNumber->text().toInt(); - temp->validM = validRange->currentItem(); + //temp->validN = validNumber->text().toInt(); + //temp->validM = validRange->currentItem(); temp->pathLen = basicPath->text().toInt(); } @@ -426,13 +426,13 @@ void NewX509::signerChanged() CERR("signer Changed"); if (!certs) return; QString name = certList->currentText(); - CERR( "Certificate: " << name.latin1()); + CERR( "Certificate: " << name); if (name.isEmpty()) return; pki_x509 *cert = (pki_x509 *)certs->getByName(name); if (!cert) return; - QString templ = cert->getTemplate().c_str(); + QString templ = cert->getTemplate(); if (templ.isEmpty()) return; CERR( "set Template: " << templ ); @@ -460,7 +460,7 @@ void NewX509::templateChanged(QString tempname) void NewX509::templateChanged(pki_temp *templ) { - QString tempname = templ->getDescription().c_str(); + QString tempname = templ->getIntName(); templateChanged(tempname); } @@ -523,7 +523,7 @@ void NewX509::helpClicked() pki_key *NewX509::getSelectedKey() { - return MainWindow::getKeyByName(keyList->currentText()); + return (pki_key *)MainWindow::keys->getByName(keyList->currentText()); } x509name NewX509::getX509name() @@ -538,3 +538,17 @@ x509name NewX509::getX509name() x.addEntryByNid(NID_pkcs9_emailAddress, emailAddress->text()); return x; } + +a1time NewX509::getNotBefore() +{ + a1time nb; + nb.set(nbYear->getText() + nbMon->getText() + nbDay->getText()); + return nb; +} + +a1time NewX509::getNotAfter() +{ + a1time nb; + nb.set(nbYear->getText() + nbMon->getText() + nbDay->getText()); + return nb; +} diff --git a/ReqView.cpp b/ReqView.cpp index 6b1829b0..6f8c734c 100644 --- a/ReqView.cpp +++ b/ReqView.cpp @@ -111,7 +111,7 @@ void ReqView::show(pki_base *item, bool import) try { pki_x509req *req = (pki_x509req *)item; ReqDetail_UI *dlg = new ReqDetail_UI(this,0,true); - dlg->descr->setText(req->getDescription().c_str()); + dlg->descr->setText(req->getIntName()); dlg->setCaption(tr(XCA_TITLE)); if (!req->verify() ) { dlg->verify->setDisabled(true); @@ -177,7 +177,7 @@ void ReqView::load() pki_base *ReqView::loadItem(QString fname) { - pki_base *req = new pki_x509req(fname.latin1()); + pki_base *req = new pki_x509req(fname); return req; } @@ -215,7 +215,7 @@ void ReqView::store(bool pem) if (s.isEmpty()) return; s=QDir::convertSeparators(s); try { - req->writeReq(s.latin1(), pem); + req->writeReq(s, pem); } catch (errorEx &err) { Error(err); @@ -249,7 +249,7 @@ pki_base *ReqView::insert(pki_base *item) if (oldreq) { QMessageBox::information(this,tr(XCA_TITLE), tr("The certificate signing request already exists in the database as") +":\n'" + - QString::fromLatin1(oldreq->getDescription().c_str()) + + oldreq->getIntName() + "'\n" + tr("and thus was not stored"), "OK"); delete(req); return oldreq; diff --git a/XcaListView.cpp b/XcaListView.cpp index 074bb0dc..f7a135fe 100644 --- a/XcaListView.cpp +++ b/XcaListView.cpp @@ -194,8 +194,6 @@ void XcaListView::Error(errorEx &err) bool XcaListView::Error(pki_base *pki) { - string err; - 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"); @@ -211,7 +209,7 @@ void XcaListView::updateView() pki_base *pki; container = db->getContainer(); if (container.isEmpty()) return; - for ( pki = container.first(); pki != NULL; pki = container.next() ) pki->delPointer(); + for ( pki = container.first(); pki != NULL; pki = container.next() ) pki->delLvi(); QListIterator it(container); for ( ; it.current(); ++it ) { pki = it.current(); diff --git a/lib/asn1time.cpp b/lib/asn1time.cpp index aecde0b5..1aa04bde 100644 --- a/lib/asn1time.cpp +++ b/lib/asn1time.cpp @@ -118,6 +118,11 @@ QString a1time::toSortable() const return t; } +void a1time::set(const QString &s) +{ + ASN1_GENERALIZEDTIME_set_string(time, (char *)s.latin1()); +} + int a1time::ymdg(int *y, int *m, int *d, int *g) const { char *v; @@ -180,3 +185,47 @@ int a1time::derSize() const { return i2d_ASN1_TIME(time, NULL); } + + +/* this was happily copied from OpenSSL 0.9.7 + * and is used if linking against 0.9.6 + */ + +#if OPENSSL_VERSION_NUMBER < 0x00907000L +/* Convert an ASN1_TIME structure to GeneralizedTime */ +ASN1_GENERALIZEDTIME *a1time::ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZEDTIME **out) + { + ASN1_GENERALIZEDTIME *ret; + char *str; + + // if (!ASN1_TIME_check(t)) return NULL; + + if (!out || !*out) + { + if (!(ret = ASN1_GENERALIZEDTIME_new ())) + return NULL; + if (out) *out = ret; + } + else ret = *out; + + /* If already GeneralizedTime just copy across */ + if (t->type == V_ASN1_GENERALIZEDTIME) + { + if(!ASN1_STRING_set(ret, t->data, t->length)) + return NULL; + return ret; + } + + /* grow the string */ + if (!ASN1_STRING_set(ret, NULL, t->length + 2)) + return NULL; + str = (char *)ret->data; + /* Work out the century and prepend */ + if (t->data[0] >= '5') strcpy(str, "19"); + else strcpy(str, "20"); + + strncat(str, (char *)t->data, t->length); + + return ret; + } +#endif diff --git a/lib/asn1time.h b/lib/asn1time.h index 78386b50..3948c4de 100644 --- a/lib/asn1time.h +++ b/lib/asn1time.h @@ -58,12 +58,16 @@ class a1time { private: ASN1_GENERALIZEDTIME *time; +#if OPENSSL_VERSION_NUMBER < 0x00907000L + ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZEDTIME **out); +#endif public: a1time(); a1time(const ASN1_TIME *a); ~a1time(); void set(const ASN1_TIME *a); void set(time_t t); + void set(const QString &s); QString toPretty() const; QString toPlain() const; QString toSortable() const; diff --git a/lib/db_base.cpp b/lib/db_base.cpp index db877726..ac497cb5 100644 --- a/lib/db_base.cpp +++ b/lib/db_base.cpp @@ -54,16 +54,16 @@ #include #include -db_base::db_base(DbEnv *dbe, string DBfile, string DB, DbTxn *global_tid) +db_base::db_base(DbEnv *dbe, QString DBfile, QString DB, DbTxn *global_tid) { dbenv = dbe; data = new Db(dbe, 0); CERR("DB:" << DBfile); try { #if DB_VERSION_MAJOR >= 4 && DB_VERSION_MINOR >=1 - data->open(NULL, DBfile.c_str(), DB.c_str(), DB_BTREE, DB_CREATE, 0600); + data->open(NULL, DBfile.latin1(), DB.latin1(), DB_BTREE, DB_CREATE, 0600); #else - data->open(DBfile.c_str(), DB.c_str(), DB_BTREE, DB_CREATE, 0600); + data->open(DBfile.latin1(), DB.latin1(), DB_BTREE, DB_CREATE, 0600); #endif } catch (DbException &err) { @@ -105,15 +105,15 @@ void *db_base::getData(void *key, int length, int *dsize) return NULL; } -void *db_base::getData(string key, int *dsize) +void *db_base::getData(QString key, int *dsize) { - return getData((void *)key.c_str(), key.length()+ 1, dsize); + return getData((void *)key.latin1(), key.length()+ 1, dsize); } -string db_base::getString(string key) +QString db_base::getString(QString key) { - string x = ""; + QString x = ""; int dsize; char *p = (char *)getData(key, &dsize); if (p == NULL) { @@ -122,29 +122,29 @@ string db_base::getString(string key) } if ( p[dsize-1] != '\0' ) { int a =p[dsize-1]; - CERR( "getString: stringerror "<< a <<" != 0 (returning empty string) size:" <cursor(tid, &cursor, 0); Dbt *k = new Dbt(); Dbt *d = new Dbt(); - string desc; + QString desc; pki_base *pki; container.clear(); CERR("Load Container"); @@ -210,13 +210,13 @@ void db_base::loadContainer() try { pki = newPKI(); CERR("PKItest"); - CERR(desc.c_str()); + CERR(desc.latin1()); pki->fromData(p, size); - pki->setDescription(desc); + pki->setIntName(desc); container.append(pki); } catch (errorEx &err) { - QMessageBox::warning(NULL,tr(XCA_TITLE), tr("Error loading: '") + desc.c_str() + "'\n" + + QMessageBox::warning(NULL,tr(XCA_TITLE), tr("Error loading: '") + desc.latin1() + "'\n" + err.getCString()); } } @@ -252,11 +252,11 @@ void db_base::_writePKI(pki_base *pki, bool overwrite, DbTxn *tid) { int flags = 0; if (!overwrite) flags = DB_NOOVERWRITE; - string desc = pki->getDescription(); + QString desc = pki->getIntName(); if (desc == "") { desc="unnamed"; } - string orig = desc; + QString orig = desc; int size=0; char field[10]; unsigned char *p = pki->toData(&size); @@ -264,17 +264,17 @@ void db_base::_writePKI(pki_base *pki, bool overwrite, DbTxn *tid) int x = DB_KEYEXIST; // exception occuring here will be catched by the caller while (x == DB_KEYEXIST) { - Dbt k((void *)desc.c_str(), desc.length() + 1); + Dbt k((void *)desc.latin1(), desc.length() + 1); Dbt d((void *)p, size); CERR("Size: " << d.get_size()); if ((x = data->put(tid, &k, &d, flags ))!=0) { data->err(x,"DB Error put"); sprintf(field,"%02i", ++cnt); - string z = field; + QString z = field; desc = orig + "_" + z ; } } - pki->setDescription(desc); + pki->setIntName(desc); } diff --git a/lib/db_base.h b/lib/db_base.h index 7b2a5a02..5383073c 100644 --- a/lib/db_base.h +++ b/lib/db_base.h @@ -96,7 +96,7 @@ class db_base: public QObject void _removePKI(pki_base *pki, DbTxn *tid ); void removeItem(QString k, DbTxn *tid); public: - db_base(DbEnv *dbe, string DBfile, string db, DbTxn *global_tid); + db_base(DbEnv *dbe, QString DBfile, QString db, DbTxn *global_tid); virtual ~db_base(); virtual pki_base *newPKI(){ CERR("VIRTUAL CALLED: newPKI"); return NULL;} @@ -115,15 +115,15 @@ class db_base: public QObject virtual void remFromCont(pki_base *pki); virtual void inToCont(pki_base *pki); void *getData(void* key, int length, int *dsize); - void *getData(string key, int *dsize); - string getString(string key); - string getString(char *key); - int getInt(string key); + void *getData(QString key, int *dsize); + QString getString(QString key); + QString getString(char *key); + int getInt(QString key); void putData(void *key, int keylen, void *dat, int datalen); - void putString(string key, void *dat, int datalen); - void putString(string key, string dat); - void putString(char *key, string dat); - void putInt(string key, int dat); + void putString(QString key, void *dat, int datalen); + void putString(QString key, QString dat); + void putString(char *key, QString dat); + void putInt(QString key, int dat); QPixmap *loadImg(const char *name); QList getContainer(); }; diff --git a/lib/db_crl.cpp b/lib/db_crl.cpp index 3251e104..7953cb60 100644 --- a/lib/db_crl.cpp +++ b/lib/db_crl.cpp @@ -51,7 +51,7 @@ #include "db_crl.h" -db_crl::db_crl(DbEnv *dbe, string DBfile, DbTxn *tid) +db_crl::db_crl(DbEnv *dbe, QString DBfile, DbTxn *tid) :db_base(dbe, DBfile, "crldb", tid) { loadContainer(); diff --git a/lib/db_crl.h b/lib/db_crl.h index c152cde5..b45956d0 100644 --- a/lib/db_crl.h +++ b/lib/db_crl.h @@ -49,10 +49,8 @@ */ -#include "db_base.h" #include "db_x509.h" #include "pki_crl.h" -#include #ifndef DB_CRL_H #define DB_CRL_H @@ -65,7 +63,7 @@ class db_crl: public db_base QPixmap *crlicon; db_x509 *certs; public: - db_crl(DbEnv *dbe, string DBfile, DbTxn *tid); + db_crl(DbEnv *dbe, QString DBfile, DbTxn *tid); pki_base *newPKI(); void revokeCerts(pki_crl *crl); void preprocess(); diff --git a/lib/db_key.cpp b/lib/db_key.cpp index 7aca34fb..1c5d2b40 100644 --- a/lib/db_key.cpp +++ b/lib/db_key.cpp @@ -54,7 +54,7 @@ pki != 0; pki = (pki_key *)container.next() ) -db_key::db_key(DbEnv *dbe, string DBfile, DbTxn *tid) +db_key::db_key(DbEnv *dbe, QString DBfile, DbTxn *tid) :db_base(dbe, DBfile, "keydb",tid) { loadContainer(); diff --git a/lib/db_key.h b/lib/db_key.h index 4015aafb..25b71e7d 100644 --- a/lib/db_key.h +++ b/lib/db_key.h @@ -61,7 +61,7 @@ class db_key: public db_base { Q_OBJECT public: - db_key(DbEnv *dbe, string DBfile, DbTxn *tid); + db_key(DbEnv *dbe, QString DBfile, DbTxn *tid); pki_base *newPKI(); QStringList getPrivateDesc(); QStringList get0PrivateDesc(); diff --git a/lib/db_temp.cpp b/lib/db_temp.cpp index 5bcb7b2f..ee6511d0 100644 --- a/lib/db_temp.cpp +++ b/lib/db_temp.cpp @@ -52,7 +52,7 @@ #include "db_temp.h" -db_temp::db_temp(DbEnv *dbe, string DBfile, QListView *l, DbTxn *tid) +db_temp::db_temp(DbEnv *dbe, QString DBfile, QListView *l, DbTxn *tid) :db_base(dbe, DBfile, "tempdb", tid) { loadContainer(); diff --git a/lib/db_temp.h b/lib/db_temp.h index 7b1c2d5b..03ea3a9d 100644 --- a/lib/db_temp.h +++ b/lib/db_temp.h @@ -49,13 +49,12 @@ */ -#include "db_base.h" -#include "pki_temp.h" -#include - #ifndef DB_TEMP_H #define DB_TEMP_H +#include "db_base.h" +#include "pki_temp.h" + class db_temp: public db_base { @@ -63,7 +62,7 @@ class db_temp: public db_base protected: QPixmap *keyicon; public: - db_temp(DbEnv *dbe, string DBfile, QListView *l, DbTxn *tid); + db_temp(DbEnv *dbe, QString DBfile, QListView *l, DbTxn *tid); pki_base *newPKI(); }; diff --git a/lib/db_x509.cpp b/lib/db_x509.cpp index 36bc635a..23a01747 100644 --- a/lib/db_x509.cpp +++ b/lib/db_x509.cpp @@ -54,7 +54,7 @@ pki != 0; pki = (pki_x509 *)container.next() ) -db_x509::db_x509(DbEnv *dbe, string DBfile, QListView *l, db_key *keyl, DbTxn *tid) +db_x509::db_x509(DbEnv *dbe, QString DBfile, QListView *l, db_key *keyl, DbTxn *tid) :db_x509super(dbe, DBfile, "certdb", keyl, tid) { loadContainer(); diff --git a/lib/db_x509.h b/lib/db_x509.h index 0be8749e..e9aaead4 100644 --- a/lib/db_x509.h +++ b/lib/db_x509.h @@ -66,7 +66,7 @@ class db_x509: public db_x509super protected: QPixmap *certicon[4]; public: - db_x509(DbEnv *dbe, string DBfile, QListView *l, db_key *keyl, DbTxn *tid); + db_x509(DbEnv *dbe, QString DBfile, QListView *l, db_key *keyl, DbTxn *tid); pki_base *newPKI(); pki_x509 *findSigner(pki_x509 *client); bool updateView(); diff --git a/lib/db_x509req.cpp b/lib/db_x509req.cpp index 3b926791..99d6fa22 100644 --- a/lib/db_x509req.cpp +++ b/lib/db_x509req.cpp @@ -50,8 +50,9 @@ #include "db_x509req.h" +#include "pki_x509req.h" -db_x509req::db_x509req(DbEnv *dbe, string DBfile, db_key *dk, DbTxn *tid) +db_x509req::db_x509req(DbEnv *dbe, QString DBfile, db_key *dk, DbTxn *tid) :db_x509super(dbe, DBfile, "reqdb", dk, tid) { loadContainer(); diff --git a/lib/db_x509req.h b/lib/db_x509req.h index a13c842d..d8a3b8d4 100644 --- a/lib/db_x509req.h +++ b/lib/db_x509req.h @@ -49,10 +49,8 @@ */ -#include #include "db_key.h" #include "db_x509super.h" -#include "pki_x509req.h" #ifndef DB_X509REQ_H #define DB_X509REQ_H @@ -62,7 +60,7 @@ class db_x509req: public db_x509super { Q_OBJECT public: - db_x509req(DbEnv *dbe, string DBfile, db_key *dk, DbTxn *tid); + db_x509req(DbEnv *dbe, QString DBfile, db_key *dk, DbTxn *tid); pki_base *newPKI(); }; diff --git a/lib/db_x509super.cpp b/lib/db_x509super.cpp index b63fdc7f..aeef02fc 100644 --- a/lib/db_x509super.cpp +++ b/lib/db_x509super.cpp @@ -53,7 +53,7 @@ #define FOR_container for (pki_x509super *pki = (pki_x509super *)container.first(); \ pki != 0; pki = (pki_x509super *)container.next() ) -db_x509super::db_x509super(DbEnv *dbe, string DBfile, string db, db_key *dk, DbTxn *tid) +db_x509super::db_x509super(DbEnv *dbe, QString DBfile, QString db, db_key *dk, DbTxn *tid) :db_base(dbe, DBfile, db, tid) { keylist = dk; diff --git a/lib/db_x509super.h b/lib/db_x509super.h index de8996f9..69263289 100644 --- a/lib/db_x509super.h +++ b/lib/db_x509super.h @@ -49,7 +49,6 @@ */ -#include #include "db_key.h" #include "pki_x509super.h" @@ -63,7 +62,7 @@ class db_x509super: public db_base protected: db_key *keylist; public: - db_x509super(DbEnv *dbe, string DBfile, string db, db_key *dk, DbTxn *tid); + db_x509super(DbEnv *dbe, QString DBfile, QString db, db_key *dk, DbTxn *tid); void preprocess(); pki_key *findKey(pki_x509super *ref); public slots: diff --git a/lib/exception.h b/lib/exception.h index 1346054f..8d83c12f 100644 --- a/lib/exception.h +++ b/lib/exception.h @@ -48,33 +48,26 @@ * */ -#include - -using namespace std; - -#ifdef HAVE_CONFIG_H -#include "../config.h" -#endif - -#include "base.h" - #ifndef PKI_EXCEPTION_H #define PKI_EXCEPTION_H +#include +#include "base.h" + class errorEx { private: - string msg; + QString msg; public: - errorEx(string txt, string className = "") { + errorEx(QString txt, QString className = "") { msg = txt; - if (!className.empty()) + if (!className.isEmpty()) msg += " (" + className + ")"; } errorEx(const errorEx &e) { msg = e.msg; } - string getString(){return msg;} - const char *getCString(){return msg.c_str();} - bool isEmpty() { return msg.empty();} + QString getString() const {return msg;} + const char *getCString() const {return msg.latin1();} + bool isEmpty() const { return msg.isEmpty();} }; #endif diff --git a/lib/pki_base.cpp b/lib/pki_base.cpp index d20730f0..1008bfca 100644 --- a/lib/pki_base.cpp +++ b/lib/pki_base.cpp @@ -54,10 +54,10 @@ int pki_base::pki_counter = 0; -pki_base::pki_base(const string d) +pki_base::pki_base(const QString d) { desc = d; - className = "pki_base"; + class_name = "pki_base"; pointer = NULL; pki_counter++; } @@ -65,7 +65,7 @@ pki_base::pki_base(const string d) pki_base::pki_base() { desc = ""; - className = "pki_base"; + class_name = "pki_base"; pointer=NULL; pki_counter++; } @@ -76,16 +76,9 @@ pki_base::~pki_base(void) } -string pki_base::getDescription() -{ - string x = desc; - return x; -} - QString pki_base::getIntName() { - QString x = desc.c_str(); - return x; + return desc; } int pki_base::get_pki_counter() @@ -93,15 +86,9 @@ int pki_base::get_pki_counter() return pki_counter; } -string pki_base::getClassName() +QString pki_base::getClassName() { - return className; -} - - -void pki_base::setDescription(const string d) -{ - desc = d; + return class_name; } void pki_base::setIntName(const QString d) @@ -109,18 +96,17 @@ void pki_base::setIntName(const QString d) desc = d.latin1(); } - -void pki_base::fopen_error(const string fname) +void pki_base::fopen_error(const QString fname) { - string txt = "Error opening file: '" + fname + "'"; + QString txt = "Error opening file: '" + fname + "'"; openssl_error(txt); } -void pki_base::openssl_error(const string myerr) const +void pki_base::openssl_error(const QString myerr) const { - string errtxt = ""; - string error = ""; + QString errtxt = ""; + QString error = ""; if (myerr != "") { CERR("PKI ERROR: " << myerr); error += myerr + "\n"; @@ -130,8 +116,8 @@ void pki_base::openssl_error(const string myerr) const CERR("OpenSSL: " << errtxt); error += errtxt + "\n"; } - if (!error.empty()) { - throw errorEx(error, className); + if (!error.isEmpty()) { + throw errorEx(error, class_name); } } @@ -139,12 +125,12 @@ void pki_base::openssl_error(const string myerr) const bool pki_base::ign_openssl_error() const { // ignore openssl errors - string errtxt; + QString errtxt; while (int i = ERR_get_error() ) { errtxt = ERR_error_string(i ,NULL); CERR("IGNORE -> OpenSSL: " << errtxt << " <- IGNORE"); } - return !errtxt.empty(); + return !errtxt.isEmpty(); } int pki_base::intToData(unsigned char **p, const int val) @@ -181,17 +167,17 @@ bool pki_base::boolFromData(unsigned char **p) return ret; } -int pki_base::stringToData(unsigned char **p, const string val) +int pki_base::stringToData(unsigned char **p, const QString val) { int s = (val.length() +1) * sizeof(char); - memcpy(*p, val.c_str(), s); + memcpy(*p, val.latin1(), s); *p += s; return s; } -string pki_base::stringFromData(unsigned char **p) +QString pki_base::stringFromData(unsigned char **p) { - string ret=""; + QString ret=""; while(**p) { ret +=(char)**p; *p += sizeof(char); @@ -199,3 +185,14 @@ string pki_base::stringFromData(unsigned char **p) *p += sizeof(char); return ret; } + +QString pki_base::rmslashdot(const QString &s) +{ + int r = s.findRev('.'); +#ifdef WIN32 + int l = s.findRev('\\'); +#else + int l = s.findRev('/'); +#endif + return s.mid(l+1,r-l-1); +} diff --git a/lib/pki_base.h b/lib/pki_base.h index 5d6899c7..7081f9e1 100644 --- a/lib/pki_base.h +++ b/lib/pki_base.h @@ -54,30 +54,29 @@ #include #include #include -#include #include "base.h" -#define p_tr pass_info::tr class pki_base { + Q_OBJECT private: static int pki_counter; protected: - string desc; - string className; + QString desc; + QString class_name; QListViewItem *pointer; - void openssl_error(const string myerr = "") const; - void fopen_error(const string fname); + void openssl_error(const QString myerr = "") const; + void fopen_error(const QString fname); bool ign_openssl_error() const; int intToData(unsigned char **p, const int val); int intFromData(unsigned char **p); int boolToData(unsigned char **p, const bool val); bool boolFromData(unsigned char **p); - int stringToData(unsigned char **p, const string val); - string stringFromData(unsigned char **p); + int stringToData(unsigned char **p, const QString val); + QString stringFromData(unsigned char **p); public: - pki_base(const string d); + pki_base(const QString d); pki_base(); static int get_pki_counter(); virtual void fromData(unsigned char *p, int size) @@ -87,16 +86,13 @@ class pki_base virtual bool compare(pki_base *ref) { CERR("VIRTUAL FUNCTION CALLED: compare"); return false;}; virtual ~pki_base(); - string getDescription(); - void setDescription(const string d ); QString getIntName(); void setIntName(const QString d ); - void setPointer(void *ptr) { pointer = (QListViewItem *)ptr; } - void delPointer() { pointer = NULL; } - void *getPointer() { return (void *)pointer; } + void delLvi() { pointer = NULL; } QListViewItem *getLvi() { return pointer; } void setLvi(QListViewItem *ptr) { pointer = ptr; } - string getClassName(); + QString getClassName(); + QString rmslashdot(const QString &fname); }; #endif diff --git a/lib/pki_crl.cpp b/lib/pki_crl.cpp index 31a41349..62e43c15 100644 --- a/lib/pki_crl.cpp +++ b/lib/pki_crl.cpp @@ -52,12 +52,12 @@ #include "pki_crl.h" -pki_crl::pki_crl(const string d, pki_x509 *iss ) +pki_crl::pki_crl(const QString d, pki_x509 *iss ) :pki_base(d) { issuer = iss; crl = NULL; - className="pki_crl"; + class_name="pki_crl"; if (!iss) openssl_error("no issuer"); crl = X509_CRL_new(); X509V3_set_ctx(&ctx, issuer->cert, NULL, NULL, crl, 0); @@ -76,13 +76,13 @@ pki_crl::pki_crl(const string d, pki_x509 *iss ) openssl_error(); } -pki_crl::pki_crl(const string fname ) +pki_crl::pki_crl(const QString fname ) :pki_base(fname) { issuer = NULL; crl = X509_CRL_new(); - className="pki_crl"; - FILE * fp = fopen(fname.c_str(), "r"); + class_name="pki_crl"; + FILE * fp = fopen(fname, "r"); if (fp != NULL) { crl = PEM_read_X509_CRL(fp, &crl, NULL, NULL); if (!crl) { @@ -92,14 +92,7 @@ pki_crl::pki_crl(const string fname ) crl = d2i_X509_CRL_fp(fp, &crl); } fclose(fp); - int r = fname.rfind('.'); -#ifdef WIN32 - int l = fname.rfind('\\'); -#else - int l = fname.rfind('/'); -#endif - CERR( fname << "r,l: "<< r <<","<< l ); - setDescription(fname.substr(l+1,r-l-1)); + setIntName(rmslashdot(fname)); openssl_error(); } else fopen_error(fname); @@ -110,7 +103,7 @@ pki_crl::pki_crl() { issuer = NULL; crl = X509_CRL_new(); - className="pki_crl"; + class_name="pki_crl"; openssl_error(); } @@ -179,20 +172,13 @@ void pki_crl::addRevoked(pki_x509 *client) openssl_error(); } -void pki_crl::addV3ext(int nid, string exttext) +void pki_crl::addV3ext(int nid, const QString &exttext) { X509_EXTENSION *ext; - int len; - char *c = NULL; - if ((len = exttext.length()) == 0) return; - len++; - c = (char *)OPENSSL_malloc(len); - openssl_error(); - strncpy(c, exttext.c_str(), len); + char *c = (char *)exttext.latin1(); ext = X509V3_EXT_conf_nid(NULL, &ctx, nid, c); - OPENSSL_free(c); if (!ext) { - string x="CRL v3 Extension: " + exttext; + QString x="CRL v3 Extension: " + exttext; openssl_error(x); return; } @@ -210,9 +196,9 @@ void pki_crl::sign(pki_key *key) } -void pki_crl::writeCrl(const string fname, bool pem) +void pki_crl::writeCrl(const QString fname, bool pem) { - FILE *fp = fopen(fname.c_str(),"w"); + FILE *fp = fopen(fname,"w"); if (fp != NULL) { if (crl){ CERR("writing CRL"); @@ -229,10 +215,12 @@ void pki_crl::writeCrl(const string fname, bool pem) pki_x509 *pki_crl::getIssuer() { return issuer; } -ASN1_TIME *pki_crl::getDate() +a1time pki_crl::getDate() { - if (!crl || !crl->crl) return NULL; - return crl->crl->lastUpdate; + a1time a; + if (!crl || !crl->crl) return a; + a.set(crl->crl->lastUpdate); + return a; } int pki_crl::numRev() @@ -243,49 +231,38 @@ int pki_crl::numRev() return 0; } -long pki_crl::getSerial(int num) +a1int pki_crl::getSerial(int num) { X509_REVOKED *ret = NULL; - long serial=-1; + a1int serial; + serial = -1; if (crl && crl->crl && crl->crl->revoked) { ret = sk_X509_REVOKED_value(crl->crl->revoked, num); - serial = ASN1_INTEGER_get(ret->serialNumber); + serial.set(ret->serialNumber); } openssl_error(); return serial; } -ASN1_TIME *pki_crl::getRevDate(int num) +a1time pki_crl::getRevDate(int num) { X509_REVOKED *ret = NULL; - ASN1_TIME *t = NULL; + a1time t;; if (crl && crl->crl && crl->crl->revoked) { ret = sk_X509_REVOKED_value(crl->crl->revoked, num); openssl_error(); - t = M_ASN1_TIME_dup(ret->revocationDate); + t.set(ret->revocationDate); } return t; } -string pki_crl::issuerName() -{ - char *x = NULL; - if (crl && crl->crl && crl->crl->issuer) - x = X509_NAME_oneline(crl->crl->issuer, NULL ,0); - string ret = x; - if (x) - OPENSSL_free(x); - openssl_error(); - return ret; -} - -X509_NAME *pki_crl::getIssuerX509_NAME() +x509name pki_crl::getIssuerName() { + x509name x; if (crl && crl->crl && crl->crl->issuer) { - return crl->crl->issuer; + x.set(crl->crl->issuer); } - else - return NULL ; + return x ; } bool pki_crl::verify(pki_key *key) @@ -298,7 +275,7 @@ bool pki_crl::verify(pki_key *key) return ret ; } -string pki_crl::printV3ext() +QString pki_crl::printV3ext() { #define V3_BUF 100 ASN1_OBJECT *obj; @@ -306,7 +283,7 @@ string pki_crl::printV3ext() int i, len, n = X509_CRL_get_ext_count(crl); char buffer[V3_BUF+1]; X509_EXTENSION *ex; - string text=""; + QString text=""; for (i=0; i -#include #include #include "pki_x509.h" +#include "x509name.h" +#include "asn1time.h" +#include "asn1int.h" class pki_crl: public pki_base { @@ -65,30 +67,29 @@ class pki_crl: public pki_base X509V3_CTX ctx; public: X509_CRL *crl; - pki_crl(const string d, pki_x509 *iss); - pki_crl(const string fname); + pki_crl(const QString d, pki_x509 *iss); + pki_crl(const QString fname); pki_crl(); /* destructor */ ~pki_crl(); void addRevoked(pki_x509 *rev); - void addExt(int nid, string value); - void write(string fname); - void addV3ext(int nid, string exttext); + void addExt(int nid, QString value); + void write(QString fname); + void addV3ext(int nid, const QString &exttext); void sign(pki_key *key); - void writeCrl(const string fname, bool pem = true); + void writeCrl(const QString fname, bool pem = true); pki_x509 *getIssuer(); - ASN1_TIME *pki_crl::getDate(); + x509name getIssuerName(); + a1time getDate(); virtual void fromData(unsigned char *p, int size); virtual unsigned char *toData(int *size); virtual bool compare(pki_base *refcrl); int numRev(); - string issuerName(); - X509_NAME *getIssuerX509_NAME(); bool verify(pki_key *pkey); - long getSerial(int num); - ASN1_TIME *getRevDate(int num); - string printV3ext(); + a1int getSerial(int num); + a1time getRevDate(int num); + QString printV3ext(); }; diff --git a/lib/pki_key.cpp b/lib/pki_key.cpp index 88ef876d..01698460 100644 --- a/lib/pki_key.cpp +++ b/lib/pki_key.cpp @@ -58,10 +58,10 @@ char pki_key::passwd[40]="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 void pki_key::init() { ucount = 0; - className = "pki_key"; + class_name = "pki_key"; } -pki_key::pki_key(const string d, void (*cb)(int, int,void *),void *prog, int bits = 1024, int type): pki_base(d) +pki_key::pki_key(const QString d, void (*cb)(int, int,void *),void *prog, int bits = 1024, int type): pki_base(d) { init(); key = EVP_PKEY_new(); @@ -94,7 +94,7 @@ pki_key::pki_key(const pki_key *pk) openssl_error(); } -pki_key::pki_key(const string d, int type ) +pki_key::pki_key(const QString d, int type ) :pki_base(d) { init(); @@ -110,15 +110,14 @@ pki_key::pki_key(EVP_PKEY *pkey) key = pkey; } -pki_key::pki_key(const string fname, pem_password_cb *cb, int type ) +pki_key::pki_key(const QString fname, pem_password_cb *cb, int type ) :pki_base(fname) { init(); - pass_info p(XCA_TITLE, p_tr("Please enter the password to decrypt the RSA key.")); + pass_info p(XCA_TITLE, tr("Please enter the password to decrypt the RSA key.")); key = EVP_PKEY_new(); key->type = EVP_PKEY_type(type); - error = ""; - FILE *fp = fopen(fname.c_str(), "r"); + FILE *fp = fopen(fname.latin1(), "r"); RSA *rsakey = NULL; if (fp != NULL) { rsakey = PEM_read_RSAPrivateKey(fp, NULL, cb, &p); @@ -143,8 +142,8 @@ pki_key::pki_key(const string fname, pem_password_cb *cb, int type ) if (!rsakey) { ign_openssl_error(); rewind(fp); - p.setTitle(p_tr("Password for PKCS#8 private key")); - p.setDescription(p_tr("Please enter the password to decrypt the PKCS#8 private key.")); + p.setTitle(tr("Password for PKCS#8 private key")); + p.setDescription(tr("Please enter the password to decrypt the PKCS#8 private key.")); CERR("Fallback to PKCS#8 Private key"); d2i_PKCS8PrivateKey_fp(fp, &key, cb, &p); } @@ -153,14 +152,7 @@ pki_key::pki_key(const string fname, pem_password_cb *cb, int type ) openssl_error(); CERR("assigning loaded key"); } - int r = fname.rfind('.'); -#ifdef WIN32 - int l = fname.rfind('\\'); -#else - int l = fname.rfind('/'); -#endif - CERR( fname << "r,l: "<< r <<","<< l ); - setDescription(fname.substr(l+1,r-l-1)); + setIntName(rmslashdot(fname)); openssl_error(); } else fopen_error(fname); @@ -291,10 +283,10 @@ pki_key::~pki_key() } -void pki_key::writePKCS8(const string fname, pem_password_cb *cb) +void pki_key::writePKCS8(const QString fname, pem_password_cb *cb) { - pass_info p(XCA_TITLE, p_tr("Please enter the password protecting the PKCS#8 key")); - FILE *fp = fopen(fname.c_str(),"w"); + pass_info p(XCA_TITLE, tr("Please enter the password protecting the PKCS#8 key")); + FILE *fp = fopen(fname.latin1(),"w"); if (fp != NULL) { if (key){ CERR( "writing PKCS8"); @@ -307,15 +299,15 @@ void pki_key::writePKCS8(const string fname, pem_password_cb *cb) fclose(fp); } -void pki_key::writeKey(const string fname, const EVP_CIPHER *enc, +void pki_key::writeKey(const QString fname, const EVP_CIPHER *enc, pem_password_cb *cb, bool PEM) { - pass_info p(XCA_TITLE, p_tr("Please enter the password protecting the RSA private key")); + pass_info p(XCA_TITLE, tr("Please enter the password protecting the RSA private key")); if (isPubKey()) { writePublic(fname, PEM); return; } - FILE *fp = fopen(fname.c_str(),"w"); + FILE *fp = fopen(fname.latin1(),"w"); if (fp != NULL) { if (key){ CERR("writing Private Key"); @@ -332,9 +324,9 @@ void pki_key::writeKey(const string fname, const EVP_CIPHER *enc, } -void pki_key::writePublic(const string fname, bool PEM) +void pki_key::writePublic(const QString fname, bool PEM) { - FILE *fp = fopen(fname.c_str(),"w"); + FILE *fp = fopen(fname.latin1(),"w"); if (fp != NULL) { if (key->type == EVP_PKEY_RSA) { CERR("writing Public Key"); @@ -350,19 +342,19 @@ void pki_key::writePublic(const string fname, bool PEM) } -string pki_key::length() +QString pki_key::length() { char st[64]; sprintf(st,"%i bit", EVP_PKEY_size(key) * 8 ); openssl_error(); - string x = st; + QString x = st; return x; } -string pki_key::BN2string(BIGNUM *bn) +QString pki_key::BN2QString(BIGNUM *bn) { if (bn == NULL) return "--"; - string x=""; + QString x=""; char zs[10]; int j; int size = BN_num_bytes(bn); @@ -377,17 +369,17 @@ string pki_key::BN2string(BIGNUM *bn) return x; } -string pki_key::modulus() { - return BN2string(key->pkey.rsa->n); +QString pki_key::modulus() { + return BN2QString(key->pkey.rsa->n); } -string pki_key::pubEx() { - return BN2string(key->pkey.rsa->e); +QString pki_key::pubEx() { + return BN2QString(key->pkey.rsa->e); } -string pki_key::privEx() { +QString pki_key::privEx() { if (isPubKey()) return "Not existent (not a private key)"; - return BN2string(key->pkey.rsa->d); + return BN2QString(key->pkey.rsa->d); } bool pki_key::compare(pki_base *ref) diff --git a/lib/pki_key.h b/lib/pki_key.h index 48701cf9..a82da20e 100644 --- a/lib/pki_key.h +++ b/lib/pki_key.h @@ -52,7 +52,7 @@ #define PKI_KEY_H #include -#include +#include #include #include #include @@ -64,12 +64,13 @@ class pki_key: public pki_base { + friend class pki_x509req; friend class pki_x509; friend class pki_crl; protected: EVP_PKEY *key; - string BN2string(BIGNUM *bn); + QString BN2QString(BIGNUM *bn); int ucount; // usage counter public: static char passwd[40]; @@ -79,13 +80,13 @@ class pki_key: public pki_base * bits is the keylength in bits * cb a callback for e.g. a progress bar */ - pki_key(const string d, void (*cb)(int, int,void *),void *prog,int bits,int type = EVP_PKEY_RSA); + pki_key(const QString d, void (*cb)(int, int,void *),void *prog,int bits,int type = EVP_PKEY_RSA); /* constructor to load a key from a file * fname = filename * pem_password_cb = password callback function */ - pki_key(const string fname, pem_password_cb *cb,int type = EVP_PKEY_RSA); + pki_key(const QString fname, pem_password_cb *cb,int type = EVP_PKEY_RSA); // copy constructor pki_key::pki_key(const pki_key *pk); @@ -98,20 +99,20 @@ class pki_key: public pki_base * size = size of datastruct */ - pki_key(const string d, int type=EVP_PKEY_RSA); + pki_key(const QString d, int type=EVP_PKEY_RSA); pki_key(EVP_PKEY *pkey); void init(); void fromData(unsigned char *p, int size); unsigned char *toData(int *size); bool compare(pki_base *ref); - string length(); - string modulus(); - string pubEx(); - string privEx(); - void writeKey(const string fname, const EVP_CIPHER *enc, + QString length(); + QString modulus(); + QString pubEx(); + QString privEx(); + void writeKey(const QString fname, const EVP_CIPHER *enc, pem_password_cb *cb, bool PEM); - void writePublic(const string fname, bool PEM); - void writePKCS8(const string fname, pem_password_cb *cb); + void writePublic(const QString fname, bool PEM); + void writePKCS8(const QString fname, pem_password_cb *cb); bool isPrivKey(); bool isPubKey(); int verify(); diff --git a/lib/pki_pkcs12.cpp b/lib/pki_pkcs12.cpp index 8ce2514e..0baedebc 100644 --- a/lib/pki_pkcs12.cpp +++ b/lib/pki_pkcs12.cpp @@ -54,10 +54,10 @@ #include "exception.h" -pki_pkcs12::pki_pkcs12(const string d, pki_x509 *acert, pki_key *akey, pem_password_cb *cb): +pki_pkcs12::pki_pkcs12(const QString d, pki_x509 *acert, pki_key *akey, pem_password_cb *cb): pki_base(d) { - className="pki_pkcs12"; + class_name="pki_pkcs12"; key = new pki_key(akey); cert = new pki_x509(acert); certstack = sk_X509_new_null(); @@ -66,7 +66,7 @@ pki_pkcs12::pki_pkcs12(const string d, pki_x509 *acert, pki_key *akey, pem_passw openssl_error(); } -pki_pkcs12::pki_pkcs12(const string fname, pem_password_cb *cb) +pki_pkcs12::pki_pkcs12(const QString fname, pem_password_cb *cb) :pki_base(fname) { FILE *fp; @@ -75,10 +75,10 @@ pki_pkcs12::pki_pkcs12(const string fname, pem_password_cb *cb) X509 *mycert; key=NULL; cert=NULL; pkcs12=NULL; passcb = cb; - className="pki_pkcs12"; + class_name="pki_pkcs12"; certstack = sk_X509_new_null(); - pass_info p(XCA_TITLE, p_tr("Please enter the password to decrypt the PKCS#12 file.")); - fp = fopen(fname.c_str(), "rb"); + pass_info p(XCA_TITLE, tr("Please enter the password to decrypt the PKCS#12 file.")); + fp = fopen(fname, "rb"); if (fp) { pkcs12 = d2i_PKCS12_fp(fp, NULL); CERR("PK12"); @@ -93,12 +93,12 @@ pki_pkcs12::pki_pkcs12(const string fname, pem_password_cb *cb) openssl_error(); if (mykey) { key = new pki_key(mykey); - key->setDescription("pk12-import"); + key->setIntName("pk12-import"); //EVP_PKEY_free(mykey); } if (mycert) { cert = new pki_x509(mycert); - cert->setDescription("pk12-import"); + cert->setIntName("pk12-import"); //X509_free(mycert); } } @@ -135,12 +135,12 @@ void pki_pkcs12::addCaCert(pki_x509 *ca) openssl_error(); } -void pki_pkcs12::writePKCS12(const string fname) +void pki_pkcs12::writePKCS12(const QString fname) { char pass[30]; char desc[100]; - strncpy(desc,getDescription().c_str(),100); - pass_info p(XCA_TITLE, p_tr("Please enter the password to encrypt the PKCS#12 file")); + strncpy(desc,getIntName(),100); + pass_info p(XCA_TITLE, tr("Please enter the password to encrypt the PKCS#12 file")); if (!pkcs12) { if (cert == NULL || key == NULL) { openssl_error("No key or no Cert and no pkcs12...."); @@ -152,7 +152,7 @@ void pki_pkcs12::writePKCS12(const string fname) openssl_error(); CERR("after PKCS12_create...."); } - FILE *fp = fopen(fname.c_str(),"wb"); + FILE *fp = fopen(fname,"wb"); if (fp != NULL) { CERR("writing PKCS#12"); i2d_PKCS12_fp(fp, pkcs12); @@ -182,7 +182,7 @@ pki_x509 *pki_pkcs12::getCa(int x) { pki_x509 *cert; cert = new pki_x509(X509_dup(sk_X509_value(certstack, x))); openssl_error(); - cert->setDescription("pk12-import"); + cert->setIntName("pk12-import"); return cert; } diff --git a/lib/pki_pkcs12.h b/lib/pki_pkcs12.h index 1be9a2a4..2650b912 100644 --- a/lib/pki_pkcs12.h +++ b/lib/pki_pkcs12.h @@ -50,7 +50,6 @@ #include -#include #include #include #include @@ -76,8 +75,8 @@ class pki_pkcs12: public pki_base pem_password_cb *passcb; public: - pki_pkcs12(const string d, pki_x509 *acert, pki_key *akey, pem_password_cb *cb); - pki_pkcs12(const string fname, pem_password_cb *cb); + pki_pkcs12(const QString d, pki_x509 *acert, pki_key *akey, pem_password_cb *cb); + pki_pkcs12(const QString fname, pem_password_cb *cb); /* destructor */ ~pki_pkcs12(); @@ -89,7 +88,7 @@ class pki_pkcs12: public pki_base //bool fromData(unsigned char *p, int size); //unsigned char *toData(int *size); //bool compare(pki_base *ref); - void writePKCS12(const string fname); + void writePKCS12(const QString fname); }; #endif diff --git a/lib/pki_pkcs7.cpp b/lib/pki_pkcs7.cpp index c2f3858b..3ad0e0a8 100644 --- a/lib/pki_pkcs7.cpp +++ b/lib/pki_pkcs7.cpp @@ -53,13 +53,13 @@ #include "exception.h" -pki_pkcs7::pki_pkcs7(const string d ) +pki_pkcs7::pki_pkcs7(const QString d ) :pki_base(d) { p7 = PKCS7_new(); PKCS7_set_type(p7, NID_pkcs7_signed); PKCS7_content_new(p7, NID_pkcs7_data); - className = "pki_pkcs7"; + class_name = "pki_pkcs7"; } @@ -68,12 +68,12 @@ pki_pkcs7::~pki_pkcs7() if (p7) PKCS7_free(p7); } -void pki_pkcs7::encryptFile(pki_x509 *crt, string filename) +void pki_pkcs7::encryptFile(pki_x509 *crt, QString filename) { BIO *bio = NULL; STACK_OF(X509) *certstack; if (!crt) return; - bio = BIO_new_file(filename.c_str(), "r"); + bio = BIO_new_file(filename, "r"); certstack = sk_X509_new_null(); sk_X509_push(certstack, crt->getCert()); openssl_error(); @@ -89,7 +89,7 @@ void pki_pkcs7::signBio(pki_x509 *crt, BIO *bio) STACK_OF(X509) *certstack; if (!crt) return; privkey = crt->getRefKey(); - if (!privkey) throw errorEx("No private key for signing found", className); + if (!privkey) throw errorEx("No private key for signing found", class_name); certstack = sk_X509_new_null(); pki_x509 *signer = crt->getSigner(); @@ -108,11 +108,11 @@ void pki_pkcs7::signBio(pki_x509 *crt, BIO *bio) } -void pki_pkcs7::signFile(pki_x509 *crt, string filename) +void pki_pkcs7::signFile(pki_x509 *crt, QString filename) { BIO *bio = NULL; if (!crt) return; - bio = BIO_new_file(filename.c_str(), "r"); + bio = BIO_new_file(filename, "r"); openssl_error(); signBio(crt, bio); BIO_free(bio); @@ -129,10 +129,10 @@ void pki_pkcs7::signCert(pki_x509 *crt, pki_x509 *contCert) BIO_free(bio); } -void pki_pkcs7::writeP7(string fname,bool PEM) +void pki_pkcs7::writeP7(QString fname,bool PEM) { FILE *fp; - fp = fopen(fname.c_str(),"w"); + fp = fopen(fname,"w"); if (fp != NULL) { if (p7){ if (PEM) @@ -150,7 +150,7 @@ pki_x509 *pki_pkcs7::getCert(int x) { pki_x509 *cert; cert = new pki_x509(X509_dup(sk_X509_value(getCertStack(), x))); openssl_error(); - cert->setDescription("pk7-import"); + cert->setIntName("pk7-import"); return cert; } @@ -160,10 +160,10 @@ int pki_pkcs7::numCert() { return n; } -void pki_pkcs7::readP7(string fname) +void pki_pkcs7::readP7(QString fname) { FILE *fp; - fp = fopen(fname.c_str(), "rb"); + fp = fopen(fname, "rb"); if (fp) { p7 = PEM_read_PKCS7(fp, NULL, NULL, NULL); if (!p7) { diff --git a/lib/pki_pkcs7.h b/lib/pki_pkcs7.h index 68b579e6..0ab25657 100644 --- a/lib/pki_pkcs7.h +++ b/lib/pki_pkcs7.h @@ -52,7 +52,6 @@ #define PKI_PKCS7_H #include -#include #include "pki_x509.h" class pki_pkcs7: public pki_base @@ -63,15 +62,15 @@ class pki_pkcs7: public pki_base STACK_OF(X509) *getCertStack(); void signBio(pki_x509 *crt, BIO * bio); public: - pki_pkcs7(const string d); + pki_pkcs7(const QString d); /* destructor */ ~pki_pkcs7(); - void signFile(pki_x509 *crt, string filename); + void signFile(pki_x509 *crt, QString filename); void signCert(pki_x509 *crt, pki_x509 *contCert); - void encryptFile(pki_x509 *crt, string filename); - void writeP7(string fname,bool PEM); - void readP7(string fname); + void encryptFile(pki_x509 *crt, QString filename); + void writeP7(QString fname,bool PEM); + void readP7(QString fname); pki_x509 *getCert(int x); void addCert(pki_x509 *crt); int numCert(); // number of certs; diff --git a/lib/pki_temp.cpp b/lib/pki_temp.cpp index 58561001..89fe0170 100644 --- a/lib/pki_temp.cpp +++ b/lib/pki_temp.cpp @@ -90,7 +90,7 @@ pki_temp::pki_temp(const pki_temp *pk) eKeyUse=pk->eKeyUse; } -pki_temp::pki_temp(const string d, int atype) +pki_temp::pki_temp(const QString d, int atype) :pki_base(d) { version=1; diff --git a/lib/pki_temp.h b/lib/pki_temp.h index 3de7c868..38651b35 100644 --- a/lib/pki_temp.h +++ b/lib/pki_temp.h @@ -52,7 +52,6 @@ #define PKI_TEMP_H #include -#include #include "pki_base.h" #define tEMPTY 0 @@ -67,16 +66,16 @@ class pki_temp: public pki_base int version; public: - string C,P,L,O,OU,CN,EMAIL; - string subAltName, issAltName, crlDist; - string nsComment, nsBaseUrl, nsRevocationUrl, nsCARevocationUrl, nsRenewalUrl, nsCaPolicyUrl, nsSslServerName; + QString C,P,L,O,OU,CN,EMAIL; + QString subAltName, issAltName, crlDist; + QString nsComment, nsBaseUrl, nsRevocationUrl, nsCARevocationUrl, nsRenewalUrl, nsCaPolicyUrl, nsSslServerName; bool ca, bcCrit, keyUseCrit, eKeyUseCrit, subKey, authKey, subAltCp, issAltCp ; int type, nsCertType, pathLen, validN, validM, keyUse, eKeyUse; // methods pki_temp(const pki_temp *pk); - pki_temp(const string d, int atype=0); + pki_temp(const QString d, int atype=0); /* destructor */ ~pki_temp(); void fromData(unsigned char *p, int size); diff --git a/lib/pki_x509.cpp b/lib/pki_x509.cpp index f12c0354..1003feeb 100644 --- a/lib/pki_x509.cpp +++ b/lib/pki_x509.cpp @@ -85,9 +85,9 @@ pki_x509::pki_x509() openssl_error(); } -pki_x509::pki_x509(const string fname) +pki_x509::pki_x509(const QString fname) { - FILE *fp = fopen(fname.c_str(),"r"); + FILE *fp = fopen(fname.latin1(),"r"); init(); if (fp != NULL) { cert = PEM_read_X509(fp, NULL, NULL, NULL); @@ -97,15 +97,7 @@ pki_x509::pki_x509(const string fname) CERR("Fallback to certificate DER"); cert = d2i_X509_fp(fp, NULL); } - openssl_error(); - int r = fname.rfind('.'); -#ifdef WIN32 - int l = fname.rfind('\\'); -#else - int l = fname.rfind('/'); -#endif - desc = fname.substr(l+1,r-l-1); - if (desc == "") desc = fname; + setIntName(rmslashdot(fname)); openssl_error(); } else fopen_error(fname); @@ -133,7 +125,7 @@ void pki_x509::init() caTemplate = ""; crlDays = 30; lastCrl.now(); - className = "pki_x509"; + class_name = "pki_x509"; cert = NULL; isrevoked = false; } @@ -361,14 +353,12 @@ unsigned char *pki_x509::toData(int *size) return p; } -void pki_x509::writeCert(const string fname, bool PEM, bool append) +void pki_x509::writeCert(const QString fname, bool PEM, bool append) { FILE *fp; - if (append) - fp = fopen(fname.c_str(),"a"); - else - fp = fopen(fname.c_str(),"w"); - + char *_a = "a", *_w="w", *p = _w; + if (append) p=_a; + fp = fopen(fname.latin1(), p); if (fp != NULL) { if (cert){ if (PEM) @@ -441,10 +431,10 @@ void pki_x509::setPubKey(pki_key *key) X509_set_pubkey(cert, key->getKey()); } -string pki_x509::fingerprint(const EVP_MD *digest) +QString pki_x509::fingerprint(const EVP_MD *digest) { int j; - string fp=""; + QString fp=""; char zs[4]; unsigned int n; unsigned char md[EVP_MAX_MD_SIZE]; @@ -500,7 +490,7 @@ void pki_x509::delSigner(pki_x509 *s) psigner = NULL; } -string pki_x509::printV3ext() +QString pki_x509::printV3ext() { #define V3_BUF 100 ASN1_OBJECT *obj; @@ -508,7 +498,7 @@ string pki_x509::printV3ext() int i, len, n = X509_get_ext_count(cert); char buffer[V3_BUF+1]; X509_EXTENSION *ex; - string text=""; + QString text=""; for (i=0; i0) crlDays = s;} -string pki_x509::getTemplate(){ return caTemplate; } +QString pki_x509::getTemplate(){ return caTemplate; } -void pki_x509::setTemplate(string s) {if (s.length()>0) caTemplate = s; } +void pki_x509::setTemplate(QString s) {if (s.length()>0) caTemplate = s; } void pki_x509::setLastCrl(a1time &time) { diff --git a/lib/pki_x509.h b/lib/pki_x509.h index 1acc24a7..f9ab5644 100644 --- a/lib/pki_x509.h +++ b/lib/pki_x509.h @@ -74,18 +74,18 @@ class pki_x509 : public pki_x509super int efftrust; a1int caSerial; int crlDays; - string caTemplate; + QString caTemplate; X509 *cert; void init(); public: pki_x509(X509 *c); pki_x509(const pki_x509 *crt); pki_x509(); - pki_x509(const string fname); + pki_x509(const QString fname); ~pki_x509(); void setSerial(const a1int &serial); - a1int pki_x509::getSerial() const; + a1int getSerial() const; void setNotBefore(const a1time &a1); void setNotAfter(const a1time &a1); a1time getNotBefore() const; @@ -99,14 +99,14 @@ class pki_x509 : public pki_x509super virtual unsigned char *toData(int *size); virtual bool compare(pki_base *refcert); bool canSign(); - void writeCert(const string fname, bool PEM, bool append = false); + void writeCert(const QString fname, bool PEM, bool append = false); bool verify(pki_x509 *signer); pki_key *getPubKey(); // will be created temporarily and must be freed void setPubKey(pki_key *key); pki_x509 *getSigner(); void delSigner(pki_x509 *s); - string fingerprint(const EVP_MD *digest); - string printV3ext(); + QString fingerprint(const EVP_MD *digest); + QString printV3ext(); int checkDate(); void addV3ext(int nid, const QString exttext); void sign(pki_key *signkey); @@ -123,8 +123,8 @@ class pki_x509 : public pki_x509super a1int getIncCaSerial(); a1int getCaSerial(); void setCaSerial(a1int s); - void setTemplate(string s); - string getTemplate(); + void setTemplate(QString s); + QString getTemplate(); void setCrlDays(int s); int getCrlDays(); void setLastCrl(a1time &time); diff --git a/lib/pki_x509req.cpp b/lib/pki_x509req.cpp index b16585eb..8ef82e9b 100644 --- a/lib/pki_x509req.cpp +++ b/lib/pki_x509req.cpp @@ -57,7 +57,7 @@ pki_x509req::pki_x509req() : pki_x509super() { privkey = NULL; - className = "pki_x509req"; + class_name = "pki_x509req"; request = X509_REQ_new(); openssl_error(); } @@ -85,11 +85,11 @@ pki_x509req::~pki_x509req() } -pki_x509req::pki_x509req(const string fname) +pki_x509req::pki_x509req(const QString fname) { privkey = NULL; - className = "pki_x509req"; - FILE *fp = fopen(fname.c_str(),"r"); + class_name = "pki_x509req"; + FILE *fp = fopen(fname.latin1(),"r"); if (fp != NULL) { request = PEM_read_X509_REQ(fp, NULL, NULL, NULL); if (!request) { @@ -99,14 +99,7 @@ pki_x509req::pki_x509req(const string fname) request = d2i_X509_REQ_fp(fp, NULL); openssl_error(); } - int r = fname.rfind('.'); -#ifdef WIN32 - int l = fname.rfind('\\'); -#else - int l = fname.rfind('/'); -#endif - desc = fname.substr(l+1,r-l-1); - if (desc == "") desc = fname; + setIntName(rmslashdot(fname)); openssl_error(); } else fopen_error(fname); @@ -140,9 +133,9 @@ unsigned char *pki_x509req::toData(int *size) return p; } -void pki_x509req::writeReq(const string fname, bool PEM) +void pki_x509req::writeReq(const QString fname, bool PEM) { - FILE *fp = fopen(fname.c_str(),"w"); + FILE *fp = fopen(fname.latin1(),"w"); if (fp != NULL) { if (request){ if (PEM) diff --git a/lib/pki_x509req.h b/lib/pki_x509req.h index 9578db6c..ffdc4ddc 100644 --- a/lib/pki_x509req.h +++ b/lib/pki_x509req.h @@ -66,13 +66,13 @@ class pki_x509req : public pki_x509super X509_REQ *request; public: pki_x509req(); - pki_x509req(const string fname); + pki_x509req(const QString fname); ~pki_x509req(); virtual void fromData(unsigned char *p, int size); virtual unsigned char *toData(int *size); virtual bool compare(pki_base *refreq); x509name getSubject(); - void writeReq(const string fname, bool PEM); + void writeReq(const QString fname, bool PEM); int verify(); pki_key *getPubKey(); void createReq(pki_key *key, x509name &dist_name); diff --git a/lib/x509name.cpp b/lib/x509name.cpp index 555dd4c9..6273e01b 100644 --- a/lib/x509name.cpp +++ b/lib/x509name.cpp @@ -65,6 +65,13 @@ x509name::~x509name() X509_NAME_free(xn); } +void x509name::set(const X509_NAME *n) +{ + X509_NAME_free(xn); + xn = X509_NAME_dup((X509_NAME *)n); +} + + QString x509name::subjectOneLine() const { char *x = X509_NAME_oneline(xn, NULL ,0); diff --git a/lib/x509name.h b/lib/x509name.h index 1057b6fb..d7606ccc 100644 --- a/lib/x509name.h +++ b/lib/x509name.h @@ -62,6 +62,7 @@ class x509name x509name(); x509name(const X509_NAME *n); ~x509name(); + void set(const X509_NAME *n); QString subjectOneLine() const; QString getEntryByNid(int nid) const; int entryCount() const;