Keyple Card Calypso C++ Library - 3.2.2
Component of the Keyple C++ middleware
CalypsoCardConstant.cpp
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright (c) 2025 Calypso Networks Association https://calypsonet.org/ *
3 * *
4 * See the NOTICE file(s) distributed with this work for additional *
5 * information regarding copyright ownership. *
6 * *
7 * This program and the accompanying materials are made available under the *
8 * terms of the Eclipse Public License 2.0 which is available at *
9 * http://www.eclipse.org/legal/epl-2.0 *
10 * *
11 * SPDX-License-Identifier: EPL-2.0 *
12 ******************************************************************************/
13
14#include "keyple/card/calypso/CalypsoCardConstant.hpp"
15
16#include <vector>
17
18#include "keyple/core/util/HexUtil.hpp"
19
20namespace keyple {
21namespace card {
22namespace calypso {
23
24using keyple::core::util::HexUtil;
25
26const int CalypsoCardConstant::SW_FILE_NOT_FOUND = 0x6A82;
27const int CalypsoCardConstant::SW_RECORD_NOT_FOUND = 0x6A83;
28
29const int CalypsoCardConstant::MASK_15_BITS = 0x7FFF; /* 32 767 */
30const int CalypsoCardConstant::MASK_3_BYTES = 0xFFFFFF; /* 16 777 215 */
31
32/* SFI */
33const int CalypsoCardConstant::SFI_MIN = 0;
34const int CalypsoCardConstant::SFI_MAX = 30; /* 1Eh */
35
36/* Record number */
37const int CalypsoCardConstant::NB_REC_MIN = 1;
38const int CalypsoCardConstant::NB_REC_MAX = 250;
39
40/* Counter number */
41const int CalypsoCardConstant::NUM_CNT_MIN = 1;
42
43/* Counter value */
44const int CalypsoCardConstant::CNT_VALUE_MIN = 0;
45const int CalypsoCardConstant::CNT_VALUE_MAX = MASK_3_BYTES;
46
47/* Offset */
48const int CalypsoCardConstant::OFFSET_MIN = 0;
49const int CalypsoCardConstant::OFFSET_MAX = 249;
50const int CalypsoCardConstant::OFFSET_BINARY_MAX = MASK_15_BITS;
51
52/* Data */
53const int CalypsoCardConstant::DATA_LENGTH_MIN = 1;
54
55/* Field offsets in select file response (tag/length excluded) */
56const int CalypsoCardConstant::SEL_SFI_OFFSET = 0;
57const int CalypsoCardConstant::SEL_TYPE_OFFSET = 1;
58const int CalypsoCardConstant::SEL_EF_TYPE_OFFSET = 2;
59const int CalypsoCardConstant::SEL_REC_SIZE_OFFSET = 3;
60const int CalypsoCardConstant::SEL_NUM_REC_OFFSET = 4;
61const int CalypsoCardConstant::SEL_AC_OFFSET = 5;
62const int CalypsoCardConstant::SEL_AC_LENGTH = 4;
63const int CalypsoCardConstant::SEL_NKEY_OFFSET = 9;
64const int CalypsoCardConstant::SEL_NKEY_LENGTH = 4;
65const int CalypsoCardConstant::SEL_DF_STATUS_OFFSET = 13;
66const int CalypsoCardConstant::SEL_KVCS_OFFSET = 14;
67const int CalypsoCardConstant::SEL_KIFS_OFFSET = 17;
68const int CalypsoCardConstant::SEL_DATA_REF_OFFSET = 14;
69const int CalypsoCardConstant::SEL_LID_OFFSET = 21;
70const int CalypsoCardConstant::SEL_LID_OFFSET_REV2 = 20;
71
72/* PIN Code */
73const int CalypsoCardConstant::PIN_LENGTH = 4;
74
75/* Stored Value */
76const uint8_t CalypsoCardConstant::STORED_VALUE_FILE_STRUCTURE_ID = 0x20;
77const uint8_t CalypsoCardConstant::SV_RELOAD_LOG_FILE_SFI = 0x14;
78const uint8_t CalypsoCardConstant::SV_RELOAD_LOG_FILE_NB_REC = 1;
79const uint8_t CalypsoCardConstant::SV_DEBIT_LOG_FILE_SFI = 0x15;
80const uint8_t CalypsoCardConstant::SV_DEBIT_LOG_FILE_NB_REC = 3;
81const uint8_t CalypsoCardConstant::SV_LOG_FILE_REC_LENGTH = 29;
82
83/* Payload capacity */
84const int CalypsoCardConstant::SV_LOAD_MIN_VALUE
85 = -8388608; // -2^23: smallest 3-byte negative value
86const int CalypsoCardConstant::SV_LOAD_MAX_VALUE
87 = 8388607; // 2^23 - 1: largest 3-byte positive value
88const int CalypsoCardConstant::SV_DEBIT_MIN_VALUE = 0;
89const int CalypsoCardConstant::SV_DEBIT_MAX_VALUE
90 = 32767; // 2^15 - 1: largest 2-byte positive value
91
92const int CalypsoCardConstant::DEFAULT_PAYLOAD_CAPACITY = 250;
93
94const int CalypsoCardConstant::LEGACY_REC_LENGTH = 29;
95
96const int CalypsoCardConstant::CARD_PUBLIC_KEY_SIZE = 64;
97const int CalypsoCardConstant::CARD_KEY_PAIR_SIZE = 96;
98const int CalypsoCardConstant::CARD_CERTIFICATE_SIZE = 316;
99const int CalypsoCardConstant::CA_CERTIFICATE_SIZE = 384;
100
101/* TLV TAGS */
102const int CalypsoCardConstant::TAG_FCP_FOR_CURRENT_FILE = 0x62;
103const std::uint8_t CalypsoCardConstant::TAG_FCP_FOR_CURRENT_FILE_LSB
104 = (TAG_FCP_FOR_CURRENT_FILE & 0xFF);
105const std::uint8_t CalypsoCardConstant::TAG_FCP_FOR_CURRENT_FILE_MSB
106 = ((TAG_FCP_FOR_CURRENT_FILE & 0xFF00) >> 8);
107const int CalypsoCardConstant::TAG_FCI_FOR_CURRENT_DF = 0x6F;
108const std::uint8_t CalypsoCardConstant::TAG_FCI_FOR_CURRENT_DF_LSB
109 = (TAG_FCI_FOR_CURRENT_DF & 0xFF);
110const std::uint8_t CalypsoCardConstant::TAG_FCI_FOR_CURRENT_DF_MSB
111 = ((TAG_FCI_FOR_CURRENT_DF & 0xFF00) >> 8);
112const int CalypsoCardConstant::TAG_EF_LIST = 0xC0;
113const std::uint8_t CalypsoCardConstant::TAG_EF_LIST_LSB = (TAG_EF_LIST & 0xFF);
114const std::uint8_t CalypsoCardConstant::TAG_EF_LIST_MSB
115 = ((TAG_EF_LIST & 0xFF00) >> 8);
116const int CalypsoCardConstant::TAG_TRACEABILITY_INFORMATION = 0x185;
117const std::uint8_t CalypsoCardConstant::TAG_TRACEABILITY_INFORMATION_LSB
118 = (TAG_TRACEABILITY_INFORMATION & 0xFF);
119const std::uint8_t CalypsoCardConstant::TAG_TRACEABILITY_INFORMATION_MSB
120 = ((TAG_TRACEABILITY_INFORMATION & 0xFF00) >> 8);
121const int CalypsoCardConstant::TAG_CARD_PUBLIC_KEY_HEADER_SIZE = 3;
122const int CalypsoCardConstant::TAG_CARD_PUBLIC_KEY = 0xDF2C;
123const std::uint8_t CalypsoCardConstant::TAG_CARD_PUBLIC_KEY_LSB
124 = (TAG_CARD_PUBLIC_KEY & 0xFF);
125const std::uint8_t CalypsoCardConstant::TAG_CARD_PUBLIC_KEY_MSB
126 = ((TAG_CARD_PUBLIC_KEY & 0xFF00) >> 8);
127const int CalypsoCardConstant::TAG_CARD_KEY_PAIR = 0xDF3C;
128const std::uint8_t CalypsoCardConstant::TAG_CARD_KEY_PAIR_LSB
129 = (TAG_CARD_KEY_PAIR & 0xFF);
130const std::uint8_t CalypsoCardConstant::TAG_CARD_KEY_PAIR_MSB
131 = ((TAG_CARD_KEY_PAIR & 0xFF00) >> 8);
132const int CalypsoCardConstant::TAG_CERTIFICATE_HEADER_SIZE = 5;
133const int CalypsoCardConstant::TAG_CARD_CERTIFICATE = 0xDF4C;
134const std::vector<std::uint8_t> CalypsoCardConstant::TAG_CARD_CERTIFICATE_HEADER
135 = HexUtil::toByteArray("DF4C82013C");
136const std::uint8_t CalypsoCardConstant::TAG_CARD_CERTIFICATE_LSB
137 = (TAG_CARD_CERTIFICATE & 0xFF);
138const std::uint8_t CalypsoCardConstant::TAG_CARD_CERTIFICATE_MSB
139 = ((TAG_CARD_CERTIFICATE & 0xFF00) >> 8);
140const int CalypsoCardConstant::TAG_CA_CERTIFICATE = 0xDF4A;
141const std::vector<std::uint8_t> CalypsoCardConstant::TAG_CA_CERTIFICATE_HEADER
142 = HexUtil::toByteArray("DF4A820180");
143const std::uint8_t CalypsoCardConstant::TAG_CA_CERTIFICATE_LSB
144 = (TAG_CA_CERTIFICATE & 0xFF);
145const std::uint8_t CalypsoCardConstant::TAG_CA_CERTIFICATE_MSB
146 = ((TAG_CA_CERTIFICATE & 0xFF00) >> 8);
147
148CalypsoCardConstant::CalypsoCardConstant()
149{
150}
151
152} /* namespace calypso */
153} /* namespace card */
154} /* namespace keyple */