Keyple Card Calypso C++ Library 2.1.0
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:
57 CmdCardOpenSession(const std::shared_ptr<CalypsoCard> calypsoCard,
58 const uint8_t debitKeyIndex,
59 const std::vector<uint8_t> sessionTerminalChallenge,
60 const uint8_t sfi,
61 const uint8_t recordNumber);
62
74 void createRev3(const uint8_t keyIndex,
75 const std::vector<uint8_t>& samChallenge,
76 const uint8_t sfi,
77 const uint8_t recordNumber,
78 const std::shared_ptr<CalypsoCard> calypsoCard);
79
91 void createRev24(const uint8_t keyIndex,
92 const std::vector<uint8_t>& samChallenge,
93 const uint8_t sfi,
94 const uint8_t recordNumber);
95
107 void createRev10(const uint8_t keyIndex,
108 const std::vector<uint8_t>& samChallenge,
109 const uint8_t sfi,
110 const uint8_t recordNumber);
111
123 void buildLegacyApduRequest(const uint8_t keyIndex,
124 const std::vector<uint8_t>& samChallenge,
125 const uint8_t sfi,
126 const uint8_t recordNumber,
127 const uint8_t p1) ;
128
135 bool isSessionBufferUsed() const override;
136
143 uint8_t getSfi() const;
144
151 uint8_t getRecordNumber() const;
152
158 CmdCardOpenSession& setApduResponse(const std::shared_ptr<ApduResponseApi> apduResponse)
159 override;
160
167 void parseRev3(const std::vector<uint8_t>& apduResponseData);
168
197 void parseRev24(const std::vector<uint8_t>& apduResponseData);
198
226 void parseRev10(const std::vector<uint8_t>& apduResponseData);
227
234 const std::vector<uint8_t>& getCardChallenge() const;
235
242 int getTransactionCounterValue() const;
243
250 bool wasRatified() const;
251
259
266 const std::shared_ptr<uint8_t> getSelectedKif() const;
267
274 const std::shared_ptr<uint8_t> getSelectedKvc() const;
275
282 const std::vector<uint8_t>& getRecordDataRead() const;
283
289 const std::map<const int, const std::shared_ptr<StatusProperties>>& getStatusTable() const
290 override;
291
292private:
297 class SecureSession {
298 public:
302 friend class CmdCardOpenSession;
303
307 const std::vector<uint8_t>& getChallengeTransactionCounter() const;
308
312 const std::vector<uint8_t>& getChallengeRandomNumber() const;
313
320 bool isPreviousSessionRatified() const;
321
329
336 const std::shared_ptr<uint8_t> getKIF() const;
337
344 const std::shared_ptr<uint8_t> getKVC() const;
345
352 const std::vector<uint8_t>& getOriginalData() const;
353
360 const std::vector<uint8_t>& getSecureSessionData() const;
361
362 private:
366 const std::vector<uint8_t> mChallengeTransactionCounter;
367
371 const std::vector<uint8_t> mChallengeRandomNumber;
372
376 const bool mPreviousSessionRatified;
377
381 const bool mManageSecureSessionAuthorized;
382
386 const std::shared_ptr<uint8_t> mKif;
387
391 const std::shared_ptr<uint8_t> mKvc;
392
396 const std::vector<uint8_t> mOriginalData;
397
401 const std::vector<uint8_t> mSecureSessionData;
402
418 SecureSession(const std::vector<uint8_t>& challengeTransactionCounter,
419 const std::vector<uint8_t>& challengeRandomNumber,
420 const bool previousSessionRatified,
421 const bool manageSecureSessionAuthorized,
422 const std::shared_ptr<uint8_t> kif,
423 const std::shared_ptr<uint8_t> kvc,
424 const std::vector<uint8_t>& originalData,
425 const std::vector<uint8_t>& secureSessionData);
426 };
427
431 const std::unique_ptr<Logger> mLogger = LoggerFactory::getLogger(typeid(CmdCardOpenSession));
432
436 static const std::map<const int, const std::shared_ptr<StatusProperties>> STATUS_TABLE;
437
441 const std::shared_ptr<CalypsoCard> mCalypsoCard;
442
446 uint8_t mSfi;
447
451 uint8_t mRecordNumber;
452
456 std::shared_ptr<SecureSession> mSecureSession;
457
461 static const std::map<const int, const std::shared_ptr<StatusProperties>> initStatusTable();
462};
463
464}
465}
466}
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 std::shared_ptr< CalypsoCard > calypsoCard, const uint8_t debitKeyIndex, const std::vector< uint8_t > sessionTerminalChallenge, const uint8_t sfi, const uint8_t recordNumber)
const std::vector< uint8_t > & getCardChallenge() const
void createRev3(const uint8_t keyIndex, const std::vector< uint8_t > &samChallenge, const uint8_t sfi, const uint8_t recordNumber, const std::shared_ptr< CalypsoCard > calypsoCard)
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