17#include "KeypleAssert.h"
23using namespace keyple::core::util;
24using namespace keyple::core::util::cpp;
28const std::string CardSecuritySettingAdapter::WRITE_ACCESS_LEVEL =
"writeAccessLevel";
31 const std::shared_ptr<CardReader> samReader,
const std::shared_ptr<CalypsoSam> calypsoSam)
39 mIsMultipleSessionEnabled =
true;
46 mIsRatificationMechanismEnabled =
true;
53 mIsPinPlainTransmissionEnabled =
true;
60 mIsSvLoadAndDebitLogEnabled =
true;
67 mIsSvNegativeBalanceAuthorized =
true;
73 const WriteAccessLevel writeAccessLevel,
const uint8_t kvc,
const uint8_t kif)
76 mKifMap[writeAccessLevel].insert({kvc, kif});
82 const WriteAccessLevel writeAccessLevel,
const uint8_t kif)
84 mDefaultKifMap.insert({writeAccessLevel, kif});
90 const WriteAccessLevel writeAccessLevel,
const uint8_t kvc)
92 mDefaultKvcMap.insert({writeAccessLevel, kvc});
100 mAuthorizedSessionKeys.push_back(((kif << 8) & 0xff00) | (kvc & 0x00ff));
108 mAuthorizedSvKeys.push_back(((kif << 8) & 0xff00) | (kvc & 0x00ff));
114 const uint8_t kif,
const uint8_t kvc)
116 mPinVerificationCipheringKif = std::make_shared<uint8_t>(kif);
117 mPinVerificationCipheringKvc = std::make_shared<uint8_t>(kvc);
123 const uint8_t kif,
const uint8_t kvc)
125 mPinModificationCipheringKif = std::make_shared<uint8_t>(kif);
126 mPinModificationCipheringKvc = std::make_shared<uint8_t>(kvc);
133 return mIsMultipleSessionEnabled;
138 return mIsRatificationMechanismEnabled;
143 return mIsPinPlainTransmissionEnabled;
148 return mIsSvLoadAndDebitLogEnabled;
153 return mIsSvNegativeBalanceAuthorized;
157 const WriteAccessLevel writeAccessLevel,
const uint8_t kvc)
const
159 const auto it = mKifMap.find(writeAccessLevel);
160 if (it == mKifMap.end()) {
163 const auto itt = it->second.find(kvc);
164 if (itt == it->second.end()) {
167 return std::make_shared<uint8_t>(itt->second);
173 const WriteAccessLevel writeAccessLevel)
const
175 const auto it = mDefaultKifMap.find(writeAccessLevel);
176 if (it == mDefaultKifMap.end()) {
179 return std::make_shared<uint8_t>(it->second);
184 const WriteAccessLevel writeAccessLevel)
const
186 const auto it = mDefaultKvcMap.find(writeAccessLevel);
187 if (it == mDefaultKvcMap.end()) {
190 return std::make_shared<uint8_t>(it->second);
195 const std::shared_ptr<uint8_t> kvc)
const
197 if (kif ==
nullptr || kvc ==
nullptr) {
201 if (mAuthorizedSessionKeys.empty()) {
205 return Arrays::contains(mAuthorizedSessionKeys,
206 ((*kif.get() << 8) & 0xff00) | (*kvc.get() & 0x00ff));
210 const std::shared_ptr<uint8_t> kvc)
const
212 if (kif ==
nullptr || kvc ==
nullptr) {
216 if (mAuthorizedSvKeys.empty()) {
220 return Arrays::contains(mAuthorizedSvKeys,
221 ((*kif.get() << 8) & 0xff00) | (*kvc.get() & 0x00ff));
226 return mPinVerificationCipheringKif;
231 return mPinVerificationCipheringKvc;
236 return mPinModificationCipheringKif;
241 return mPinModificationCipheringKvc;
bool isPinPlainTransmissionEnabled() const
bool isMultipleSessionEnabled() const
CardSecuritySettingAdapter & addAuthorizedSvKey(const uint8_t kif, const uint8_t kvc) override
CardSecuritySettingAdapter & enableMultipleSession() override
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
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 & enablePinPlainTransmission() override
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
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
CardSecuritySetting & setControlSamResource(const std::shared_ptr< CardReader > samReader, const std::shared_ptr< CalypsoSam > calypsoSam) final
CalypsoSam::ProductType ProductType