19#include "CardApiProperties.h"
22#include "ReaderApiProperties.h"
33#include "CommonApiProperties.h"
36#include "KeypleAssert.h"
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;
48std::shared_ptr<CalypsoExtensionService> CalypsoExtensionService::mInstance;
50CalypsoExtensionService::CalypsoExtensionService() {}
54 if (mInstance ==
nullptr) {
63 return ReaderApiProperties_VERSION;
68 return CardApiProperties_VERSION;
73 return CommonApiProperties_VERSION;
78 return std::make_shared<SearchCommandDataAdapter>();
81std::shared_ptr<BasicSignatureComputationData>
84 return std::dynamic_pointer_cast<BasicSignatureComputationData>(
85 std::make_shared<BasicSignatureComputationDataAdapter>());
88std::shared_ptr<TraceableSignatureComputationData>
91 return std::dynamic_pointer_cast<TraceableSignatureComputationData>(
92 std::make_shared<TraceableSignatureComputationDataAdapter>());
95std::shared_ptr<BasicSignatureVerificationData>
98 return std::dynamic_pointer_cast<BasicSignatureVerificationData>(
99 std::make_shared<BasicSignatureVerificationDataAdapter>());
102std::shared_ptr<TraceableSignatureVerificationData>
105 return std::dynamic_pointer_cast<TraceableSignatureVerificationData>(
106 std::make_shared<TraceableSignatureVerificationDataAdapter>());
111 return std::make_shared<CalypsoCardSelectionAdapter>();
116 return std::make_shared<CalypsoSamSelectionAdapter>();
119std::shared_ptr<CardResourceProfileExtension>
121 const std::shared_ptr<CalypsoSamSelection> calypsoSamSelection)
const
123 Assert::getInstance().notNull(calypsoSamSelection,
"calypsoSamSelection");
125 return std::make_shared<CalypsoSamResourceProfileExtensionAdapter>(calypsoSamSelection);
130 return std::make_shared<CardSecuritySettingAdapter>();
134 std::shared_ptr<CardReader> cardReader,
135 const std::shared_ptr<CalypsoCard> calypsoCard,
136 const std::shared_ptr<CardSecuritySetting> cardSecuritySetting)
const
138 return createCardTransactionManagerAdapter(cardReader,
144std::shared_ptr<CardTransactionManager>
146 std::shared_ptr<CardReader> cardReader,
147 const std::shared_ptr<CalypsoCard> calypsoCard)
const
149 return createCardTransactionManagerAdapter(cardReader, calypsoCard,
nullptr,
false);
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
159 Assert::getInstance().notNull(cardReader,
"card reader")
160 .notNull(calypsoCard,
"calypso card");
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");
171 const auto proxy = std::dynamic_pointer_cast<ProxyReaderApi>(cardReader);
173 throw IllegalArgumentException(
"The provided 'cardReader' must implement 'ProxyReaderApi'");
176 const auto calypso = std::dynamic_pointer_cast<CalypsoCardAdapter>(calypsoCard);
178 throw IllegalArgumentException(
"The provided 'calypsoCard' must be an instance of " \
179 "'CalypsoCardAdapter'");
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'");
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));
196 return std::make_shared<SamSecuritySettingAdapter>();
200 std::shared_ptr<CardReader> samReader,
201 const std::shared_ptr<CalypsoSam> calypsoSam,
202 const std::shared_ptr<SamSecuritySetting> samSecuritySetting)
const
204 return createSamTransactionManagerAdapter(samReader, calypsoSam, samSecuritySetting,
true);
208 std::shared_ptr<CardReader> samReader,
209 const std::shared_ptr<CalypsoSam> calypsoSam)
const
211 return createSamTransactionManagerAdapter(samReader, calypsoSam,
nullptr,
false);
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
221 Assert::getInstance().notNull(samReader,
"sam reader")
222 .notNull(calypsoSam,
"calypso SAM");
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");
229 const auto proxy = std::dynamic_pointer_cast<ProxyReaderApi>(samReader);
231 throw IllegalArgumentException(
"The provided 'samReader' must implement 'ProxyReaderApi'");
234 const auto sam = std::dynamic_pointer_cast<CalypsoSamAdapter>(calypsoSam);
236 throw IllegalArgumentException(
"The provided 'calypsoSam' must be an instance of " \
237 "'CalypsoSamAdapter'");
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'");
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));
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()