21#include "CalypsoSam.h"
22#include "CardSecuritySetting.h"
25#include "ProxyReaderApi.h"
35#include "LoggerFactory.h"
41using namespace calypsonet::terminal::calypso;
42using namespace calypsonet::terminal::calypso::sam;
43using namespace calypsonet::terminal::calypso::transaction;
44using namespace calypsonet::terminal::card;
45using namespace keyple::core::util::cpp;
69 const std::shared_ptr<CardSecuritySetting> cardSecuritySetting);
101 const std::shared_ptr<uint8_t>
computeKvc(
const WriteAccessLevel writeAccessLevel,
102 const std::shared_ptr<uint8_t> kvc)
const;
114 const std::shared_ptr<uint8_t>
computeKif(
const WriteAccessLevel writeAccessLevel,
115 const std::shared_ptr<uint8_t> kif,
116 const std::shared_ptr<uint8_t> kvc);
136 const bool verificationMode,
139 const std::vector<uint8_t>& digestData);
152 const std::vector<std::shared_ptr<ApduResponseApi>>& responses,
153 const int startIndex);
199 const std::vector<uint8_t>
getEncryptedKey(
const std::vector<uint8_t>& poChallenge,
200 const uint8_t cipheringKif,
201 const uint8_t cipheringKvc,
202 const uint8_t sourceKif,
203 const uint8_t sourceKvc);
218 const std::vector<uint8_t>
getCipheredPinData(
const std::vector<uint8_t>& poChallenge,
219 const std::vector<uint8_t>& currentPin,
220 const std::vector<uint8_t>& newPin);
241 const std::shared_ptr<CmdCardSvReload> cmdCardSvReload,
242 const std::vector<uint8_t>& svGetHeader,
243 const std::vector<uint8_t>& svGetData);
263 const std::shared_ptr<CmdCardSvDebit> cmdCardSvDebit,
264 const std::vector<uint8_t>& svGetHeader,
265 const std::vector<uint8_t>& svGetData);
286 const std::shared_ptr<CmdCardSvUndebit> cmdCardSvUndebit,
287 const std::vector<uint8_t>& svGetHeader,
288 const std::vector<uint8_t>& svGetData);
302 void checkSvStatus(
const std::vector<uint8_t>& svOperationResponseData);
308 const std::unique_ptr<Logger> mLogger = LoggerFactory::getLogger(
typeid(
SamCommandProcessor));
313 static const uint8_t KIF_UNDEFINED;
314 static const uint8_t CHALLENGE_LENGTH_REV_INF_32;
315 static const uint8_t CHALLENGE_LENGTH_REV32;
316 static const uint8_t SIGNATURE_LENGTH_REV_INF_32;
317 static const uint8_t SIGNATURE_LENGTH_REV32;
318 static const std::string UNEXPECTED_EXCEPTION;
322 std::shared_ptr<ProxyReaderApi> mSamReader;
327 const std::shared_ptr<CardSecuritySetting> mCardSecuritySettings;
332 static std::vector<std::vector<uint8_t>> mCardDigestDataCache;
337 const std::shared_ptr<CalypsoCardAdapter> mCalypsoCard;
342 std::vector<uint8_t> mSamSerialNumber;
352 bool mSessionEncryption;
357 bool mVerificationMode;
372 bool mIsDiversificationDone;
377 bool mIsDigestInitDone;
382 bool mIsDigesterInitialized;
392 const std::shared_ptr<ApduResponseApi> response);
410 const std::vector<std::shared_ptr<AbstractSamCommand>> getPendingSamCommands(
411 const bool addDigestClose);
420 const std::vector<std::shared_ptr<ApduRequestSpi>> getApduRequests(
421 const std::vector<std::shared_ptr<AbstractSamCommand>> samCommands)
const;
446 const std::vector<uint8_t> getSvComplementaryData(
447 const std::shared_ptr<AbstractSamCommand> cmdSamSvPrepare);
const std::vector< uint8_t > getEncryptedKey(const std::vector< uint8_t > &poChallenge, const uint8_t cipheringKif, const uint8_t cipheringKvc, const uint8_t sourceKif, const uint8_t sourceKvc)
const std::vector< uint8_t > getSvReloadComplementaryData(const std::shared_ptr< CmdCardSvReload > cmdCardSvReload, const std::vector< uint8_t > &svGetHeader, const std::vector< uint8_t > &svGetData)
const std::shared_ptr< uint8_t > computeKvc(const WriteAccessLevel writeAccessLevel, const std::shared_ptr< uint8_t > kvc) const
const std::vector< uint8_t > getCipheredPinData(const std::vector< uint8_t > &poChallenge, const std::vector< uint8_t > ¤tPin, const std::vector< uint8_t > &newPin)
const std::vector< uint8_t > getTerminalSignature()
const std::vector< uint8_t > getSessionTerminalChallenge()
void pushCardExchangedData(const std::vector< std::shared_ptr< ApduRequestSpi > > &requests, const std::vector< std::shared_ptr< ApduResponseApi > > &responses, const int startIndex)
const std::shared_ptr< uint8_t > computeKif(const WriteAccessLevel writeAccessLevel, const std::shared_ptr< uint8_t > kif, const std::shared_ptr< uint8_t > kvc)
const std::vector< uint8_t > getSvUndebitComplementaryData(const std::shared_ptr< CmdCardSvUndebit > cmdCardSvUndebit, const std::vector< uint8_t > &svGetHeader, const std::vector< uint8_t > &svGetData)
const std::vector< uint8_t > getSvDebitComplementaryData(const std::shared_ptr< CmdCardSvDebit > cmdCardSvDebit, const std::vector< uint8_t > &svGetHeader, const std::vector< uint8_t > &svGetData)
SamCommandProcessor(const std::shared_ptr< CalypsoCard > calypsoCard, const std::shared_ptr< CardSecuritySetting > cardSecuritySetting)
void authenticateCardSignature(const std::vector< uint8_t > &cardSignatureLo)
void initializeDigester(const bool sessionEncryption, const bool verificationMode, const uint8_t kif, const uint8_t kvc, const std::vector< uint8_t > &digestData)
void checkSvStatus(const std::vector< uint8_t > &svOperationResponseData)
CalypsoSam::ProductType ProductType