Keyple Card Calypso C++ Library 2.2.2
Reference Terminal Reader API for C++
CmdCardOpenSession.h
Go to the documentation of this file.
1/**************************************************************************************************
2 * Copyright (c) 2021 Calypso Networks Association https://calypsonet.org/ *
3 * *
4 * See the NOTICE file(s) distributed with this work for additional information regarding *
5 * copyright ownership. *
6 * *
7 * This program and the accompanying materials are made available under the terms of the Eclipse *
8 * Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0 *
9 * *
10 * SPDX-License-Identifier: EPL-2.0 *
11 **************************************************************************************************/
12
13#pragma once
14
15#include <cstdint>
16#include <map>
17#include <memory>
18#include <vector>
19
20/* Calypsonet Terminal Calypso */
21#include "CalypsoCard.h"
22
23/* Keyple Card Calypso */
24#include "AbstractApduCommand.h"
25#include "AbstractCardCommand.h"
26#include "CalypsoCardClass.h"
27
28/* Keyple Core Util */
29#include "LoggerFactory.h"
30
31namespace keyple {
32namespace card {
33namespace calypso {
34
35using namespace calypsonet::terminal::calypso::card;
36using namespace keyple::core::util::cpp;
37
39
47public:
62 const uint8_t keyIndex,
63 const std::vector<uint8_t>& samChallenge,
64 const uint8_t sfi,
65 const uint8_t recordNumber,
66 const bool isExtendedModeAllowed);
67
78 void createRev3(const uint8_t keyIndex,
79 const std::vector<uint8_t>& samChallenge,
80 const uint8_t sfi,
81 const uint8_t recordNumber);
82
94 void createRev24(const uint8_t keyIndex,
95 const std::vector<uint8_t>& samChallenge,
96 const uint8_t sfi,
97 const uint8_t recordNumber);
98
110 void createRev10(const uint8_t keyIndex,
111 const std::vector<uint8_t>& samChallenge,
112 const uint8_t sfi,
113 const uint8_t recordNumber);
114
126 void buildLegacyApduRequest(const uint8_t keyIndex,
127 const std::vector<uint8_t>& samChallenge,
128 const uint8_t sfi,
129 const uint8_t recordNumber,
130 const uint8_t p1) ;
131
138 bool isSessionBufferUsed() const override;
139
146 uint8_t getSfi() const;
147
154 uint8_t getRecordNumber() const;
155
161 CmdCardOpenSession& setApduResponse(const std::shared_ptr<ApduResponseApi> apduResponse)
162 override;
163
170 void parseRev3(const std::vector<uint8_t>& apduResponseData);
171
200 void parseRev24(const std::vector<uint8_t>& apduResponseData);
201
229 void parseRev10(const std::vector<uint8_t>& apduResponseData);
230
237 const std::vector<uint8_t>& getCardChallenge() const;
238
245 int getTransactionCounterValue() const;
246
253 bool wasRatified() const;
254
262
269 const std::shared_ptr<uint8_t> getSelectedKif() const;
270
277 const std::shared_ptr<uint8_t> getSelectedKvc() const;
278
285 const std::vector<uint8_t>& getRecordDataRead() const;
286
292 const std::map<const int, const std::shared_ptr<StatusProperties>>& getStatusTable() const
293 override;
294
295private:
300 class SecureSession {
301 public:
305 friend class CmdCardOpenSession;
306
310 const std::vector<uint8_t>& getChallengeTransactionCounter() const;
311
315 const std::vector<uint8_t>& getChallengeRandomNumber() const;
316
323 bool isPreviousSessionRatified() const;
324
332
339 const std::shared_ptr<uint8_t> getKIF() const;
340
347 const std::shared_ptr<uint8_t> getKVC() const;
348
355 const std::vector<uint8_t>& getOriginalData() const;
356
363 const std::vector<uint8_t>& getSecureSessionData() const;
364
365 private:
369 const std::vector<uint8_t> mChallengeTransactionCounter;
370
374 const std::vector<uint8_t> mChallengeRandomNumber;
375
379 const bool mPreviousSessionRatified;
380
384 const bool mManageSecureSessionAuthorized;
385
389 const std::shared_ptr<uint8_t> mKif;
390
394 const std::shared_ptr<uint8_t> mKvc;
395
399 const std::vector<uint8_t> mOriginalData;
400
404 const std::vector<uint8_t> mSecureSessionData;
405
421 SecureSession(const std::vector<uint8_t>& challengeTransactionCounter,
422 const std::vector<uint8_t>& challengeRandomNumber,
423 const bool previousSessionRatified,
424 const bool manageSecureSessionAuthorized,
425 const std::shared_ptr<uint8_t> kif,
426 const std::shared_ptr<uint8_t> kvc,
427 const std::vector<uint8_t>& originalData,
428 const std::vector<uint8_t>& secureSessionData);
429 };
430
434 const std::unique_ptr<Logger> mLogger = LoggerFactory::getLogger(typeid(CmdCardOpenSession));
435
439 static const std::map<const int, const std::shared_ptr<StatusProperties>> STATUS_TABLE;
440
444 const CalypsoCard::ProductType mProductType = CalypsoCard::ProductType::UNKNOWN;
445
449 const bool mIsExtendedModeAllowed = false;
450
454 uint8_t mSfi = 0;
455
459 uint8_t mRecordNumber = 0;
460
464 std::shared_ptr<SecureSession> mSecureSession = nullptr;
465
469 static const std::map<const int, const std::shared_ptr<StatusProperties>> initStatusTable();
470};
471
472}
473}
474}
void createRev24(const uint8_t keyIndex, const std::vector< uint8_t > &samChallenge, const uint8_t sfi, const uint8_t recordNumber)
const std::vector< uint8_t > & getRecordDataRead() const
CmdCardOpenSession(const CalypsoCard::ProductType productType, const uint8_t keyIndex, const std::vector< uint8_t > &samChallenge, const uint8_t sfi, const uint8_t recordNumber, const bool isExtendedModeAllowed)
void createRev3(const uint8_t keyIndex, const std::vector< uint8_t > &samChallenge, const uint8_t sfi, const uint8_t recordNumber)
const std::vector< uint8_t > & getCardChallenge() const
const std::map< const int, const std::shared_ptr< StatusProperties > > & getStatusTable() const override
void parseRev24(const std::vector< uint8_t > &apduResponseData)
CmdCardOpenSession & setApduResponse(const std::shared_ptr< ApduResponseApi > apduResponse) override
void buildLegacyApduRequest(const uint8_t keyIndex, const std::vector< uint8_t > &samChallenge, const uint8_t sfi, const uint8_t recordNumber, const uint8_t p1)
const std::shared_ptr< uint8_t > getSelectedKif() const
const std::shared_ptr< uint8_t > getSelectedKvc() const
void parseRev3(const std::vector< uint8_t > &apduResponseData)
void createRev10(const uint8_t keyIndex, const std::vector< uint8_t > &samChallenge, const uint8_t sfi, const uint8_t recordNumber)
void parseRev10(const std::vector< uint8_t > &apduResponseData)
AbstractApduCommand::StatusProperties StatusProperties
CalypsoSam::ProductType ProductType