AusweisApp2
 Alle Klassen Namensbereiche Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Propertys Freundbeziehungen Makrodefinitionen
CardConnection.h
gehe zur Dokumentation dieser Datei
1 
7 #pragma once
8 
9 #include "asn1/Chat.h"
10 #include "asn1/CVCertificate.h"
13 #include "CardConnectionWorker.h"
14 #include "Commands.h"
15 #include "InputAPDUInfo.h"
16 #include "ReaderInfo.h"
17 #include "SmartCardDefinitions.h"
18 
22 
28 
29 #include <QByteArray>
30 
31 namespace governikus
32 {
33 
38  : public QObject
39 {
40  private:
41  Q_OBJECT
42 
46  QSharedPointer<CardConnectionWorker> mCardConnectionWorker;
47  ReaderInfo mReaderInfo;
48 
49  TransmitCommand* createTransmitCommand(const QVector<InputAPDUInfo>& pInputApduInfos, const QString pSlotHandle);
50  UpdateRetryCounterCommand* createUpdateRetryCounterCommand();
51  UnblockPinCommand* createUnblockPinCommand(const QString& pPuk);
52 
53  EstablishPaceChannelCommand* createEstablishPaceChannelCommand(PACE_PASSWORD_ID pPacePasswordId, const QString& pPacePassword, const QByteArray& pEffectiveChat, const QByteArray& pCertificateDescription);
54  SetEidPinCommand* createSetEidPinCommand(const QString& pNewPin, quint8 pTimeoutSeconds);
55  DestroyPaceChannelCommand* createDestroyPaceChannelCommand();
56 
57  DidAuthenticateEAC1Command* createDidAuthenticateEAC1Command();
58  DidAuthenticateEAC2Command* createDidAuthenticateEAC2Command(const CVCertificateChain& pCvcChain,
59  const QString& pEphemeralPublicKeyAsHex,
60  const QString& pSignatureAsHex,
61  const QByteArray& pAuthenticatedAuxiliaryDataAsBinary);
62 
63  template<typename T>
64  QMetaObject::Connection call(BaseCardCommand* pCommand, const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc)
65  {
66  pCommand->moveToThread(mCardConnectionWorker->thread());
67 
68  QMetaObject::Connection resultConnection = connect(pCommand, &BaseCardCommand::commandDone, pReceiver, pFunc, Qt::UniqueConnection);
69 
70  if (resultConnection)
71  {
72  QMetaObject::invokeMethod(pCommand, "execute", Qt::QueuedConnection);
73  }
74  else
75  {
76  qCritical() << "Cannot invoke card command:" << pCommand->metaObject()->className();
77  pCommand->deleteLater();
78  }
79 
80  return resultConnection;
81  }
82 
83 
84  private Q_SLOTS:
85  void onReaderInfoChanged(const ReaderInfo& pReaderInfo);
86 
87  public:
88  CardConnection(const QSharedPointer<CardConnectionWorker>& pCardConnectionWorker);
89 
93  virtual ~CardConnection();
94 
101  const ReaderInfo& getReaderInfo();
102 
103  bool stopSecureMessaging();
104 
105  template<typename T>
106  QMetaObject::Connection callDidAuthenticateEAC1Command(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc)
107  {
108  auto command = createDidAuthenticateEAC1Command();
109  return call(command, pReceiver, pFunc);
110  }
111 
112 
113  template<typename T>
114  QMetaObject::Connection callDidAuthenticateEAC2Command(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
115  const CVCertificateChain& pCvcChain,
116  const QString& pEphemeralPublicKeyAsHex,
117  const QString& pSignatureAsHex,
118  const QByteArray& pAuthenticatedAuxiliaryDataAsBinary)
119  {
120  auto command = createDidAuthenticateEAC2Command(pCvcChain, pEphemeralPublicKeyAsHex, pSignatureAsHex, pAuthenticatedAuxiliaryDataAsBinary);
121  return call(command, pReceiver, pFunc);
122  }
123 
124 
125  template<typename T>
126  QMetaObject::Connection callUnblockPinCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
127  const QString& pPuk)
128  {
129  auto command = createUnblockPinCommand(pPuk);
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  PACE_PASSWORD_ID pPacePasswordId, const QString& pPacePassword, const QByteArray& pEffectiveChat = QByteArray(), const QByteArray& pCertificateDescription = QByteArray())
137  {
138  EstablishPaceChannelCommand* command = createEstablishPaceChannelCommand(pPacePasswordId, pPacePassword, pEffectiveChat, pCertificateDescription);
139  return call(command, pReceiver, pFunc);
140  }
141 
142 
143  template<typename T>
144  QMetaObject::Connection callSetEidPinCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
145  const QString& pNewPin,
146  quint8 pTimeoutSeconds = 60)
147  {
148  auto command = createSetEidPinCommand(pNewPin, pTimeoutSeconds);
149  return call(command, pReceiver, pFunc);
150  }
151 
152 
153  template<typename T>
154  QMetaObject::Connection callDestroyPaceChannelCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc)
155  {
156  auto command = createDestroyPaceChannelCommand();
157  return call(command, pReceiver, pFunc);
158  }
159 
160 
161  template<typename T>
162  QMetaObject::Connection callTransmitCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc,
163  const QVector<InputAPDUInfo>& pInputApduInfos, const QString pSlotHandle = QString())
164  {
165  auto command = createTransmitCommand(pInputApduInfos, pSlotHandle);
166  return call(command, pReceiver, pFunc);
167  }
168 
169 
170  template<typename T>
171  QMetaObject::Connection callUpdateRetryCounterCommand(const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pFunc)
172  {
173  auto command = createUpdateRetryCounterCommand();
174  return call(command, pReceiver, pFunc);
175  }
176 
177 
178  Q_SIGNALS:
179  void fireReaderInfoChanged(const ReaderInfo& pReaderInfo);
180 };
181 
182 } /* namespace governikus */
QMetaObject::Connection callUpdateRetryCounterCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc)
Definition: CardConnection.h:171
CardConnection(const QSharedPointer< CardConnectionWorker > &pCardConnectionWorker)
Definition: CardConnection.cpp:10
Definition: UpdateRetryCounterCommand.h:16
QMetaObject::Connection callSetEidPinCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc, const QString &pNewPin, quint8 pTimeoutSeconds=60)
Definition: CardConnection.h:144
void commandDone(QSharedPointer< BaseCardCommand > pCommand)
Definition: SetEidPinCommand.h:16
Definition: DestroyPaceChannelCommand.h:16
Definition: DidAuthenticateEAC2Command.h:18
QMetaObject::Connection callDidAuthenticateEAC2Command(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc, const CVCertificateChain &pCvcChain, const QString &pEphemeralPublicKeyAsHex, const QString &pSignatureAsHex, const QByteArray &pAuthenticatedAuxiliaryDataAsBinary)
Definition: CardConnection.h:114
const ReaderInfo & getReaderInfo()
This method returns a stored copy of the reader info object.
Definition: CardConnection.cpp:26
QMetaObject::Connection callDestroyPaceChannelCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc)
Definition: CardConnection.h:154
Definition: ReaderInfo.h:17
Definition: CVCertificateChain.h:21
bool stopSecureMessaging()
Definition: CardConnection.cpp:32
QMetaObject::Connection callTransmitCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc, const QVector< InputAPDUInfo > &pInputApduInfos, const QString pSlotHandle=QString())
Definition: CardConnection.h:162
#define T(v)
Definition: http_parser.cpp:234
virtual ~CardConnection()
Destroys the CardConnection and disconnects from the card.
Definition: CardConnection.cpp:21
Definition: BaseCardCommand.h:22
Definition: UnblockPinCommand.h:16
This class represents a connection to a smart card.
Definition: CardConnection.h:37
Definition: TransmitCommand.h:19
QMetaObject::Connection callUnblockPinCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc, const QString &pPuk)
Definition: CardConnection.h:126
void fireReaderInfoChanged(const ReaderInfo &pReaderInfo)
QMetaObject::Connection callEstablishPaceChannelCommand(const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pFunc, PACE_PASSWORD_ID pPacePasswordId, const QString &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:106
Definition: DidAuthenticateEAC1Command.h:18
Definition: EstablishPaceChannelCommand.h:16