File indexing completed on 2024-06-02 05:24:43
0001 #pragma once 0002 /* smartcard/card.h 0003 0004 This file is part of Kleopatra, the KDE keymanager 0005 SPDX-FileCopyrightText: 2017 Bundesamt für Sicherheit in der Informationstechnik 0006 SPDX-FileContributor: Intevation GmbH 0007 0008 SPDX-License-Identifier: GPL-2.0-or-later 0009 */ 0010 0011 #include "keypairinfo.h" 0012 0013 #include <map> 0014 #include <string> 0015 #include <vector> 0016 0017 #include <QString> 0018 0019 namespace Kleo 0020 { 0021 namespace SmartCard 0022 { 0023 0024 /** Class representing an application on a smartcard or similar hardware token. */ 0025 class Card 0026 { 0027 public: 0028 enum PinState { 0029 UnknownPinState, 0030 NullPin, 0031 PinBlocked, 0032 NoPin, 0033 PinOk, 0034 0035 NumPinStates 0036 }; 0037 0038 enum Status { 0039 NoCard, 0040 CardPresent, 0041 CardActive, 0042 CardUsable, 0043 0044 _NumScdStates, 0045 0046 CardError = _NumScdStates, 0047 0048 NumStates 0049 }; 0050 0051 Card(); 0052 virtual ~Card(); 0053 0054 virtual bool operator==(const Card &other) const; 0055 bool operator!=(const Card &other) const; 0056 0057 void setStatus(Status s); 0058 Status status() const; 0059 0060 void setSerialNumber(const std::string &sn); 0061 std::string serialNumber() const; 0062 0063 void setCardInfo(const std::vector<std::pair<std::string, std::string>> &infos); 0064 0065 QString displaySerialNumber() const; 0066 void setDisplaySerialNumber(const QString &sn); 0067 0068 std::string appName() const; 0069 0070 void setAppVersion(int version); 0071 int appVersion() const; 0072 QString displayAppVersion() const; 0073 0074 void setManufacturer(const std::string &manufacturer); 0075 std::string manufacturer() const; 0076 0077 std::string cardType() const; 0078 0079 int cardVersion() const; 0080 QString displayCardVersion() const; 0081 0082 QString cardHolder() const; 0083 0084 void setSigningKeyRef(const std::string &keyRef); 0085 std::string signingKeyRef() const; 0086 bool hasSigningKey() const; 0087 0088 void setEncryptionKeyRef(const std::string &keyRef); 0089 std::string encryptionKeyRef() const; 0090 bool hasEncryptionKey() const; 0091 0092 void setAuthenticationKeyRef(const std::string &keyRef); 0093 std::string authenticationKeyRef() const; 0094 bool hasAuthenticationKey() const; 0095 0096 std::vector<PinState> pinStates() const; 0097 void setPinStates(const std::vector<PinState> &pinStates); 0098 0099 bool hasNullPin() const; 0100 void setHasNullPin(bool value); 0101 0102 bool canLearnKeys() const; 0103 void setCanLearnKeys(bool value); 0104 0105 QString errorMsg() const; 0106 void setErrorMsg(const QString &msg); 0107 0108 const std::vector<KeyPairInfo> &keyInfos() const; 0109 const KeyPairInfo &keyInfo(const std::string &keyRef) const; 0110 0111 std::string keyFingerprint(const std::string &keyRef) const; 0112 0113 protected: 0114 void setAppName(const std::string &name); 0115 void setInitialKeyInfos(const std::vector<KeyPairInfo> &infos); 0116 0117 virtual void processCardInfo(); 0118 0119 void addCardInfo(const std::string &name, const std::string &value); 0120 std::string cardInfo(const std::string &name) const; 0121 0122 private: 0123 void parseCardInfo(const std::string &name, const std::string &value); 0124 0125 void updateKeyInfo(const KeyPairInfo &keyPairInfo); 0126 0127 private: 0128 bool mCanLearn = false; 0129 bool mHasNullPin = false; 0130 Status mStatus = NoCard; 0131 std::string mSerialNumber; 0132 QString mDisplaySerialNumber; 0133 std::string mAppName; 0134 int mAppVersion = -1; 0135 std::string mCardType; 0136 int mCardVersion = -1; 0137 QString mCardHolder; 0138 std::string mSigningKeyRef; 0139 std::string mEncryptionKeyRef; 0140 std::string mAuthenticationKeyRef; 0141 std::vector<PinState> mPinStates; 0142 QString mErrMsg; 0143 std::vector<KeyPairInfo> mKeyInfos; 0144 std::multimap<std::string, std::string> mCardInfo; 0145 }; 0146 } // namespace Smartcard 0147 } // namespace Kleopatra