25#include "IllegalArgumentException.h"
26#include "IllegalStateException.h"
32using namespace keyple::core::util;
33using namespace keyple::core::util::cpp::exception;
36const int CmdSamReadKeyParameters::MAX_WORK_KEY_REC_NUMB = 126;
38const std::map<const int, const std::shared_ptr<StatusProperties>>
39 CmdSamReadKeyParameters::STATUS_TABLE = initStatusTable();
46 const uint8_t p2 = 0xE0;
47 const std::vector<uint8_t> sourceKeyId = {0x00, 0x00};
50 std::make_shared<ApduRequestAdapter>(
60 const uint8_t p2 = 0xC0;
61 std::vector<uint8_t> sourceKeyId = {0x00, 0x00};
66 std::make_shared<ApduRequestAdapter>(
77 const uint8_t p2 = 0xF0;
78 std::vector<uint8_t> sourceKeyId = {0x00, 0x00};
84 std::make_shared<ApduRequestAdapter>(
90 const int recordNumber)
93 if (recordNumber < 1 || recordNumber > MAX_WORK_KEY_REC_NUMB) {
94 throw IllegalArgumentException(
"Record Number must be between 1 and " +
95 std::to_string(MAX_WORK_KEY_REC_NUMB) +
102 std::vector<uint8_t> sourceKeyId = {0x00, 0x00};
104 switch (sourceKeyRef) {
106 p2 =
static_cast<uint8_t
>(recordNumber);
109 p2 =
static_cast<uint8_t
>(0xC0 + recordNumber);
112 std::stringstream ss;
114 throw IllegalStateException(
"Unsupported SourceRef parameter " +
119 std::make_shared<ApduRequestAdapter>(
131 std::vector<uint8_t> sourceKeyId = {0x00, 0x00};
133 switch (navControl) {
141 std::stringstream ss;
143 throw IllegalStateException(
"Unsupported NavControl parameter " +
147 sourceKeyId[0] = kif;
150 std::make_shared<ApduRequestAdapter>(
159const std::map<const int, const std::shared_ptr<StatusProperties>>
160 CmdSamReadKeyParameters::initStatusTable()
162 std::map<const int, const std::shared_ptr<StatusProperties>> m =
166 std::make_shared<StatusProperties>(
"Incorrect Lc.",
169 std::make_shared<StatusProperties>(
"An event counter cannot be incremented.",
170 typeid(CalypsoSamCounterOverflowException))});
172 std::make_shared<StatusProperties>(
"Incorrect P2.",
173 typeid(CalypsoSamIllegalParameterException))});
175 std::make_shared<StatusProperties>(
"Record not found: key to read not found.",
176 typeid(CalypsoSamDataAccessException))});
178 std::make_shared<StatusProperties>(
"Correct execution with warning: data not signed.",
184const std::map<const int, const std::shared_ptr<StatusProperties>>&
194 os <<
"SOURCE_REF = ";
215 os <<
"NAV_CONTROL = ";
virtual const std::shared_ptr< ApduResponseApi > getApduResponse() const final
virtual bool isSuccessful() const final
virtual void setApduRequest(const std::shared_ptr< ApduRequestAdapter > apduRequest) final
static const std::map< const int, const std::shared_ptr< StatusProperties > > STATUS_TABLE
uint8_t getInstructionByte() const override
static const CalypsoSamCommand READ_KEY_PARAMETERS
CmdSamReadKeyParameters(const CalypsoSam::ProductType productType)
const std::map< const int, const std::shared_ptr< StatusProperties > > & getStatusTable() const override
const std::vector< uint8_t > getKeyParameters() const
static uint8_t getClassByte(const ProductType productType)
CalypsoSam::ProductType ProductType
std::ostream & operator<<(std::ostream &os, const std::shared_ptr< ApduRequestAdapter > ara)