Keyple Card Calypso C++ Library 2.2.2
Reference Terminal Reader API for C++
CalypsoExtensionService.cpp
Go to the documentation of this file.
1/**************************************************************************************************
2 * Copyright (c) 2021 Calypso Networks Association https://calypsonet.org/ *
3 * *
4 * See the NOTICE file(s) distributed with this work for additional information regarding *
5 * copyright ownership. *
6 * *
7 * This program and the accompanying materials are made available under the terms of the Eclipse *
8 * Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0 *
9 * *
10 * SPDX-License-Identifier: EPL-2.0 *
11 **************************************************************************************************/
12
14
15/* Calypsonet Terminal Calypso */
17
18/* Calypsonet Terminal Card */
19#include "CardApiProperties.h"
20
21/* Calypsonet Terminal Reader */
22#include "ReaderApiProperties.h"
23
24/* Keyple Card Calypso */
31
32/* Keyple Core Common */
33#include "CommonApiProperties.h"
34
35/* Keyple Core Util */
36#include "KeypleAssert.h"
37
38namespace keyple {
39namespace card {
40namespace calypso {
41
42using namespace calypsonet::terminal::calypso;
43using namespace calypsonet::terminal::card;
44using namespace calypsonet::terminal::reader;
45using namespace keyple::core::common;
46using namespace keyple::core::util;
47
48std::shared_ptr<CalypsoExtensionService> CalypsoExtensionService::mInstance;
49
50CalypsoExtensionService::CalypsoExtensionService() {}
51
52std::shared_ptr<CalypsoExtensionService> CalypsoExtensionService::getInstance()
53{
54 if (mInstance == nullptr) {
55 mInstance = std::shared_ptr<CalypsoExtensionService>(new CalypsoExtensionService());
56 }
57
58 return mInstance;
59}
60
62{
63 return ReaderApiProperties_VERSION;
64}
65
67{
68 return CardApiProperties_VERSION;
69}
70
72{
73 return CommonApiProperties_VERSION;
74}
75
76std::shared_ptr<SearchCommandData> CalypsoExtensionService::createSearchCommandData() const
77{
78 return std::make_shared<SearchCommandDataAdapter>();
79}
80
81std::shared_ptr<BasicSignatureComputationData>
83{
84 return std::dynamic_pointer_cast<BasicSignatureComputationData>(
85 std::make_shared<BasicSignatureComputationDataAdapter>());
86}
87
88std::shared_ptr<TraceableSignatureComputationData>
90{
91 return std::dynamic_pointer_cast<TraceableSignatureComputationData>(
92 std::make_shared<TraceableSignatureComputationDataAdapter>());
93}
94
95std::shared_ptr<BasicSignatureVerificationData>
97{
98 return std::dynamic_pointer_cast<BasicSignatureVerificationData>(
99 std::make_shared<BasicSignatureVerificationDataAdapter>());
100}
101
102std::shared_ptr<TraceableSignatureVerificationData>
104{
105 return std::dynamic_pointer_cast<TraceableSignatureVerificationData>(
106 std::make_shared<TraceableSignatureVerificationDataAdapter>());
107}
108
109std::shared_ptr<CalypsoCardSelection> CalypsoExtensionService::createCardSelection() const
110{
111 return std::make_shared<CalypsoCardSelectionAdapter>();
112}
113
114std::shared_ptr<CalypsoSamSelection> CalypsoExtensionService::createSamSelection() const
115{
116 return std::make_shared<CalypsoSamSelectionAdapter>();
117}
118
119std::shared_ptr<CardResourceProfileExtension>
121 const std::shared_ptr<CalypsoSamSelection> calypsoSamSelection) const
122{
123 Assert::getInstance().notNull(calypsoSamSelection, "calypsoSamSelection");
124
125 return std::make_shared<CalypsoSamResourceProfileExtensionAdapter>(calypsoSamSelection);
126}
127
128std::shared_ptr<CardSecuritySetting> CalypsoExtensionService::createCardSecuritySetting() const
129{
130 return std::make_shared<CardSecuritySettingAdapter>();
131}
132
133std::shared_ptr<CardTransactionManager> CalypsoExtensionService::createCardTransaction(
134 std::shared_ptr<CardReader> cardReader,
135 const std::shared_ptr<CalypsoCard> calypsoCard,
136 const std::shared_ptr<CardSecuritySetting> cardSecuritySetting) const
137{
138 return createCardTransactionManagerAdapter(cardReader,
139 calypsoCard,
140 cardSecuritySetting,
141 true);
142}
143
144std::shared_ptr<CardTransactionManager>
146 std::shared_ptr<CardReader> cardReader,
147 const std::shared_ptr<CalypsoCard> calypsoCard) const
148{
149 return createCardTransactionManagerAdapter(cardReader, calypsoCard, nullptr, false);
150}
151
152std::shared_ptr<CardTransactionManagerAdapter>
153 CalypsoExtensionService::createCardTransactionManagerAdapter(
154 std::shared_ptr<CardReader> cardReader,
155 const std::shared_ptr<CalypsoCard> calypsoCard,
156 const std::shared_ptr<CardSecuritySetting> cardSecuritySetting,
157 const bool isSecureMode) const
158{
159 Assert::getInstance().notNull(cardReader, "card reader")
160 .notNull(calypsoCard, "calypso card");
161
162 /*
163 * C++: check args data *after* nullity has been ruled out. Calls order doesn't seem
164 * respected by MSVC
165 */
166 Assert::getInstance().isTrue(calypsoCard->getProductType() != CalypsoCard::ProductType::UNKNOWN,
167 "product type is known")
168 .isTrue(!isSecureMode || cardSecuritySetting != nullptr,
169 "security setting is not null");
170
171 const auto proxy = std::dynamic_pointer_cast<ProxyReaderApi>(cardReader);
172 if (!proxy) {
173 throw IllegalArgumentException("The provided 'cardReader' must implement 'ProxyReaderApi'");
174 }
175
176 const auto calypso = std::dynamic_pointer_cast<CalypsoCardAdapter>(calypsoCard);
177 if (!calypso) {
178 throw IllegalArgumentException("The provided 'calypsoCard' must be an instance of " \
179 "'CalypsoCardAdapter'");
180 }
181
182 const auto setting = std::dynamic_pointer_cast<CardSecuritySettingAdapter>(cardSecuritySetting);
183 if (isSecureMode && !setting) {
184 throw IllegalArgumentException("The provided 'cardSecuritySetting' must be an instance of" \
185 " 'CardSecuritySettingAdapter'");
186 }
187
188 return std::make_shared<CardTransactionManagerAdapter>(
189 std::dynamic_pointer_cast<ProxyReaderApi>(cardReader),
190 std::dynamic_pointer_cast<CalypsoCardAdapter>(calypsoCard),
191 std::dynamic_pointer_cast<CardSecuritySettingAdapter>(cardSecuritySetting));
192}
193
194std::shared_ptr<SamSecuritySetting> CalypsoExtensionService::createSamSecuritySetting() const
195{
196 return std::make_shared<SamSecuritySettingAdapter>();
197}
198
199std::shared_ptr<SamTransactionManager> CalypsoExtensionService::createSamTransaction(
200 std::shared_ptr<CardReader> samReader,
201 const std::shared_ptr<CalypsoSam> calypsoSam,
202 const std::shared_ptr<SamSecuritySetting> samSecuritySetting) const
203{
204 return createSamTransactionManagerAdapter(samReader, calypsoSam, samSecuritySetting, true);
205}
206
208 std::shared_ptr<CardReader> samReader,
209 const std::shared_ptr<CalypsoSam> calypsoSam) const
210{
211 return createSamTransactionManagerAdapter(samReader, calypsoSam, nullptr, false);
212}
213
214std::shared_ptr<SamTransactionManagerAdapter>
215 CalypsoExtensionService::createSamTransactionManagerAdapter(
216 std::shared_ptr<CardReader> samReader,
217 const std::shared_ptr<CalypsoSam> calypsoSam,
218 const std::shared_ptr<SamSecuritySetting> samSecuritySetting,
219 const bool isSecureMode) const
220{
221 Assert::getInstance().notNull(samReader, "sam reader")
222 .notNull(calypsoSam, "calypso SAM");
223
224 Assert::getInstance().isTrue(calypsoSam->getProductType() != CalypsoSam::ProductType::UNKNOWN,
225 "product type is known")
226 .isTrue(!isSecureMode || samSecuritySetting != nullptr,
227 "security setting is not null");
228
229 const auto proxy = std::dynamic_pointer_cast<ProxyReaderApi>(samReader);
230 if (!proxy) {
231 throw IllegalArgumentException("The provided 'samReader' must implement 'ProxyReaderApi'");
232 }
233
234 const auto sam = std::dynamic_pointer_cast<CalypsoSamAdapter>(calypsoSam);
235 if (!sam) {
236 throw IllegalArgumentException("The provided 'calypsoSam' must be an instance of " \
237 "'CalypsoSamAdapter'");
238 }
239
240 const auto setting = std::dynamic_pointer_cast<SamSecuritySettingAdapter>(samSecuritySetting);
241 if (isSecureMode && !setting) {
242 throw IllegalArgumentException("The provided 'samSecuritySetting' must be an instance of " \
243 "'SamSecuritySettingAdapter'");
244 }
245
246 return std::make_shared<SamTransactionManagerAdapter>(
247 std::dynamic_pointer_cast<ProxyReaderApi>(samReader),
248 std::dynamic_pointer_cast<CalypsoSamAdapter>(calypsoSam),
249 std::dynamic_pointer_cast<SamSecuritySettingAdapter>(samSecuritySetting));
250 }
251
252}
253}
254}
std::shared_ptr< SamTransactionManager > createSamTransactionWithoutSecurity(std::shared_ptr< CardReader > samReader, const std::shared_ptr< CalypsoSam > calypsoSam) const
std::shared_ptr< CalypsoSamSelection > createSamSelection() const
std::shared_ptr< TraceableSignatureComputationData > createTraceableSignatureComputationData() const
std::shared_ptr< BasicSignatureVerificationData > createBasicSignatureVerificationData() const
std::shared_ptr< CardResourceProfileExtension > createSamResourceProfileExtension(const std::shared_ptr< CalypsoSamSelection > calypsoSamSelection) const
const std::string & getReaderApiVersion() const override
std::shared_ptr< TraceableSignatureVerificationData > createTraceableSignatureVerificationData() const
std::shared_ptr< CardSecuritySetting > createCardSecuritySetting() const
const std::string & getCardApiVersion() const override
std::shared_ptr< SamSecuritySetting > createSamSecuritySetting() const
std::shared_ptr< CardTransactionManager > createCardTransactionWithoutSecurity(std::shared_ptr< CardReader > cardReader, const std::shared_ptr< CalypsoCard > calypsoCard) const
std::shared_ptr< CardTransactionManager > createCardTransaction(std::shared_ptr< CardReader > cardReader, const std::shared_ptr< CalypsoCard > calypsoCard, const std::shared_ptr< CardSecuritySetting > cardSecuritySetting) const
std::shared_ptr< SearchCommandData > createSearchCommandData() const
const std::string & getCommonApiVersion() const override
std::shared_ptr< BasicSignatureComputationData > createBasicSignatureComputationData() const
std::shared_ptr< CalypsoCardSelection > createCardSelection() const
std::shared_ptr< SamTransactionManager > createSamTransaction(std::shared_ptr< CardReader > samReader, const std::shared_ptr< CalypsoSam > calypsoSam, const std::shared_ptr< SamSecuritySetting > samSecuritySetting) const
static std::shared_ptr< CalypsoExtensionService > getInstance()