LibLogicalAccess  2.5.0
An Open Source RFID Library
Loading...
Searching...
No Matches
mifareaccessinfo.hpp
Go to the documentation of this file.
1
7#ifndef LOGICALACCESS_MIFAREACCESSINFO_HPP
8#define LOGICALACCESS_MIFAREACCESSINFO_HPP
9
12
13namespace logicalaccess
14{
18typedef enum { KT_KEY_A = 0x60, KT_KEY_B = 0x61 } MifareKeyType;
19
20LLA_CARDS_MIFARE_API std::ostream &operator<<(std::ostream &s, const MifareKeyType &k);
21
25class LLA_CARDS_MIFARE_API MifareAccessInfo : public AccessInfo
26{
27 public:
28 using XmlSerializable::serialize;
29 using XmlSerializable::unSerialize;
30
35
39 virtual ~MifareAccessInfo();
40
44 void generateInfos() override;
45
50 std::string getCardType() const override;
51
56 void serialize(boost::property_tree::ptree &parentNode) override;
57
62 void unSerialize(boost::property_tree::ptree &parentNode) override;
63
68 std::string getDefaultXmlNodeName() const override;
69
75 bool operator==(const AccessInfo &ai) const override;
76
80 struct LLA_CARDS_MIFARE_API BlockAccessBits
81 {
90 BlockAccessBits(bool v1, bool v2, bool v3)
91 : c1(v1)
92 , c2(v2)
93 , c3(v3)
94 {
95 }
96
102 bool operator==(const BlockAccessBits &bab) const
103 {
104 return ((c1 == bab.c1) && (c2 == bab.c2) && (c3 == bab.c3));
105 }
106
107 bool c1;
108 bool c2;
109 bool c3;
110 };
111
115 struct LLA_CARDS_MIFARE_API DataBlockAccessBits : BlockAccessBits
116 {
124 : BlockAccessBits(false, false, false)
125 {
126 }
127
128 static void *getItem(void *arrayPtr, int i)
129 {
130 return &static_cast<DataBlockAccessBits *>(arrayPtr)[i];
131 }
132
133 static void setItem(void *arrayPtr, const DataBlockAccessBits *item, int i)
134 {
135 if (item)
136 static_cast<DataBlockAccessBits *>(arrayPtr)[i] = *item;
137 else
138 static_cast<DataBlockAccessBits *>(arrayPtr)[i] = DataBlockAccessBits();
139 }
140 };
141
145 struct LLA_CARDS_MIFARE_API SectorTrailerAccessBits : BlockAccessBits
146 {
154 : BlockAccessBits(false, false, true)
155 {
156 }
157
158 static void *getItem(void *arrayPtr, int i)
159 {
160 return &static_cast<SectorTrailerAccessBits *>(arrayPtr)[i];
161 }
162
163 static void setItem(void *arrayPtr, const SectorTrailerAccessBits *item, int i)
164 {
165 if (item)
166 static_cast<SectorTrailerAccessBits *>(arrayPtr)[i] = *item;
167 else
168 static_cast<SectorTrailerAccessBits *>(arrayPtr)[i] =
170 }
171 };
172
176 struct LLA_CARDS_MIFARE_API SectorAccessBits
177 {
182 ByteVector toArray() const;
183
192 bool fromArray(ByteVector);
193
197 void setTransportConfiguration();
198
202 void setAReadBWriteConfiguration();
203 void setAReadNeverWriteConfiguration();
204 void setBReadBWriteConfiguration();
205 void setBReadNeverWriteConfiguration();
206 void setNeverReadNeverWriteConfiguration();
207 void setNfcConfiguration();
208
210 {
211 if (a.d_sector_trailer_access_bits.c1 != this->d_sector_trailer_access_bits.c1
212 || a.d_sector_trailer_access_bits.c2 != this->d_sector_trailer_access_bits.c2
213 || a.d_sector_trailer_access_bits.c3 != this->d_sector_trailer_access_bits.c3)
214 return false;
215 for (unsigned int i = 0; i < 3; ++i)
216 {
217 if (a.d_data_blocks_access_bits[i].c1 != this->d_data_blocks_access_bits[i].c1
218 || a.d_data_blocks_access_bits[i].c2 != this->d_data_blocks_access_bits[i].c2
219 || a.d_data_blocks_access_bits[i].c3 != this->d_data_blocks_access_bits[i].c3)
220 return false;
221 }
222 return true;
223 }
224
226 {
227 bool b = (*this) == a;
228 return !b;
229 }
230
232 d_data_blocks_access_bits[3];
235 };
236
237
241 std::shared_ptr<MifareKey> keyA;
242
246 std::shared_ptr<MifareKey> keyB;
247
251 bool useMAD;
252
256 std::shared_ptr<MifareKey> madKeyA;
257
261 std::shared_ptr<MifareKey> madKeyB;
262
267
271 unsigned char gpb;
272
276 unsigned char madGPB;
277};
278}
279
280#endif /* LOGICALACCESS_MIFAREACCESSINFO_HPP */
AccessInfo.
A Access informations. Describe key used of authentication and access rights for a specific or a grou...
Definition: accessinfo.hpp:22
A Mifare access informations.
Definition: mifareaccessinfo.hpp:26
std::shared_ptr< MifareKey > keyA
The key A.
Definition: mifareaccessinfo.hpp:241
std::shared_ptr< MifareKey > madKeyA
The MAD A Key.
Definition: mifareaccessinfo.hpp:256
std::shared_ptr< MifareKey > keyB
The key B.
Definition: mifareaccessinfo.hpp:246
unsigned char gpb
The sector GPB.
Definition: mifareaccessinfo.hpp:271
unsigned char madGPB
The MAD GPB.
Definition: mifareaccessinfo.hpp:276
bool useMAD
MAD is used ?
Definition: mifareaccessinfo.hpp:251
std::shared_ptr< MifareKey > madKeyB
The MAD B Key.
Definition: mifareaccessinfo.hpp:261
SectorAccessBits sab
The sector access bits.
Definition: mifareaccessinfo.hpp:266
std::vector< uint8_t > ByteVector
Definition: lla_fwd.hpp:80
Mifare key.
Definition: asn1.hpp:9
LLA_CORE_API std::ostream & operator<<(std::ostream &os, const Key &key)
Output to stream operator.
Definition: key.cpp:298
MifareKeyType
Mifare Key Type.
Definition: mifareaccessinfo.hpp:18
@ KT_KEY_B
Definition: mifareaccessinfo.hpp:18
@ KT_KEY_A
Definition: mifareaccessinfo.hpp:18
Block access bits structure.
Definition: mifareaccessinfo.hpp:81
bool c1
The C1 access bit.
Definition: mifareaccessinfo.hpp:107
bool c3
The C3 access bit.
Definition: mifareaccessinfo.hpp:109
bool operator==(const BlockAccessBits &bab) const
Check if two BlockAccessBits are equal.
Definition: mifareaccessinfo.hpp:102
BlockAccessBits(bool v1, bool v2, bool v3)
Constructor.
Definition: mifareaccessinfo.hpp:90
bool c2
The C2 access bit.
Definition: mifareaccessinfo.hpp:108
Data block access bits structure.
Definition: mifareaccessinfo.hpp:116
DataBlockAccessBits()
Constructor.
Definition: mifareaccessinfo.hpp:123
static void * getItem(void *arrayPtr, int i)
Definition: mifareaccessinfo.hpp:128
static void setItem(void *arrayPtr, const DataBlockAccessBits *item, int i)
Definition: mifareaccessinfo.hpp:133
Sector access bits structure.
Definition: mifareaccessinfo.hpp:177
SectorTrailerAccessBits d_sector_trailer_access_bits
The sector trailer access bits.
Definition: mifareaccessinfo.hpp:234
bool operator!=(const SectorAccessBits a)
Definition: mifareaccessinfo.hpp:225
DataBlockAccessBits d_data_blocks_access_bits[3]
The data blocks access bits.
Definition: mifareaccessinfo.hpp:232
bool operator==(SectorAccessBits a)
Definition: mifareaccessinfo.hpp:209
Sector trailer block access bits structure.
Definition: mifareaccessinfo.hpp:146
static void * getItem(void *arrayPtr, int i)
Definition: mifareaccessinfo.hpp:158
SectorTrailerAccessBits()
Constructor.
Definition: mifareaccessinfo.hpp:153
static void setItem(void *arrayPtr, const SectorTrailerAccessBits *item, int i)
Definition: mifareaccessinfo.hpp:163