xca/lib/load_obj.cpp
Christian 8283d8e7b9 replace copyright notice in source files
(copyright and licence itself remain unchanged)
fix configure to set Qt include dir
code justifying
2007-04-12 12:25:28 +02:00

273 lines
5.1 KiB
C++

/* vi: set sw=4 ts=4:
*
* Copyright (C) 2001 - 2007 Christian Hohnstaedt.
*
* All rights reserved.
*/
#include "load_obj.h"
#include "pki_x509.h"
#include "pki_key.h"
#include "pki_x509req.h"
#include "pki_pkcs7.h"
#include "pki_pkcs12.h"
#include "widgets/MainWindow.h"
load_base::load_base()
{
filter = QObject::tr("All files ( *.* )");
caption = "";
}
pki_base * load_base::loadItem(QString s)
{
return NULL;
}
load_base::~load_base()
{
}
/* Keys */
load_key::load_key()
:load_base()
{
filter = QObject::tr("PKI Keys ( *.pem *.der *.key );;"
"PKCS#8 Keys ( *.p8 *.pk8 );;") + filter;
caption = QObject::tr("Import RSA key");
}
pki_base * load_key::loadItem(QString s)
{
pki_key *lkey = new pki_key();
if (!lkey)
return NULL;
try {
lkey->fload(s);
}
catch (errorEx &err){
delete lkey;
throw err;
}
return lkey;
};
/* Requests */
load_req::load_req()
:load_base()
{
filter = QObject::tr("PKCS#10 CSR ( *.pem *.der *.csr );;"
"Netscape Request ( *.spkac *.spc );;") + filter;
caption = QObject::tr("Import Request");
}
pki_base * load_req::loadItem(QString s)
{
pki_x509req *req = new pki_x509req(s);
if (!req)
return NULL;
try {
req->fload(s);
}
catch (errorEx &err){
delete req;
throw err;
}
return req;
};
/* Certificates */
load_cert::load_cert()
:load_base()
{
filter = QObject::tr("Certificates ( *.pem *.der *.crt *.cer );;") + filter;
caption = QObject::tr("Import X.509 Certificate");
}
pki_base * load_cert::loadItem(QString s)
{
pki_x509 *crt = new pki_x509(s);
if (!crt)
return NULL;
try {
crt->fload(s);
}
catch (errorEx &err){
delete crt;
throw err;
}
return crt;
};
/* PKCS#7 Certificates */
load_pkcs7::load_pkcs7()
:load_base()
{
filter = QObject::tr("PKCS#7 data ( *.p7s *.p7m *.p7b );;") + filter;
caption = QObject::tr("Import PKCS#7 Certificates");
}
pki_base * load_pkcs7::loadItem(QString s)
{
pki_pkcs7 *p7 = new pki_pkcs7(s);
if (!p7)
return NULL;
try {
p7->fload(s);
}
catch (errorEx &err){
delete p7;
throw err;
}
return p7;
};
/* PKCS#12 Certificates */
load_pkcs12::load_pkcs12()
:load_base()
{
filter = QObject::tr("PKCS#12 Certificates ( *.p12 *.pfx );;") + filter;
caption = QObject::tr("Import PKCS#12 Private Certificate");
}
pki_base * load_pkcs12::loadItem(QString s)
{
pki_base *p12 = new pki_pkcs12(s, MainWindow::passRead);
return p12;
};
/* Templates */
load_temp::load_temp()
:load_base()
{
filter = QObject::tr("XCA templates ( *.xca );;") + filter;
caption = QObject::tr("Import XCA Templates");
}
pki_base * load_temp::loadItem(QString s)
{
pki_temp *temp = new pki_temp(s);
if (!temp)
return NULL;
try {
temp->loadTemp(s);
}
catch (errorEx &err){
delete temp;
throw err;
}
return temp;
};
/* CRLs */
load_crl::load_crl()
:load_base()
{
filter = QObject::tr("Revocation lists ( *.pem *.der *.crl );;") + filter;
caption = QObject::tr("Import Certificate Revocation List");
}
pki_base * load_crl::loadItem(QString s)
{
pki_crl *crl = new pki_crl(s);
if (!crl)
return NULL;
try {
crl->fload(s);
}
catch (errorEx &err){
delete crl;
throw err;
}
return crl;
};
/* Database */
load_db::load_db()
:load_base()
{
filter = QObject::tr("XCA Databases ( *.xdb );;") + filter;
caption = QObject::tr("Open XCA Database");
}
/* General PEM loader */
static load_base *getload(QString text)
{
int pos;
#define D5 "-----"
pos = text.indexOf(D5 "BEGIN ");
if (pos <0)
return NULL;
text = text.remove(0, pos + 11);
if (text.startsWith(PEM_STRING_X509_OLD D5) ||
text.startsWith(PEM_STRING_X509 D5) ||
text.startsWith(PEM_STRING_X509_TRUSTED D5))
return new load_cert();
if (text.startsWith(PEM_STRING_PKCS7 D5))
return new load_pkcs7();
if (text.startsWith(PEM_STRING_X509_REQ_OLD D5) ||
text.startsWith(PEM_STRING_X509_REQ D5))
return new load_req();
if (text.startsWith(PEM_STRING_X509_CRL D5))
return new load_crl();
if (text.startsWith(PEM_STRING_EVP_PKEY D5) ||
text.startsWith(PEM_STRING_PUBLIC D5) ||
text.startsWith(PEM_STRING_RSA D5) ||
text.startsWith(PEM_STRING_RSA_PUBLIC D5) ||
text.startsWith(PEM_STRING_DSA D5) ||
text.startsWith(PEM_STRING_DSA_PUBLIC D5) ||
text.startsWith(PEM_STRING_PKCS8 D5) ||
text.startsWith(PEM_STRING_PKCS8INF D5))
return new load_key();
return NULL;
}
load_pem::load_pem()
:load_base()
{
filter = QObject::tr("PEM files ( *.pem );;") + filter;
caption = QObject::tr("Load PEM encoded file");
}
pki_base * load_pem::loadItem(QString fname)
{
char buf[100];
int len;
FILE * fp;
QString text;
pki_base *item = NULL;
load_base *lb = NULL;
try {
fp = fopen(CCHAR(fname), "r");
if (!fp)
throw errorEx(QObject::tr("File open error: ") + fname);
len = fread(buf, 1, 99, fp);
fclose(fp);
if (len < 11)
throw errorEx(QObject::tr("File corrupted: ") + fname);
buf[len] = '\0';
text = buf;
lb = getload(text);
if (!lb)
throw errorEx(QObject::tr("Unknown PEM file: ") + fname);
item = lb->loadItem(fname);
delete lb;
}
catch (errorEx &err) {
MainWindow::Error(err);
if (item)
delete item;
item = NULL;
if (lb)
delete lb;
}
return item;
};