Keyple Card Calypso C++ Library 2.2.5.6
Reference Terminal Reader API for C++
CmdCardOpenSession.h
Go to the documentation of this file.
1/**************************************************************************************************
2 * Copyright (c) 2023 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 "CalypsoCardAdapter.h"
27#include "CalypsoCardClass.h"
28
29/* Keyple Core Util */
30#include "LoggerFactory.h"
31
32namespace keyple {
33namespace card {
34namespace calypso {
35
36using namespace calypsonet::terminal::calypso::card;
37using namespace keyple::core::util::cpp;
38
40
48public:
62 CmdCardOpenSession(const std::shared_ptr<CalypsoCardAdapter> calypsoCard,
63 const uint8_t keyIndex,
64 const std::vector<uint8_t>& samChallenge,
65 const uint8_t sfi,
66 const uint8_t recordNumber,
67 const uint8_t recordSize,
68 const bool isExtendedModeAllowed);
69
80 void createRev3(const uint8_t keyIndex,
81 const std::vector<uint8_t>& samChallenge,
82 const uint8_t sfi,
83 const uint8_t recordNumber);
84
96 void createRev24(const uint8_t keyIndex,
97 const std::vector<uint8_t>& samChallenge,
98 const uint8_t sfi,
99 const uint8_t recordNumber);
100
112 void createRev10(const uint8_t keyIndex,
113 const std::vector<uint8_t>& samChallenge,
114 const uint8_t sfi,
115 const uint8_t recordNumber);
116
128 void buildLegacyApduRequest(const uint8_t keyIndex,
129 const std::vector<uint8_t>& samChallenge,
130 const uint8_t sfi,
131 const uint8_t recordNumber,
132 const uint8_t p1) ;
133
140 bool isSessionBufferUsed() const override;
141
148 uint8_t getSfi() const;
149
156 uint8_t getRecordNumber() const;
157
163 void parseApduResponse(const std::shared_ptr<ApduResponseApi> apduResponse) override;
164
171 void parseRev3(const std::vector<uint8_t>& apduResponseData);
172
201 void parseRev24(const std::vector<uint8_t>& apduResponseData);
202
230 void parseRev10(const std::vector<uint8_t>& apduResponseData);
231
238 const std::vector<uint8_t>& getCardChallenge() const;
239
247
254 const std::shared_ptr<uint8_t> getSelectedKif() const;
255
262 const std::shared_ptr<uint8_t> getSelectedKvc() const;
263
269 const std::map<const int, const std::shared_ptr<StatusProperties>>& getStatusTable() const
270 override;
271
272private:
277 class SecureSession {
278 public:
282 friend class CmdCardOpenSession;
283
287 const std::vector<uint8_t>& getChallengeTransactionCounter() const;
288
292 const std::vector<uint8_t>& getChallengeRandomNumber() const;
293
300 bool isPreviousSessionRatified() const;
301
309
316 const std::shared_ptr<uint8_t> getKIF() const;
317
324 const std::shared_ptr<uint8_t> getKVC() const;
325
332 const std::vector<uint8_t>& getOriginalData() const;
333
340 const std::vector<uint8_t>& getSecureSessionData() const;
341
342 private:
346 const std::vector<uint8_t> mChallengeTransactionCounter;
347
351 const std::vector<uint8_t> mChallengeRandomNumber;
352
356 const bool mPreviousSessionRatified;
357
361 const bool mManageSecureSessionAuthorized;
362
366 const std::shared_ptr<uint8_t> mKif;
367
371 const std::shared_ptr<uint8_t> mKvc;
372
376 const std::vector<uint8_t> mOriginalData;
377
381 const std::vector<uint8_t> mSecureSessionData;
382
398 SecureSession(const std::vector<uint8_t>& challengeTransactionCounter,
399 const std::vector<uint8_t>& challengeRandomNumber,
400 const bool previousSessionRatified,
401 const bool manageSecureSessionAuthorized,
402 const std::shared_ptr<uint8_t> kif,
403 const std::shared_ptr<uint8_t> kvc,
404 const std::vector<uint8_t>& originalData,
405 const std::vector<uint8_t>& secureSessionData);
406 };
407
411 const std::unique_ptr<Logger> mLogger = LoggerFactory::getLogger(typeid(CmdCardOpenSession));
412
416 static const std::map<const int, const std::shared_ptr<StatusProperties>> STATUS_TABLE;
417
421 uint8_t mSfi = 0;
422
426 uint8_t mRecordNumber = 0;
427
431 uint8_t mRecordSize = 0;
432
436 const bool mIsExtendedModeAllowed = false;
437
441 std::shared_ptr<SecureSession> mSecureSession = nullptr;
442
446 static const std::map<const int, const std::shared_ptr<StatusProperties>> initStatusTable();
447};
448
449}
450}
451}
void createRev24(const uint8_t keyIndex, const std::vector< uint8_t > &samChallenge, const uint8_t sfi, const uint8_t recordNumber)
CmdCardOpenSession(const std::shared_ptr< CalypsoCardAdapter > calypsoCard, const uint8_t keyIndex, const std::vector< uint8_t > &samChallenge, const uint8_t sfi, const uint8_t recordNumber, const uint8_t recordSize, 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)
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
void parseApduResponse(const std::shared_ptr< ApduResponseApi > apduResponse) override
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