AusweisApp
 
Lade ...
Suche ...
Keine Treffer
CardConnection.h
gehe zur Dokumentation dieser Datei
1
4
5#pragma once
6
8#include "InputAPDUInfo.h"
9#include "ReaderInfo.h"
13
17
23
24#include <QByteArray>
25
26
27class test_CardConnection;
28
29
30namespace governikus
31{
33 : public QObject
34{
35 Q_OBJECT
36 friend class MockCardConnection;
37 friend class ::test_CardConnection;
38
39 private:
43 QSharedPointer<CardConnectionWorker> mCardConnectionWorker;
44 ReaderInfo mReaderInfo;
45
46 bool mPaceCanSuccessful;
47 bool mPacePinSuccessful;
48
49 TransmitCommand* createTransmitCommand(const QList<InputAPDUInfo>& pInputApduInfos, const QString& pSlotHandle);
50 UpdateRetryCounterCommand* createUpdateRetryCounterCommand();
51 ResetRetryCounterCommand* createResetRetryCounterCommand();
52
53 EstablishPaceChannelCommand* createEstablishPaceChannelCommand(PacePasswordId pPacePasswordId, const QByteArray& pPacePassword, const QByteArray& pEffectiveChat, const QByteArray& pCertificateDescription);
54 SetEidPinCommand* createSetEidPinCommand(const QByteArray& pNewPin, quint8 pTimeoutSeconds);
55 DestroyPaceChannelCommand* createDestroyPaceChannelCommand(const QString& pSlotHandle);
56
57 DidAuthenticateEAC1Command* createDidAuthenticateEAC1Command();
58 DidAuthenticateEAC2Command* createDidAuthenticateEAC2Command(const CVCertificateChain& pCvcChain,
59 const QByteArray& pEphemeralPublicKeyAsHex,
60 const QByteArray& pSignatureAsHex,
61 const QByteArray& pAuthenticatedAuxiliaryDataAsBinary,
62 const QByteArray& pPin);
63
64 template<typename T>
65 QMetaObject::Connection call(BaseCardCommand* pCommand, const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc)
66 {
67 pCommand->moveToThread(mCardConnectionWorker->thread());
68
69 QMetaObject::Connection resultConnection = connect(pCommand, &BaseCardCommand::commandDone, pReceiver, pFunc);
70
71 if (resultConnection)
72 {
73 pCommand->run();
74 }
75 else
76 {
77 qCCritical(card) << "Cannot invoke card command:" << pCommand->metaObject()->className();
78 pCommand->deleteLater();
79 }
80
81 return resultConnection;
82 }
83
84 private Q_SLOTS:
85 void onReaderInfoChanged(const ReaderInfo& pReaderInfo);
86
87 protected:
89
90 public:
91 explicit CardConnection(const QSharedPointer<CardConnectionWorker>& pCardConnectionWorker);
92
96 ~CardConnection() override = default;
97
104 virtual const ReaderInfo& getReaderInfo();
105
106 [[nodiscard]] bool getPaceCanSuccessful() const;
107 [[nodiscard]] bool getPacePinSuccessful() const;
108
109 void setKeepAlive(bool pEnabled);
110 void setProgressMessage(const QString& pMessage, int pProgress = -1);
111 void setErrorMessage(const QString& pMessage);
112
113 template<typename T>
114 QMetaObject::Connection callDidAuthenticateEAC1Command(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc)
115 {
116 auto command = createDidAuthenticateEAC1Command();
117 return call(command, pReceiver, pFunc);
118 }
119
120
121 template<typename T>
122 QMetaObject::Connection callDidAuthenticateEAC2Command(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
123 const CVCertificateChain& pCvcChain,
124 const QByteArray& pEphemeralPublicKeyAsHex,
125 const QByteArray& pSignatureAsHex,
126 const QByteArray& pAuthenticatedAuxiliaryDataAsBinary,
127 const QByteArray& pPin)
128 {
129 auto command = createDidAuthenticateEAC2Command(pCvcChain, pEphemeralPublicKeyAsHex, pSignatureAsHex, pAuthenticatedAuxiliaryDataAsBinary, pPin);
130 return call(command, pReceiver, pFunc);
131 }
132
133
134 template<typename T>
135 QMetaObject::Connection callEstablishPaceChannelCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
136 PacePasswordId pPacePasswordId, const QByteArray& pPacePassword, const QByteArray& pEffectiveChat = QByteArray(), const QByteArray& pCertificateDescription = QByteArray())
137 {
138 EstablishPaceChannelCommand* command = createEstablishPaceChannelCommand(pPacePasswordId, pPacePassword, pEffectiveChat, pCertificateDescription);
139
140 if (pPacePasswordId == PacePasswordId::PACE_CAN)
141 {
142 connect(command, &BaseCardCommand::commandDone, this, [this](QSharedPointer<BaseCardCommand> pCommand){
143 mPaceCanSuccessful = pCommand->getReturnCode() == CardReturnCode::OK;
144 });
145 }
146 else if (pPacePasswordId == PacePasswordId::PACE_PIN)
147 {
148 connect(command, &BaseCardCommand::commandDone, this, [this](QSharedPointer<BaseCardCommand> pCommand){
149 mPacePinSuccessful = pCommand->getReturnCode() == CardReturnCode::OK;
150 if (!mPacePinSuccessful)
151 {
152 mPaceCanSuccessful = false;
153 }
154 });
155 }
156
157 return call(command, pReceiver, pFunc);
158 }
159
160
161 template<typename T>
162 QMetaObject::Connection callSetEidPinCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
163 const QByteArray& pNewPin,
164 quint8 pTimeoutSeconds = Card::DEFAULT_PINPAD_TIMEOUT)
165 {
166 auto command = createSetEidPinCommand(pNewPin, pTimeoutSeconds);
167 return call(command, pReceiver, pFunc);
168 }
169
170
171 template<typename T>
172 QMetaObject::Connection callDestroyPaceChannelCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
173 const QString& pSlotHandle = QString())
174 {
175 auto command = createDestroyPaceChannelCommand(pSlotHandle);
176 return call(command, pReceiver, pFunc);
177 }
178
179
180 template<typename T>
181 QMetaObject::Connection callTransmitCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
182 const QList<InputAPDUInfo>& pInputApduInfos, const QString& pSlotHandle = QString())
183 {
184 auto command = createTransmitCommand(pInputApduInfos, pSlotHandle);
185 return call(command, pReceiver, pFunc);
186 }
187
188
189 template<typename T>
190 QMetaObject::Connection callUpdateRetryCounterCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc)
191 {
192 auto command = createUpdateRetryCounterCommand();
193 return call(command, pReceiver, pFunc);
194 }
195
196
197 template<typename T>
198 QMetaObject::Connection callResetRetryCounterCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc)
199 {
200 auto command = createResetRetryCounterCommand();
201 return call(command, pReceiver, pFunc);
202 }
203
204 Q_SIGNALS:
205 void fireReaderInfoChanged(const ReaderInfo& pReaderInfo);
206};
207
208} // namespace governikus
Definition BaseCardCommand.h:21
void commandDone(QSharedPointer< BaseCardCommand > pCommand)
void run()
Definition BaseCardCommand.cpp:30
Definition CVCertificateChain.h:24
QMetaObject::Connection callResetRetryCounterCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc)
Definition CardConnection.h:198
void fireReaderInfoChanged(const ReaderInfo &pReaderInfo)
friend class MockCardConnection
Definition CardConnection.h:36
QMetaObject::Connection callUpdateRetryCounterCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc)
Definition CardConnection.h:190
QMetaObject::Connection callDestroyPaceChannelCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc, const QString &pSlotHandle=QString())
Definition CardConnection.h:172
void setErrorMessage(const QString &pMessage)
Definition CardConnection.cpp:67
QMetaObject::Connection callSetEidPinCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc, const QByteArray &pNewPin, quint8 pTimeoutSeconds=Card::DEFAULT_PINPAD_TIMEOUT)
Definition CardConnection.h:162
~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 QList< InputAPDUInfo > &pInputApduInfos, const QString &pSlotHandle=QString())
Definition CardConnection.h:181
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:135
QMetaObject::Connection callDidAuthenticateEAC1Command(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc)
Definition CardConnection.h:114
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:122
void setProgressMessage(const QString &pMessage, int pProgress=-1)
Definition CardConnection.cpp:59
void setKeepAlive(bool pEnabled)
Definition CardConnection.cpp:51
static constexpr int DEFAULT_PINPAD_TIMEOUT
Definition Card.h:47
Definition DestroyPaceChannelCommand.h:21
Definition DidAuthenticateEAC1Command.h:20
Definition DidAuthenticateEAC2Command.h:20
Definition EstablishPaceChannelCommand.h:19
Definition ReaderInfo.h:18
Definition ResetRetryCounterCommand.h:16
Definition SetEidPinCommand.h:19
Definition TransmitCommand.h:20
Definition UpdateRetryCounterCommand.h:18
#define T(v)
Definition http_parser.cpp:237
Defines the AccessRight and AccessRole enum.
Definition CommandApdu.h:17
quint8
Definition ResponseApdu.h:65