1 /*  view/pivcardwiget.h
2 
3     This file is part of Kleopatra, the KDE keymanager
4     SPDX-FileCopyrightText: 2020 g10 Code GmbH
5     SPDX-FileContributor: Ingo Klöcker <dev@ingo-kloecker.de>
6 
7     SPDX-License-Identifier: GPL-2.0-or-later
8 */
9 #pragma once
10 
11 #include <QMap>
12 #include <QWidget>
13 
14 #include <gpgme++/error.h>
15 
16 class QGridLayout;
17 class QLabel;
18 class QPushButton;
19 
20 namespace Kleo
21 {
22 
23 namespace SmartCard
24 {
25 struct KeyPairInfo;
26 class PIVCard;
27 } // namespace SmartCard
28 
29 class PIVCardWidget: public QWidget
30 {
31     Q_OBJECT
32 public:
33     explicit PIVCardWidget(QWidget *parent = nullptr);
34     ~PIVCardWidget() override;
35 
36     void setCard(const SmartCard::PIVCard* card);
37 
38     struct KeyWidgets {
39         QLabel *keyGrip = nullptr;
40         QLabel *keyAlgorithm = nullptr;
41         QLabel *certificateInfo = nullptr;
42         QPushButton *generateButton = nullptr;
43         QPushButton *createCSRButton = nullptr;
44         QPushButton *writeCertificateButton = nullptr;
45         QPushButton *importCertificateButton = nullptr;
46         QPushButton *writeKeyButton = nullptr;
47     };
48 
49 private:
50     KeyWidgets createKeyWidgets(const SmartCard::KeyPairInfo &keyInfo);
51     void updateKeyWidgets(const std::string &keyRef, const SmartCard::PIVCard *card);
52     void generateKey(const std::string &keyref);
53     void createCSR(const std::string &keyref);
54     void writeCertificateToCard(const std::string &keyref);
55     void importCertificateFromCard(const std::string &keyref);
56     void writeKeyToCard(const std::string &keyref);
57     void createKeyFromCardKeys();
58     void changePin(const std::string &keyRef);
59     void setAdminKey();
60 
61 private:
62     std::string mCardSerialNumber;
63     QLabel *mSerialNumber = nullptr;
64     QLabel *mVersionLabel = nullptr;
65     QPushButton *mKeyForCardKeysButton = nullptr;
66     QMap<std::string, KeyWidgets> mKeyWidgets;
67 };
68 } // namespace Kleo
69 
70