24#include "IllegalArgumentException.h"
31using namespace keyple::core::util;
32using namespace keyple::core::util::cpp;
33using namespace keyple::core::util::cpp::exception;
37const std::map<const int, const std::shared_ptr<StatusProperties>>
38 CmdSamDigestInit::STATUS_TABLE = initStatusTable();
42 const bool verificationMode,
43 const bool confidentialSessionMode,
44 const uint8_t workKif,
45 const uint8_t workKvc,
46 const std::vector<uint8_t>& digestData)
49 if (workKif == 0x00 || workKvc == 0x00) {
50 throw IllegalArgumentException(
"Bad kif or kvc!");
53 if (digestData.empty()) {
54 throw IllegalArgumentException(
"Digest data is null!");
60 if (verificationMode) {
64 if (confidentialSessionMode) {
68 const uint8_t p2 = 0xFF;
70 std::vector<uint8_t> dataIn(2 + digestData.size());
73 System::arraycopy(digestData, 0, dataIn, 2, digestData.size());
76 std::make_shared<ApduRequestAdapter>(
80const std::map<const int, const std::shared_ptr<StatusProperties>>
81 CmdSamDigestInit::initStatusTable()
83 std::map<const int, const std::shared_ptr<StatusProperties>> m =
87 std::make_shared<StatusProperties>(
"Incorrect Lc.",
90 std::make_shared<StatusProperties>(
"An event counter cannot be incremented.",
91 typeid(CalypsoSamCounterOverflowException))});
93 std::make_shared<StatusProperties>(
"Preconditions not satisfied.",
94 typeid(CalypsoSamAccessForbiddenException))});
96 std::make_shared<StatusProperties>(
"Incorrect P2.",
97 typeid(CalypsoSamIllegalParameterException))});
99 std::make_shared<StatusProperties>(
"Record not found: signing key not found.",
100 typeid(CalypsoSamDataAccessException))});
105const std::map<const int, const std::shared_ptr<StatusProperties>>&
virtual void setApduRequest(const std::shared_ptr< ApduRequestAdapter > apduRequest) final
static const std::map< const int, const std::shared_ptr< StatusProperties > > STATUS_TABLE
static const CalypsoSamCommand DIGEST_INIT
uint8_t getInstructionByte() const override
const std::map< const int, const std::shared_ptr< StatusProperties > > & getStatusTable() const override
CmdSamDigestInit(const CalypsoSam::ProductType productType, const bool verificationMode, const bool confidentialSessionMode, const uint8_t workKif, const uint8_t workKvc, const std::vector< uint8_t > &digestData)
static uint8_t getClassByte(const ProductType productType)
CalypsoSam::ProductType ProductType