AusweisApp2
Lade ...
Suche ...
Keine Treffer
CardConnection.h
gehe zur Dokumentation dieser Datei
1
7#pragma once
8
10#include "InputAPDUInfo.h"
11#include "ReaderInfo.h"
13#include "asn1/CVCertificate.h"
15#include "asn1/Chat.h"
17
21
26
27#include <QByteArray>
28
29class test_CardConnection;
30
31namespace governikus
32{
33
38 : public QObject
39{
40 Q_OBJECT
41 friend class MockCardConnection;
42 friend class ::test_CardConnection;
43
44 private:
48 QSharedPointer<CardConnectionWorker> mCardConnectionWorker;
49 ReaderInfo mReaderInfo;
50
51 bool mPaceCanSuccessful;
52 bool mPacePinSuccessful;
53
54 TransmitCommand* createTransmitCommand(const QVector<InputAPDUInfo>& pInputApduInfos, const QString& pSlotHandle);
55 UpdateRetryCounterCommand* createUpdateRetryCounterCommand();
56
57 EstablishPaceChannelCommand* createEstablishPaceChannelCommand(PacePasswordId pPacePasswordId, const QByteArray& pPacePassword, const QByteArray& pEffectiveChat, const QByteArray& pCertificateDescription);
58 SetEidPinCommand* createSetEidPinCommand(const QByteArray& pNewPin, quint8 pTimeoutSeconds);
59 DestroyPaceChannelCommand* createDestroyPaceChannelCommand();
60
61 DidAuthenticateEAC1Command* createDidAuthenticateEAC1Command();
62 DidAuthenticateEAC2Command* createDidAuthenticateEAC2Command(const CVCertificateChain& pCvcChain,
63 const QByteArray& pEphemeralPublicKeyAsHex,
64 const QByteArray& pSignatureAsHex,
65 const QByteArray& pAuthenticatedAuxiliaryDataAsBinary,
66 const QByteArray& pPin);
67
68 template<typename T>
69 QMetaObject::Connection call(BaseCardCommand* pCommand, const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc)
70 {
71 pCommand->moveToThread(mCardConnectionWorker->thread());
72
73 QMetaObject::Connection resultConnection = connect(pCommand, &BaseCardCommand::commandDone, pReceiver, pFunc, Qt::UniqueConnection);
74
75 if (resultConnection)
76 {
77 pCommand->run();
78 }
79 else
80 {
81 qCCritical(card) << "Cannot invoke card command:" << pCommand->metaObject()->className();
82 pCommand->deleteLater();
83 }
84
85 return resultConnection;
86 }
87
88 private Q_SLOTS:
89 void onReaderInfoChanged(const ReaderInfo& pReaderInfo);
90
91 protected:
93
94 public:
95 explicit CardConnection(const QSharedPointer<CardConnectionWorker>& pCardConnectionWorker);
96
100 ~CardConnection() override = default;
101
108 virtual const ReaderInfo& getReaderInfo();
109
110 [[nodiscard]] bool getPaceCanSuccessful() const;
111 [[nodiscard]] bool getPacePinSuccessful() const;
112
113 void setKeepAlive(bool pEnabled);
114 void setProgressMessage(const QString& pMessage, int pProgress = -1);
115
116 template<typename T>
117 QMetaObject::Connection callDidAuthenticateEAC1Command(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc)
118 {
119 auto command = createDidAuthenticateEAC1Command();
120 return call(command, pReceiver, pFunc);
121 }
122
123
124 template<typename T>
125 QMetaObject::Connection callDidAuthenticateEAC2Command(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
126 const CVCertificateChain& pCvcChain,
127 const QByteArray& pEphemeralPublicKeyAsHex,
128 const QByteArray& pSignatureAsHex,
129 const QByteArray& pAuthenticatedAuxiliaryDataAsBinary,
130 const QByteArray& pPin)
131 {
132 auto command = createDidAuthenticateEAC2Command(pCvcChain, pEphemeralPublicKeyAsHex, pSignatureAsHex, pAuthenticatedAuxiliaryDataAsBinary, pPin);
133 return call(command, pReceiver, pFunc);
134 }
135
136
137 template<typename T>
138 QMetaObject::Connection callEstablishPaceChannelCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
139 PacePasswordId pPacePasswordId, const QByteArray& pPacePassword, const QByteArray& pEffectiveChat = QByteArray(), const QByteArray& pCertificateDescription = QByteArray())
140 {
141 EstablishPaceChannelCommand* command = createEstablishPaceChannelCommand(pPacePasswordId, pPacePassword, pEffectiveChat, pCertificateDescription);
142
143 if (pPacePasswordId == PacePasswordId::PACE_CAN)
144 {
145 connect(command, &BaseCardCommand::commandDone, this, [this](QSharedPointer<BaseCardCommand> pCommand){
146 mPaceCanSuccessful = pCommand->getReturnCode() == CardReturnCode::OK;
147 });
148 }
149 else if (pPacePasswordId == PacePasswordId::PACE_PIN)
150 {
151 connect(command, &BaseCardCommand::commandDone, this, [this](QSharedPointer<BaseCardCommand> pCommand){
152 mPacePinSuccessful = pCommand->getReturnCode() == CardReturnCode::OK;
153 if (!mPacePinSuccessful)
154 {
155 mPaceCanSuccessful = false;
156 }
157 });
158 }
159
160 return call(command, pReceiver, pFunc);
161 }
162
163
164 template<typename T>
165 QMetaObject::Connection callSetEidPinCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
166 const QByteArray& pNewPin,
167 quint8 pTimeoutSeconds = 60)
168 {
169 auto command = createSetEidPinCommand(pNewPin, pTimeoutSeconds);
170 return call(command, pReceiver, pFunc);
171 }
172
173
174 template<typename T>
175 QMetaObject::Connection callDestroyPaceChannelCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc)
176 {
177 auto command = createDestroyPaceChannelCommand();
178 return call(command, pReceiver, pFunc);
179 }
180
181
182 template<typename T>
183 QMetaObject::Connection callTransmitCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
184 const QVector<InputAPDUInfo>& pInputApduInfos, const QString& pSlotHandle = QString())
185 {
186 auto command = createTransmitCommand(pInputApduInfos, pSlotHandle);
187 return call(command, pReceiver, pFunc);
188 }
189
190
191 template<typename T>
192 QMetaObject::Connection callUpdateRetryCounterCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc)
193 {
194 auto command = createUpdateRetryCounterCommand();
195 return call(command, pReceiver, pFunc);
196 }
197
198 Q_SIGNALS:
199 void fireReaderInfoChanged(const ReaderInfo& pReaderInfo);
200};
201
202} // namespace governikus
Definition: BaseCardCommand.h:21
void commandDone(QSharedPointer< BaseCardCommand > pCommand)
void run()
Definition: BaseCardCommand.cpp:32
Definition: CVCertificateChain.h:22
This class represents a connection to a smart card.
Definition: CardConnection.h:39
QMetaObject::Connection callDestroyPaceChannelCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc)
Definition: CardConnection.h:175
void fireReaderInfoChanged(const ReaderInfo &pReaderInfo)
friend class MockCardConnection
Definition: CardConnection.h:41
QMetaObject::Connection callSetEidPinCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc, const QByteArray &pNewPin, quint8 pTimeoutSeconds=60)
Definition: CardConnection.h:165
QMetaObject::Connection callUpdateRetryCounterCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc)
Definition: CardConnection.h:192
~CardConnection() override=default
Destroys the CardConnection and disconnects from the card.
bool getPacePinSuccessful() const
Definition: CardConnection.cpp:45
virtual const ReaderInfo & getReaderInfo()
This method returns a stored copy of the reader info object.
Definition: CardConnection.cpp:33
QMetaObject::Connection callTransmitCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc, const QVector< InputAPDUInfo > &pInputApduInfos, const QString &pSlotHandle=QString())
Definition: CardConnection.h:183
bool getPaceCanSuccessful() const
Definition: CardConnection.cpp:39
CardConnection()
Definition: CardConnection.cpp:23
QMetaObject::Connection callEstablishPaceChannelCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc, PacePasswordId pPacePasswordId, const QByteArray &pPacePassword, const QByteArray &pEffectiveChat=QByteArray(), const QByteArray &pCertificateDescription=QByteArray())
Definition: CardConnection.h:138
QMetaObject::Connection callDidAuthenticateEAC1Command(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc)
Definition: CardConnection.h:117
QMetaObject::Connection callDidAuthenticateEAC2Command(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc, const CVCertificateChain &pCvcChain, const QByteArray &pEphemeralPublicKeyAsHex, const QByteArray &pSignatureAsHex, const QByteArray &pAuthenticatedAuxiliaryDataAsBinary, const QByteArray &pPin)
Definition: CardConnection.h:125
void setProgressMessage(const QString &pMessage, int pProgress=-1)
Definition: CardConnection.cpp:59
void setKeepAlive(bool pEnabled)
Definition: CardConnection.cpp:51
Definition: DestroyPaceChannelCommand.h:18
Definition: DidAuthenticateEAC1Command.h:20
Definition: DidAuthenticateEAC2Command.h:20
Definition: EstablishPaceChannelCommand.h:19
Definition: ReaderInfo.h:18
Definition: SetEidPinCommand.h:19
Definition: TransmitCommand.h:20
Definition: UpdateRetryCounterCommand.h:18
#define T(v)
Definition: http_parser.cpp:237
A simple template renderer.
Definition: ActivationContext.h:15
quint8
Definition: ResponseApdu.h:62