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>(
55 const std::shared_ptr<CalypsoSamAdapter> calypsoSam,
61 const uint8_t p2 = 0xC0;
62 std::vector<uint8_t> sourceKeyId = {0x00, 0x00};
67 std::make_shared<ApduRequestAdapter>(
72 const std::shared_ptr<CalypsoSamAdapter> calypsoSam,
79 const uint8_t p2 = 0xF0;
80 std::vector<uint8_t> sourceKeyId = {0x00, 0x00};
86 std::make_shared<ApduRequestAdapter>(
91 const std::shared_ptr<CalypsoSamAdapter> calypsoSam,
93 const int recordNumber)
96 if (recordNumber < 1 || recordNumber > MAX_WORK_KEY_REC_NUMB) {
98 throw IllegalArgumentException(
"Record Number must be between 1 and " +
99 std::to_string(MAX_WORK_KEY_REC_NUMB) +
106 std::vector<uint8_t> sourceKeyId = {0x00, 0x00};
108 switch (sourceKeyRef) {
111 p2 =
static_cast<uint8_t
>(recordNumber);
115 p2 =
static_cast<uint8_t
>(0xC0 + recordNumber);
119 std::stringstream ss;
121 throw IllegalStateException(
"Unsupported SourceRef parameter " +
126 std::make_shared<ApduRequestAdapter>(
131 const std::shared_ptr<CalypsoSamAdapter> calypsoSam,
139 std::vector<uint8_t> sourceKeyId = {0x00, 0x00};
141 switch (navControl) {
152 std::stringstream ss;
154 throw IllegalStateException(
"Unsupported NavControl parameter " +
158 sourceKeyId[0] = kif;
161 std::make_shared<ApduRequestAdapter>(
170const std::map<const int, const std::shared_ptr<StatusProperties>>
171 CmdSamReadKeyParameters::initStatusTable()
173 std::map<const int, const std::shared_ptr<StatusProperties>> m =
177 std::make_shared<StatusProperties>(
"Incorrect Lc.",
180 std::make_shared<StatusProperties>(
"An event counter cannot be incremented.",
181 typeid(CalypsoSamCounterOverflowException))});
183 std::make_shared<StatusProperties>(
"Incorrect P2.",
184 typeid(CalypsoSamIllegalParameterException))});
186 std::make_shared<StatusProperties>(
"Record not found: key to read not found.",
187 typeid(CalypsoSamDataAccessException))});
189 std::make_shared<StatusProperties>(
"Correct execution with warning: data not signed.",
195const std::map<const int, const std::shared_ptr<StatusProperties>>&
205 os <<
"SOURCE_REF = ";
226 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 std::shared_ptr< CalypsoSamAdapter > calypsoSam)
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)
std::ostream & operator<<(std::ostream &os, const std::shared_ptr< ApduRequestAdapter > ara)