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