Move NID lists for ExtendedKeyUsage and DistinguishedName

into lib/oid.h
This commit is contained in:
Christian Hohnstaedt 2020-02-13 21:08:00 +01:00
parent e4d0ab8f8e
commit c89b6aff29
9 changed files with 66 additions and 79 deletions

View File

@ -26,7 +26,7 @@ dbheaderList db_x509name::getHeaders()
new num_dbheader(HD_subject_hash, false, tr("Subject hash"),
tr("Hash to lookup certs in directories"));
foreach(int nid, *MainWindow::dn_nid)
foreach(int nid, distname_nid)
h << new nid_dbheader(nid, dbheader::hd_x509name);
return h;
}

View File

@ -20,6 +20,9 @@
int first_additional_oid = 0;
NIDlist extkeyuse_nid;
NIDlist distname_nid;
QMap<QString,const char*> oid_name_clash;
QMap<QString,int> oid_lower_map;
@ -129,32 +132,11 @@ static void readOIDs(QString fname)
}
}
void initOIDs()
{
QString oids = QString(QDir::separator()) + "oids.txt";
QString dir = getPrefix();
first_additional_oid = OBJ_new_nid(0);
openssl_error();
for (int i=0; i<first_additional_oid;i++)
addToLowerMap(i);
ign_openssl_error();
readOIDs(dir + oids);
#if !defined(Q_OS_WIN32)
#if !defined(Q_OS_MAC)
readOIDs(QString(ETC) + oids);
#endif
#endif
readOIDs(getUserSettingsDir() + oids);
openssl_error();
}
/* reads a list of OIDs/SNs from a file and turns them into a QValueList
* of integers, representing the NIDs. Usually to be used by NewX509 for
* the list of ExtendedKeyUsage and Distinguished Name
*/
NIDlist readNIDlist(QString fname)
static NIDlist readNIDlist(const QString &fname)
{
int line = 0, nid;
NIDlist nl;
@ -182,3 +164,50 @@ NIDlist readNIDlist(QString fname)
openssl_error();
return nl;
}
/* creates a new nid list from the given filename */
static NIDlist read_nidlist(const QString &name)
{
NIDlist nl;
QString sep = QDir::separator();
/* first try $HOME/xca/ */
nl = readNIDlist(getUserSettingsDir() + sep + name);
#if !defined(Q_OS_WIN32)
#if !defined(Q_OS_MAC)
if (nl.count() == 0){
/* next is /etx/xca/... */
nl = readNIDlist(QString(ETC) + sep + name);
}
#endif
#endif
if (nl.count() == 0) {
/* look at /usr/(local/)share/xca/ */
nl = readNIDlist(getPrefix() + sep + name);
}
return nl;
}
void initOIDs()
{
QString oids = QString(QDir::separator()) + "oids.txt";
QString dir = getPrefix();
first_additional_oid = OBJ_new_nid(0);
openssl_error();
for (int i=0; i<first_additional_oid;i++)
addToLowerMap(i);
ign_openssl_error();
readOIDs(dir + oids);
#if !defined(Q_OS_WIN32)
#if !defined(Q_OS_MAC)
readOIDs(QString(ETC) + oids);
#endif
#endif
readOIDs(getUserSettingsDir() + oids);
extkeyuse_nid = read_nidlist("eku.txt");
distname_nid = read_nidlist("dn.txt");
openssl_error();
}

View File

@ -12,19 +12,17 @@ class QString;
#include <QList>
#include <QMap>
typedef QList<int> NIDlist;
extern NIDlist extkeyuse_nid;
extern NIDlist distname_nid;
extern int first_additional_oid;
extern QMap<QString,const char*> oid_name_clash;
extern QMap<QString,int> oid_lower_map;
typedef QList<int> NIDlist;
/* reads additional OIDs from a file: oid, sn, ln */
void initOIDs();
/* reads a list of OIDs/SNs from a file and turns them into a QValueList
* of integers, representing the NIDs. Usually to be used by NewX509 for
* the list of ExtendedKeyUsage and Distinguished Name
*/
NIDlist readNIDlist(QString fname);
#endif

View File

