17#include "KeypleAssert.h"
23using namespace keyple::core::util;
24using namespace keyple::core::util::cpp;
28const std::string CardSecuritySettingAdapter::WRITE_ACCESS_LEVEL =
"writeAccessLevel";
31: mIsMultipleSessionEnabled(false),
32 mIsRatificationMechanismEnabled(false),
33 mIsPinPlainTransmissionEnabled(false),
34 mIsTransactionAuditEnabled(false),
35 mIsSvLoadAndDebitLogEnabled(false),
36 mIsSvNegativeBalanceAuthorized(false) {}
39 const std::shared_ptr<CardReader> samReader,
const std::shared_ptr<CalypsoSam> calypsoSam)
42 Assert::getInstance().notNull(samReader,
"samReader")
43 .notNull(calypsoSam,
"calypsoSam")
44 .isTrue(calypsoSam->getProductType() != ProductType::UNKNOWN,
"productType");
46 mSamReader = samReader;
47 mCalypsoSam = calypsoSam;
54 mIsMultipleSessionEnabled =
true;
61 mIsRatificationMechanismEnabled =
true;
68 mIsPinPlainTransmissionEnabled =
true;
75 mIsTransactionAuditEnabled =
true;
82 mIsSvLoadAndDebitLogEnabled =
true;
89 mIsSvNegativeBalanceAuthorized =
true;
95 const WriteAccessLevel writeAccessLevel,
const uint8_t kvc,
const uint8_t kif)
98 mKifMap[writeAccessLevel].insert({kvc, kif});
104 const WriteAccessLevel writeAccessLevel,
const uint8_t kif)
106 mDefaultKifMap.insert({writeAccessLevel, kif});
112 const WriteAccessLevel writeAccessLevel,
const uint8_t kvc)
114 mDefaultKvcMap.insert({writeAccessLevel, kvc});
122 mAuthorizedSessionKeys.push_back(((kif << 8) & 0xff00) | (kvc & 0x00ff));
130 mAuthorizedSvKeys.push_back(((kif << 8) & 0xff00) | (kvc & 0x00ff));
136 const uint8_t kif,
const uint8_t kvc)
138 mPinVerificationCipheringKif = std::make_shared<uint8_t>(kif);
139 mPinVerificationCipheringKvc = std::make_shared<uint8_t>(kvc);
145 const uint8_t kif,
const uint8_t kvc)
147 mPinModificationCipheringKif = std::make_shared<uint8_t>(kif);
148 mPinModificationCipheringKvc = std::make_shared<uint8_t>(kvc);
165 return mIsMultipleSessionEnabled;
170 return mIsRatificationMechanismEnabled;
175 return mIsPinPlainTransmissionEnabled;
180 return mIsTransactionAuditEnabled;
185 return mIsSvLoadAndDebitLogEnabled;
190 return mIsSvNegativeBalanceAuthorized;
194 const WriteAccessLevel writeAccessLevel,
const uint8_t kvc)
const
196 const auto it = mKifMap.find(writeAccessLevel);
197 if (it == mKifMap.end()) {
200 const auto itt = it->second.find(kvc);
201 if (itt == it->second.end()) {
204 return std::make_shared<uint8_t>(itt->second);
210 const WriteAccessLevel writeAccessLevel)
const
212 const auto it = mDefaultKifMap.find(writeAccessLevel);
213 if (it == mDefaultKifMap.end()) {
216 return std::make_shared<uint8_t>(it->second);
221 const WriteAccessLevel writeAccessLevel)
const
223 const auto it = mDefaultKvcMap.find(writeAccessLevel);
224 if (it == mDefaultKvcMap.end()) {
227 return std::make_shared<uint8_t>(it->second);
232 const std::shared_ptr<uint8_t> kvc)
const
234 if (kif ==
nullptr || kvc ==
nullptr) {
238 if (mAuthorizedSessionKeys.empty()) {
242 return Arrays::contains(mAuthorizedSessionKeys,
243 ((*kif.get() << 8) & 0xff00) | (*kvc.get() & 0x00ff));
247 const std::shared_ptr<uint8_t> kvc)
const
249 if (kif ==
nullptr || kvc ==
nullptr) {
253 if (mAuthorizedSvKeys.empty()) {
257 return Arrays::contains(mAuthorizedSvKeys,
258 ((*kif.get() << 8) & 0xff00) | (*kvc.get() & 0x00ff));
263 return mPinVerificationCipheringKif;
268 return mPinVerificationCipheringKvc;
273 return mPinModificationCipheringKif;
278 return mPinModificationCipheringKvc;
bool isPinPlainTransmissionEnabled() const
bool isMultipleSessionEnabled() const
CardSecuritySettingAdapter & addAuthorizedSvKey(const uint8_t kif, const uint8_t kvc) override
CardSecuritySettingAdapter & enableMultipleSession() override
std::shared_ptr< CardReader > getSamReader() const
CardSecuritySettingAdapter & addAuthorizedSessionKey(const uint8_t kif, const uint8_t kvc) override
bool isRatificationMechanismEnabled() const
const std::shared_ptr< uint8_t > getPinModificationCipheringKvc() const
CardSecuritySettingAdapter & enableSvLoadAndDebitLog() override
bool isSvKeyAuthorized(const std::shared_ptr< uint8_t > kif, const std::shared_ptr< uint8_t > kvc) const
const std::shared_ptr< uint8_t > getKif(const WriteAccessLevel writeAccessLevel, const uint8_t kvc) const
bool isSvNegativeBalanceAuthorized() const
std::shared_ptr< CalypsoSam > getCalypsoSam() const
const std::shared_ptr< uint8_t > getPinVerificationCipheringKvc() const
bool isSessionKeyAuthorized(const std::shared_ptr< uint8_t > kif, const std::shared_ptr< uint8_t > kvc) const
CardSecuritySettingAdapter & enableRatificationMechanism() override
CardSecuritySettingAdapter & assignDefaultKvc(const WriteAccessLevel writeAccessLevel, const uint8_t kvc) override
CardSecuritySettingAdapter & enableTransactionAudit() override
CardSecuritySettingAdapter & enablePinPlainTransmission() override
bool isTransactionAuditEnabled() const
bool isSvLoadAndDebitLogEnabled() const
const std::shared_ptr< uint8_t > getPinModificationCipheringKif() const
CardSecuritySettingAdapter & setPinModificationCipheringKey(const uint8_t kif, const uint8_t kvc) override
CardSecuritySettingAdapter & authorizeSvNegativeBalance() override
const std::shared_ptr< uint8_t > getDefaultKif(const WriteAccessLevel writeAccessLevel) const
CardSecuritySettingAdapter()
CardSecuritySetting & setSamResource(const std::shared_ptr< CardReader > samReader, const std::shared_ptr< CalypsoSam > calypsoSam) override
CardSecuritySettingAdapter & assignDefaultKif(const WriteAccessLevel writeAccessLevel, const uint8_t kif) override
CardSecuritySettingAdapter & assignKif(const WriteAccessLevel writeAccessLevel, const uint8_t kvc, const uint8_t kif) override
const std::shared_ptr< uint8_t > getDefaultKvc(const WriteAccessLevel writeAccessLevel) const
const std::shared_ptr< uint8_t > getPinVerificationCipheringKif() const
CardSecuritySettingAdapter & setPinVerificationCipheringKey(const uint8_t kif, const uint8_t kvc) override
CalypsoSam::ProductType ProductType