1 /* vi: set sw=4 ts=4:
2  *
3  * Copyright (C) 2001 - 2012 Christian Hohnstaedt.
4  *
5  * All rights reserved.
6  */
7 
8 
9 #ifndef __NEWX509_H
10 #define __NEWX509_H
11 
12 #include "ui_NewX509.h"
13 #include "lib/oid.h"
14 #include "lib/db.h"
15 #include "kvView.h"
16 #include "MainWindow.h"
17 #include <openssl/x509v3.h>
18 #include <QListWidget>
19 
20 class MainWindow;
21 class extList;
22 class pki_temp;
23 class pki_x509req;
24 class pki_x509super;
25 class pki_x509;
26 class pki_key;
27 class QPixmap;
28 class QListbox;
29 class x509name;
30 class x509v3ext;
31 class extList;
32 
33 class nameEdit {
34     public:
35 	int nid;
36 	QLineEdit *edit;
37 	QLabel *label;
nameEdit(int n,QLineEdit * e,QLabel * l)38 	nameEdit(int n, QLineEdit *e, QLabel *l) {
39 		nid = n; edit = e; label = l;
40 	}
41 };
42 
43 class NewX509: public QDialog, public Ui::NewX509
44 {
45 		Q_OBJECT
46 	private:
47 		NIDlist aia_nid;
48 		NIDlist attr_nid;
49 		QList<nameEdit> attrEdits;
50 		QList<nameEdit> nameEdits;
51 		X509V3_CTX ext_ctx;
52 		void editV3ext(QLineEdit *le, QString types, int n);
53 		enum pki_type pt;
54 		enum pki_source pkiSource;
55 		void templateChanged(QString templatename);
56 		QString mandatoryDnRemain();
57 		QStringList tabnames;
58 		QList<pki_key*> unusedKeys, allKeys;
59 		pki_x509 *ctx_cert;
60 		QString v3ext_backup;
61 		kvmodel *extDNmodel;
62 		extList getExtDuplicates();
63 		void checkIcon(const QString &text, int nid, QLabel*img);
64 		void selfComment(QString msg);
65 		QMap<QString, QLineEdit*> templateLineEdits;
66 		QMap<QString, QCheckBox*> templateCheckBoxes;
67 		pki_temp *caTemplate(pki_x509 *ca) const;
68 		void setupExplicitDN(NIDlist my_dn_nid);
69 		QList<nameEdit> setupExplicitInputs(NIDlist nid_list,
70                         QWidget *parent, QWidget *old, int columns);
71 
72 	public:
73 		NewX509(QWidget *w = nullptr);
74 		virtual ~NewX509();
75 		void initCtx();
76 		void setRequest(); // reduce to request form
77 		void setTemp(pki_temp *temp); // reduce to template form
78 		void setCert(); // reduce to certificate form
79 		void toTemplate(pki_temp *temp);
80 		void fromTemplate(pki_temp *temp);
81 		void defineTemplate(pki_temp *temp);
82 		void defineRequest(pki_x509req *req);
83 		void defineSigner(pki_x509 *defcert, bool applyTemp);
84 		void fromX509super(pki_x509super *cert_or_req, bool applyTemp);
85 		void templateChanged(pki_temp *templ);
86 		pki_key *getSelectedKey();
87 		pki_x509 *getSelectedSigner();
88 		pki_x509req *getSelectedReq();
89 		x509name getX509name(int _throw = 0);
90 		void setX509name(const x509name &n);
91 		x509v3ext getBasicConstraints();
92 		x509v3ext getSubKeyIdent();
93 		x509v3ext getAuthKeyIdent();
94 		x509v3ext getOCSPstaple();
95 		x509v3ext getKeyUsage();
96 		x509v3ext getEkeyUsage();
97 		x509v3ext getSubAltName();
98 		x509v3ext getIssAltName();
99 		x509v3ext getCrlDist();
100 		x509v3ext getAuthInfAcc();
101 		extList getGuiExt();
102 		extList getNetscapeExt();
103 		extList getAdvanced();
104 		extList getAllExt();
105 		void setupTmpCtx();
106 		void initCtx(pki_x509 *subj, pki_x509 *iss, pki_x509req *req);
107 		void switchHashAlgo();
108 		void setReqAttributes(pki_x509req *req);
109 		void getReqAttributes(pki_x509req *req);
110 		int checkExtDuplicates();
111 		void subjectFromTemplate(pki_temp *temp);
112 		void extensionsFromTemplate(pki_temp *temp);
113 		pki_temp *currentTemplate();
114 		void gotoTab(int tab);
115 		void setupLineEditByNid(int nid, QLineEdit *l);
116 		int validateExtensions(QString nconf, QString &result);
117 		int do_validateExtensions();
118 		void undo_validateExtensions();
119 		enum pki_source getPkiSource() const;
120 		QList<pki_x509req*> getAllRequests() const;
121 		QList<pki_x509*> getAllIssuers() const;
122 		QList<pki_temp*> getAllTempsAndPredefs() const;
123 		QList<pki_key*> getUnusedKeys() const;
124 		QList<pki_key*> getAllKeys() const;
125 
126 	public slots:
127 		void on_fromReqCB_clicked();
128 		void on_keyList_currentIndexChanged(const QString &);
129 		void on_reqList_currentIndexChanged(const QString &);
130 		void newKeyDone(pki_key *nkey);
131 		void on_applyTime_clicked();
132 		void on_editSubAlt_clicked();
133 		void on_editIssAlt_clicked();
134 		void on_editCrlDist_clicked();
135 		void on_editAuthInfAcc_clicked();
136 		void on_foreignSignRB_toggled(bool checked);
137 		void on_genKeyBut_clicked();
138 		void on_showReqBut_clicked();
139 		void on_certList_currentIndexChanged(int index);
140 		void on_applyTemplate_clicked();
141 		void on_applySubject_clicked();
142 		void on_applyExtensions_clicked();
143 		void on_adv_validate_clicked();
144 		void on_usedKeysToo_toggled(bool checked);
145 		void on_tabWidget_currentChanged(int idx);
146 		void on_reqSubChange_clicked();
147 		void accept();
148 		void itemChanged(pki_base*);
149 		void setupExtDNwidget(const QString &s, QLineEdit *w);
150 		void checkSubAltName(const QString & text);
151 		void checkIssAltName(const QString & text);
152 		void checkCrlDist(const QString & text);
153 		void checkAuthInfAcc(const QString & text);
154 };
155 
156 #endif
157