@ -8,6 +8,7 @@
#include "pki_temp.h"
#include "func.h"
#include "db.h"
#include "oid.h"
#include "exception.h"
#include "widgets/MainWindow.h"
#include <QDir>
@ -272,11 +273,10 @@ void pki_temp::fromData(const unsigned char *p, db_header_t *head )
static QString old_eKeyUse2QString(int old)
{
QStringList sl;
NIDlist eku_nid = *MainWindow::eku_nid;
for (int i=0; i<eku_nid.count(); i++) {
for (int i = 0; i < extkeyuse_nid.count(); i++) {
if (old & (1<<i)) {
sl << OBJ_nid2sn(eku_nid[i]);
sl << OBJ_nid2sn(extkeyuse_nid[i]);
}
}
return sl.join(", ");

View File

@ -44,16 +44,12 @@
#include "PwDialog.h"
#include "OpenDb.h"
db_key *MainWindow::keys = NULL;
db_x509req *MainWindow::reqs = NULL;
db_x509 *MainWindow::certs = NULL;
db_temp *MainWindow::temps = NULL;
db_crl *MainWindow::crls = NULL;
NIDlist *MainWindow::eku_nid = NULL;
NIDlist *MainWindow::dn_nid = NULL;
OidResolver *MainWindow::resolver = NULL;
void MainWindow::enableTokenMenu(bool enable)
@ -132,11 +128,6 @@ MainWindow::MainWindow(QWidget *parent)
EVP_add_digest_alias(SN_sha256,SN_dsa_with_SHA256);
EVP_add_digest_alias(SN_sha384,SN_ecdsa_with_SHA384);
EVP_add_digest_alias(SN_sha512,SN_ecdsa_with_SHA512);
/* read in all our own OIDs */
initOIDs();
eku_nid = read_nidlist("eku.txt");
dn_nid = read_nidlist("dn.txt");
setAcceptDrops(true);
@ -230,29 +221,6 @@ void MainWindow::setItemEnabled(bool enable)
enableTokenMenu(pkcs11::loaded());
}
/* creates a new nid list from the given filename */
NIDlist *MainWindow::read_nidlist(QString name)
{
NIDlist nl;
name = QDir::separator() + name;
/* first try $HOME/xca/ */
nl = readNIDlist(getUserSettingsDir() + name);
#if !defined(Q_OS_WIN32)
#if !defined(Q_OS_MAC)
if (nl.count() == 0){
/* next is /etx/xca/... */
nl = readNIDlist(QString(ETC) + name);
}
#endif
#endif
if (nl.count() == 0) {
/* look at /usr/(local/)share/xca/ */
nl = readNIDlist(getPrefix() + name);
}
return new NIDlist(nl);
}
void MainWindow::init_images()
{
bigKey->setPixmap(QPixmap(":keyImg"));
@ -566,10 +534,6 @@ MainWindow::~MainWindow()
ERR_free_strings();
EVP_cleanup();
OBJ_cleanup();
if (eku_nid)
delete eku_nid;
if (dn_nid)
delete dn_nid;
delete dbindex;
#ifdef MDEBUG
fprintf(stderr, "Memdebug:\n");

View File

@ -105,8 +105,7 @@ NewX509::NewX509(QWidget *parent)
:QDialog(parent)
{
int i;
eku_nid = *MainWindow::eku_nid;
dn_nid = *MainWindow::dn_nid;
aia_nid << OBJ_sn2nid("OCSP") << OBJ_sn2nid("caIssuers");
attr_nid << NID_pkcs9_unstructuredName << NID_pkcs9_challengePassword;
QStringList keys;
@ -116,7 +115,7 @@ NewX509::NewX509(QWidget *parent)
/* temporary storage for creating temporary X509V3_CTX */
ctx_cert = NULL;
pkiSource = generated;
foreach(int nid, dn_nid)
foreach(int nid, distname_nid)
keys << QString(OBJ_nid2ln(nid));
extDNlist->setKeys(keys);
@ -172,7 +171,7 @@ NewX509::NewX509(QWidget *parent)
tempList->insertPkiItems(MainWindow::temps->getAllAndPredefs());
// setup Extended keyusage
foreach(int nid, eku_nid)
foreach(int nid, extkeyuse_nid)
ekeyUsage->addItem(OBJ_nid2ln(nid));
// setup Authority Info Access

View File

@ -43,8 +43,6 @@ class NewX509: public QDialog, public Ui::NewX509
{
Q_OBJECT
private:
NIDlist eku_nid;
NIDlist dn_nid;
NIDlist aia_nid;
NIDlist attr_nid;
QList<nameEdit> attrEdits;

View File

@ -90,10 +90,8 @@ x509v3ext NewX509::getEkeyUsage()
int rows = ekeyUsage->count();
for (int i=0; i<rows; i++) {
//QListWidgetItem *li = ekeyUsage->item(i);
//printf("rows = %d, ekeyUsage = %d, %p\n", rows, i, li);
if (ekeyUsage->isItemSelected(ekeyUsage->item(i))) {
cont << QString(OBJ_nid2sn(eku_nid[i]));
cont << QString(OBJ_nid2sn(extkeyuse_nid[i]));
}
}
if (ekuCritical->isChecked() && cont.count() > 0)

View File

@ -9,6 +9,7 @@
#include "Options.h"
#include "SearchPkcs11.h"
#include "lib/pki_scard.h"
#include "lib/oid.h"
#include <openssl/objects.h>
#include <QMessageBox>
#include <QToolTip>
@ -21,7 +22,7 @@ Options::Options(MainWindow *parent)
setWindowTitle(XCA_TITLE);
setupUi(this);
foreach(int nid, *MainWindow::dn_nid) {
foreach(int nid, distname_nid) {
QString n = OBJ_nid2ln(nid);
extDNobj->addItem(n);
expDNobj->addItem(n);