QCA

certviewdlg.cpp
1 /*
2  Copyright (C) 2007 Justin Karneges <[email protected]>
3 
4  Permission is hereby granted, free of charge, to any person obtaining a copy
5  of this software and associated documentation files (the "Software"), to deal
6  in the Software without restriction, including without limitation the rights
7  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  copies of the Software, and to permit persons to whom the Software is
9  furnished to do so, subject to the following conditions:
10 
11  The above copyright notice and this permission notice shall be included in
12  all copies or substantial portions of the Software.
13 
14  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
18  AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 */
21 
22 #include "certviewdlg.h"
23 
24 #include "ui_certview.h"
25 #include <QtCore>
26 #include <QtCrypto>
27 #include <QtGui>
28 
29 // from qcatool
30 class InfoType
31 {
32 public:
34  QString varname;
35  QString shortname;
36  QString name;
37  QString desc;
38 
39  InfoType()
40  {
41  }
42 
43  InfoType(QCA::CertificateInfoType _type,
44  const QString & _varname,
45  const QString & _shortname,
46  const QString & _name,
47  const QString & _desc)
48  : type(_type)
49  , varname(_varname)
50  , shortname(_shortname)
51  , name(_name)
52  , desc(_desc)
53  {
54  }
55 };
56 
57 static QList<InfoType> makeInfoTypeList(bool legacyEmail = false)
58 {
59  QList<InfoType> out;
60  out += InfoType(
61  QCA::CommonName, "CommonName", "CN", CertViewDlg::tr("Common Name (CN)"), "Full name, domain, anything");
62  out += InfoType(QCA::Email, "Email", "", CertViewDlg::tr("Email Address"), "");
63  if (legacyEmail)
64  out += InfoType(QCA::EmailLegacy, "EmailLegacy", "", CertViewDlg::tr("PKCS#9 Email Address"), "");
65  out += InfoType(QCA::Organization, "Organization", "O", CertViewDlg::tr("Organization (O)"), "Company, group, etc");
66  out += InfoType(QCA::OrganizationalUnit,
67  "OrganizationalUnit",
68  "OU",
69  CertViewDlg::tr("Organizational Unit (OU)"),
70  "Division/branch of organization");
71  out += InfoType(QCA::Locality, "Locality", "", CertViewDlg::tr("Locality (L)"), "City, shire, part of a state");
72  out += InfoType(QCA::State, "State", "", CertViewDlg::tr("State (ST)"), "State within the country");
73  out += InfoType(QCA::Country, "Country", "C", CertViewDlg::tr("Country Code (C)"), "2-letter code");
74  out += InfoType(QCA::IncorporationLocality,
75  "IncorporationLocality",
76  "",
77  CertViewDlg::tr("Incorporation Locality"),
78  "For EV certificates");
79  out += InfoType(QCA::IncorporationState,
80  "IncorporationState",
81  "",
82  CertViewDlg::tr("Incorporation State"),
83  "For EV certificates");
84  out += InfoType(QCA::IncorporationCountry,
85  "IncorporationCountry",
86  "",
87  CertViewDlg::tr("Incorporation Country"),
88  "For EV certificates");
89  out += InfoType(QCA::URI, "URI", "", CertViewDlg::tr("URI"), "");
90  out += InfoType(QCA::DNS, "DNS", "", CertViewDlg::tr("Domain Name"), "Domain (dnsName)");
91  out += InfoType(QCA::IPAddress, "IPAddress", "", CertViewDlg::tr("IP Adddress"), "");
92  out += InfoType(QCA::XMPP, "XMPP", "", CertViewDlg::tr("XMPP Address (JID)"), "From RFC 3920 (id-on-xmppAddr)");
93  return out;
94 }
95 
96 static QString try_print_info(const QString &name, const QStringList &values)
97 {
98  QString out;
99  if (!values.isEmpty()) {
100  QString value = values.join(", ");
101  out = QString(" ") + CertViewDlg::tr("%1: %2").arg(name, value) + '\n';
102  }
103  return out;
104 }
105 
106 static QString print_info(const QString &title, const QCA::CertificateInfo &info)
107 {
108  QString out;
109  QList<InfoType> list = makeInfoTypeList();
110  out += title + '\n';
111  foreach (const InfoType &t, list)
112  out += try_print_info(t.name, info.values(t.type));
113  return out;
114 }
115 
116 static QString cert_info_string(const QCA::Certificate &cert)
117 {
118  QString out;
119  out += CertViewDlg::tr("Serial Number: %1").arg(cert.serialNumber().toString()) + '\n';
120  out += print_info(CertViewDlg::tr("Subject"), cert.subjectInfo());
121  out += print_info(CertViewDlg::tr("Issuer"), cert.issuerInfo());
122  out += CertViewDlg::tr("Validity") + '\n';
123  out += QString(" ") + CertViewDlg::tr("Not before: %1").arg(cert.notValidBefore().toString()) + '\n';
124  out += QString(" ") + CertViewDlg::tr("Not after: %1").arg(cert.notValidAfter().toString()) + '\n';
125  return out;
126 }
127 
128 class CertViewDlg::Private : public QObject
129 {
130  Q_OBJECT
131 public:
132  CertViewDlg * q;
133  Ui_CertView ui;
134  QCA::CertificateChain chain;
135 
136  Private(CertViewDlg *_q)
137  : QObject(_q)
138  , q(_q)
139  {
140  ui.setupUi(q);
141  connect(ui.cb_chain, SIGNAL(activated(int)), SLOT(cb_activated(int)));
142  ui.lb_info->setTextInteractionFlags(Qt::TextSelectableByMouse);
143  }
144 
145  void update()
146  {
147  QStringList names = QCA::makeFriendlyNames(chain);
148  ui.cb_chain->clear();
149  foreach (const QString &s, names)
150  ui.cb_chain->insertItem(ui.cb_chain->count(), s);
151  updateInfo();
152  }
153 
154  void updateInfo()
155  {
156  int x = ui.cb_chain->currentIndex();
157  if (x == -1) {
158  ui.lb_info->setText("");
159  return;
160  }
161 
162  ui.lb_info->setText(cert_info_string(chain[x]));
163  }
164 
165 private Q_SLOTS:
166  void cb_activated(int)
167  {
168  updateInfo();
169  }
170 };
171 
172 CertViewDlg::CertViewDlg(const QCA::CertificateChain &chain, QWidget *parent)
173  : QDialog(parent)
174 {
175  d = new Private(this);
176  d->chain = chain;
177  d->update();
178 }
179 
180 CertViewDlg::~CertViewDlg()
181 {
182  delete d;
183 }
184 
185 #include "certviewdlg.moc"
PKCS#9 Email field, id = "1.2.840.113549.1.9.1".
Definition: qca_cert.h:68
CertificateInfo subjectInfo() const
Properties of the subject of the certificate, as a QMultiMap.
QString toString(Qt::DateFormat format) const const
QString name(const QVariant &location)
CertificateInfo issuerInfo() const
Properties of the issuer of the certificate.
An organisation (eg company), id = "2.5.4.10".
Definition: qca_cert.h:69
Uniform Resource Identifier, id = "GeneralName.uniformResourceIdentifier".
Definition: qca_cert.h:77
QString join(const QString &separator) const const
QString tr(const char *sourceText, const char *disambiguation, int n)
BigInteger serialNumber() const
The serial number of the certificate.
XMPP address (see http://www.ietf.org/rfc/rfc3920.txt), id = "1.3.6.1.5.5.7.8.5". ...
Definition: qca_cert.h:80
The locality (eg city, a shire, or part of a state), id = "2.5.4.7".
Definition: qca_cert.h:71
Type type(const QSqlDatabase &db)
bool isEmpty() const const
Certificate information type.
Definition: qca_cert.h:119
TextSelectableByMouse
The locality of incorporation (EV certificates), id = "1.3.6.1.4.1.311.60.2.1.1". ...
Definition: qca_cert.h:72
The country of incorporation (EV certificates), id = "1.3.6.1.4.1.311.60.2.1.3".
Definition: qca_cert.h:76
Email address, id = "GeneralName.rfc822Name".
Definition: qca_cert.h:67
QCA_EXPORT QStringList makeFriendlyNames(const QList< Certificate > &list)
Create a list of unique friendly names among a list of certificates.
An part of an organisation (eg a division or branch), id = "2.5.4.11".
Definition: qca_cert.h:70
QDateTime notValidBefore() const
The earliest date that the certificate is valid.
QDateTime notValidAfter() const
The latest date that the certificate is valid.
IP address, id = "GeneralName.iPAddress".
Definition: qca_cert.h:79
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
A chain of related Certificates.
Definition: qca_cert.h:1225
QString toString() const
Convert BigInteger to a QString.
void update(Part *part, const QByteArray &data, qint64 dataSize)
The common name (eg person), id = "2.5.4.3".
Definition: qca_cert.h:66
Public Key (X.509) certificate.
Definition: qca_cert.h:856
The state of incorporation (EV certificates), id = "1.3.6.1.4.1.311.60.2.1.2".
Definition: qca_cert.h:74
The state within the country, id = "2.5.4.8".
Definition: qca_cert.h:73
DNS name, id = "GeneralName.dNSName".
Definition: qca_cert.h:78
The country, id = "2.5.4.6".
Definition: qca_cert.h:75
KIOFILEWIDGETS_EXPORT QStringList list(const QString &fileClass)
QList< T > values(const Key &key) const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Sat Sep 25 2021 23:05:35 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.