AusweisApp
Lade ...
Suche ...
Keine Treffer
CardConnection.h
gehe zur Dokumentation dieser Datei
1
9#pragma once
10
12#include "InputAPDUInfo.h"
13#include "ReaderInfo.h"
17
21
27
28#include <QByteArray>
29
30class test_CardConnection;
31
32namespace governikus
33{
34
39 : public QObject
40{
42 friend class MockCardConnection;
43 friend class ::test_CardConnection;
44
45 private:
49 QSharedPointer<CardConnectionWorker> mCardConnectionWorker;
50 ReaderInfo mReaderInfo;
51
52 bool mPaceCanSuccessful;
53 bool mPacePinSuccessful;
54
55 TransmitCommand* createTransmitCommand(const QList<InputAPDUInfo>& pInputApduInfos, const QString& pSlotHandle);
56 UpdateRetryCounterCommand* createUpdateRetryCounterCommand();
57 ResetRetryCounterCommand* createResetRetryCounterCommand();
58
60 SetEidPinCommand* createSetEidPinCommand(const QByteArray& pNewPin, quint8 pTimeoutSeconds);
61 DestroyPaceChannelCommand* createDestroyPaceChannelCommand(const QString& pSlotHandle);
62
63 DidAuthenticateEAC1Command* createDidAuthenticateEAC1Command();
64 DidAuthenticateEAC2Command* createDidAuthenticateEAC2Command(const CVCertificateChain& pCvcChain,
68 const QByteArray& pPin);
69
70 template<typename T>
71 QMetaObject::Connection call(BaseCardCommand* pCommand, const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc)
72 {
73 pCommand->moveToThread(mCardConnectionWorker->thread());
74
76
78 {
79 pCommand->run();
80 }
81 else
82 {
83 qCCritical(card) << "Cannot invoke card command:" << pCommand->metaObject()->className();
84 pCommand->deleteLater();
85 }
86
87 return resultConnection;
88 }
89
90 private Q_SLOTS:
91 void onReaderInfoChanged(const ReaderInfo& pReaderInfo);
92
93 protected:
95
96 public:
98
102 ~CardConnection() override = default;
103
110 virtual const ReaderInfo& getReaderInfo();
111
112 [[nodiscard]] bool getPaceCanSuccessful() const;
113 [[nodiscard]] bool getPacePinSuccessful() const;
114
115 void setKeepAlive(bool pEnabled);
116 void setProgressMessage(const QString& pMessage, int pProgress = -1);
117
118 template<typename T>
119 QMetaObject::Connection callDidAuthenticateEAC1Command(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc)
120 {
121 auto command = createDidAuthenticateEAC1Command();
122 return call(command, pReceiver, pFunc);
123 }
124
125
126 template<typename T>
127 QMetaObject::Connection callDidAuthenticateEAC2Command(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
132 const QByteArray& pPin)
133 {
135 return call(command, pReceiver, pFunc);
136 }
137
138
139 template<typename T>
140 QMetaObject::Connection callEstablishPaceChannelCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
142 {
144
145 if (pPacePasswordId == PacePasswordId::PACE_CAN)
146 {
148 mPaceCanSuccessful = pCommand->getReturnCode() == CardReturnCode::OK;
149 });
150 }
151 else if (pPacePasswordId == PacePasswordId::PACE_PIN)
152 {
154 mPacePinSuccessful = pCommand->getReturnCode() == CardReturnCode::OK;
155 if (!mPacePinSuccessful)
156 {
157 mPaceCanSuccessful = false;
158 }
159 });
160 }
161
162 return call(command, pReceiver, pFunc);
163 }
164
165
166 template<typename T>
167 QMetaObject::Connection callSetEidPinCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
168 const QByteArray& pNewPin,
170 {
171 auto command = createSetEidPinCommand(pNewPin, pTimeoutSeconds);
172 return call(command, pReceiver, pFunc);
173 }
174
175
176 template<typename T>
177 QMetaObject::Connection callDestroyPaceChannelCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
178 const QString& pSlotHandle = QString())
179 {
180 auto command = createDestroyPaceChannelCommand(pSlotHandle);
181 return call(command, pReceiver, pFunc);
182 }
183
184
185 template<typename T>
186 QMetaObject::Connection callTransmitCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
187 const QList<InputAPDUInfo>& pInputApduInfos, const QString& pSlotHandle = QString())
188 {
189 auto command = createTransmitCommand(pInputApduInfos, pSlotHandle);
190 return call(command, pReceiver, pFunc);
191 }
192
193
194 template<typename T>
195 QMetaObject::Connection callUpdateRetryCounterCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc)
196 {
197 auto command = createUpdateRetryCounterCommand();
198 return call(command, pReceiver, pFunc);
199 }
200
201
202 template<typename T>
203 QMetaObject::Connection callResetRetryCounterCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc)
204 {
205 auto command = createResetRetryCounterCommand();
206 return call(command, pReceiver, pFunc);
207 }
208
209 Q_SIGNALS:
211};
212
213} // namespace governikus
Definition BaseCardCommand.h:23
void commandDone(QSharedPointer< BaseCardCommand > pCommand)
Definition CVCertificateChain.h:24
This class represents a connection to a smart card.
Definition CardConnection.h:40
QMetaObject::Connection callResetRetryCounterCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc)
Definition CardConnection.h:203
void fireReaderInfoChanged(const ReaderInfo &pReaderInfo)
friend class MockCardConnection
Definition CardConnection.h:42
QMetaObject::Connection callSetEidPinCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc, const QByteArray &pNewPin, quint8 pTimeoutSeconds=60)
Definition CardConnection.h:167
QMetaObject::Connection callUpdateRetryCounterCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc)
Definition CardConnection.h:195
QMetaObject::Connection callDestroyPaceChannelCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc, const QString &pSlotHandle=QString())
Definition CardConnection.h:177
~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:186
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:140
QMetaObject::Connection callDidAuthenticateEAC1Command(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc)
Definition CardConnection.h:119
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:127
void setProgressMessage(const QString &pMessage, int pProgress=-1)
Definition CardConnection.cpp:59
void setKeepAlive(bool pEnabled)
Definition CardConnection.cpp:51
Definition DestroyPaceChannelCommand.h:21
Definition DidAuthenticateEAC1Command.h:22
Definition DidAuthenticateEAC2Command.h:22
Definition EstablishPaceChannelCommand.h:21
Definition ReaderInfo.h:18
Definition ResetRetryCounterCommand.h:16
Definition SetEidPinCommand.h:21
Definition TransmitCommand.h:20
Definition UpdateRetryCounterCommand.h:20
#define T(v)
Definition http_parser.cpp:237
Implementation of GeneralAuthenticate response APDUs.
Definition CommandApdu.h:17
quint8
Definition ResponseApdu.h:64
QSharedPointer< T > decodeObject(const QByteArray &pData, bool pLogging=true)
Template function for decoding an OpenSSL type from DER encoded QByteArray.
Definition ASN1TemplateUtil.h:114