LibLogicalAccess
2.5.0
An Open Source RFID Library
|
The Mifare commands class. More...
#include <mifarecommands.hpp>
Public Member Functions | |
MifareCommands () | |
MifareCommands (std::string ct) | |
virtual ByteVector | readSector (int sector, int start_block, std::shared_ptr< MifareKey > keyA, std::shared_ptr< MifareKey > keyB, const MifareAccessInfo::SectorAccessBits &sab, bool readtrailer=false) final |
virtual void | writeSector (int sector, int start_block, const ByteVector &buf, std::shared_ptr< MifareKey > keyA, std::shared_ptr< MifareKey > keyB, const MifareAccessInfo::SectorAccessBits &sab, unsigned char userbyte=0x00, MifareAccessInfo::SectorAccessBits *newsab=nullptr, std::shared_ptr< MifareKey > newkeyA=std::shared_ptr< MifareKey >(), std::shared_ptr< MifareKey > newkeyB=std::shared_ptr< MifareKey >()) final |
virtual ByteVector | readSectors (int start_sector, int stop_sector, int start_block, std::shared_ptr< MifareKey > keyA, std::shared_ptr< MifareKey > keyB, const MifareAccessInfo::SectorAccessBits &sab) final |
virtual void | writeSectors (int start_sector, int stop_sector, int start_block, const ByteVector &buf, std::shared_ptr< MifareKey > keyA, std::shared_ptr< MifareKey > keyB, const MifareAccessInfo::SectorAccessBits &sab, unsigned char userbyte=0x00, MifareAccessInfo::SectorAccessBits *newsab=nullptr, std::shared_ptr< MifareKey > newkeyA=std::shared_ptr< MifareKey >(), std::shared_ptr< MifareKey > newkeyB=std::shared_ptr< MifareKey >()) final |
unsigned int | getSectorFromMAD (long aid, std::shared_ptr< MifareKey > madKeyA) |
Get the sector referenced by the AID from the MAD. | |
void | setSectorToMAD (long aid, unsigned int sector, std::shared_ptr< MifareKey > madKeyA, std::shared_ptr< MifareKey > madKeyB) |
Set the sector referenced by the AID to the MAD. | |
void | authenticate (std::shared_ptr< Location > location, std::shared_ptr< AccessInfo > ai, bool write=false) |
Authenticate on a given location. | |
void | changeKeys (MifareKeyType keytype, std::shared_ptr< MifareKey > key, std::shared_ptr< MifareKey > newkeyA, std::shared_ptr< MifareKey > newkeyB, unsigned int sector, MifareAccessInfo::SectorAccessBits *newsab, unsigned char userbyte=0x00) |
void | changeKeys (std::shared_ptr< MifareKey > newkeyA, std::shared_ptr< MifareKey > newkeyB, unsigned int sector, MifareAccessInfo::SectorAccessBits *newsab, unsigned char userbyte=0x00) |
void | authenticate (MifareKeyType keyType, std::shared_ptr< MifareKey > key, int sector, int block, bool write) |
Authenticate for a targeted block. | |
virtual ByteVector | readBinary (unsigned char blockno, size_t len)=0 |
Read bytes from the card. | |
virtual void | updateBinary (unsigned char blockno, const ByteVector &buf)=0 |
Write bytes to the card. | |
virtual bool | loadKey (unsigned char keyno, MifareKeyType keytype, std::shared_ptr< MifareKey > key, bool vol=false)=0 |
Load a key to the reader. | |
virtual void | loadKey (std::shared_ptr< Location > location, MifareKeyType keytype, std::shared_ptr< MifareKey > key)=0 |
Load a key on a given location. | |
virtual void | authenticate (unsigned char blockno, unsigned char keyno, MifareKeyType keytype)=0 |
Authenticate a block, given a key number. | |
virtual void | authenticate (unsigned char blockno, std::shared_ptr< KeyStorage > key_storage, MifareKeyType keytype)=0 |
Authenticate a block, given a key number. | |
virtual void | increment (uint8_t blockno, uint32_t value)=0 |
virtual void | decrement (uint8_t blockno, uint32_t value)=0 |
bool | writeValueBlock (uint8_t blockno, int32_t value, uint8_t backup_blockno) |
bool | readValueBlock (uint8_t blockno, int32_t &value, uint8_t &backup_block) |
![]() | |
Commands ()=delete | |
Constructor. | |
virtual | ~Commands () |
std::shared_ptr< Chip > | getChip () const override |
Get the chip. | |
virtual void | setChip (std::shared_ptr< Chip > chip) |
Set the chip. | |
std::shared_ptr< ReaderCardAdapter > | getReaderCardAdapter () const override |
Get the reader/card adapter. | |
virtual void | setReaderCardAdapter (std::shared_ptr< ReaderCardAdapter > adapter) |
Set the reader/card adapter. | |
virtual const std::string & | getCmdType () const |
Get the cmd name. | |
virtual void | setCmdType (const std::string &command_type) |
Set the cmd name. | |
![]() | |
virtual | ~ICommands ()=default |
virtual std::shared_ptr< Chip > | getChip () const =0 |
Get the chip. | |
virtual std::shared_ptr< ReaderCardAdapter > | getReaderCardAdapter () const =0 |
Get the reader/card adapter. | |
Static Public Member Functions | |
static unsigned char | calculateMADCrc (const unsigned char *madbuf, size_t madbuflen) |
Calculate the MAD crc. | |
static unsigned int | findReferencedSector (long aid, unsigned char *madbuf, size_t madbuflen) |
Find the referenced sector in the MAD. | |
static MifareKeyType | getKeyType (const MifareAccessInfo::SectorAccessBits &sab, int sector, int block, bool write) |
static unsigned char | getNbBlocks (int sector) |
Get number of data blocks for a sector. | |
static unsigned char | getSectorStartBlock (int sector) |
Get the sector start block. | |
Protected Member Functions | |
std::shared_ptr< MifareChip > | getMifareChip () const |
![]() | |
Commands (std::string commandtype) | |
Constructor. | |
Additional Inherited Members | |
![]() | |
std::shared_ptr< ReaderCardAdapter > | d_readerCardAdapter |
The reader/card adapter. | |
std::weak_ptr< Chip > | d_chip |
The chip. | |
std::string | d_commandtype |
The command type. | |
The Mifare commands class.
|
inline |
|
inlineexplicit |
void logicalaccess::MifareCommands::authenticate | ( | MifareKeyType | keyType, |
std::shared_ptr< MifareKey > | key, | ||
int | sector, | ||
int | block, | ||
bool | write | ||
) |
Authenticate for a targeted block.
keyType | The key type. |
key | The authentication key. |
sector | The sector. |
block | The block. |
write | Write access. |
void logicalaccess::MifareCommands::authenticate | ( | std::shared_ptr< Location > | location, |
std::shared_ptr< AccessInfo > | ai, | ||
bool | write = false |
||
) |
Authenticate on a given location.
location | The location. |
ai | The access infos. |
|
pure virtual |
Authenticate a block, given a key number.
blockno | The block number. |
key_storage | The key storage used for authentication. |
keytype | The key type. |
Implemented in logicalaccess::MifarePlusSL1Commands, logicalaccess::MifarePlusSL1Policy< MifareSL1Impl, MifareClassicImpl >, logicalaccess::MifareOK5553Commands, logicalaccess::MifarePCSCCommands, logicalaccess::MifareSpringCardCommands, and logicalaccess::MifareSTidSTRCommands.
|
pure virtual |
Authenticate a block, given a key number.
blockno | The block number. |
keyno | The key number, previously loaded with Mifare::loadKey(). |
keytype | The key type. |
Implemented in logicalaccess::MifarePlusSL1Commands, logicalaccess::MifarePlusSL1Policy< MifareSL1Impl, MifareClassicImpl >, logicalaccess::MifareOK5553Commands, logicalaccess::MifareCherryCommands, logicalaccess::MifarePCSCCommands, logicalaccess::MifarePlusSpringcardSL1Commands, logicalaccess::MifareSpringCardCommands, logicalaccess::MifareSpringCardCommands, and logicalaccess::MifareSTidSTRCommands.
|
static |
Calculate the MAD crc.
madbuf | The MAD buffer. |
madbuflen | The MAD buffer length. |
void logicalaccess::MifareCommands::changeKeys | ( | MifareKeyType | keytype, |
std::shared_ptr< MifareKey > | key, | ||
std::shared_ptr< MifareKey > | newkeyA, | ||
std::shared_ptr< MifareKey > | newkeyB, | ||
unsigned int | sector, | ||
MifareAccessInfo::SectorAccessBits * | newsab, | ||
unsigned char | userbyte = 0x00 |
||
) |
void logicalaccess::MifareCommands::changeKeys | ( | std::shared_ptr< MifareKey > | newkeyA, |
std::shared_ptr< MifareKey > | newkeyB, | ||
unsigned int | sector, | ||
MifareAccessInfo::SectorAccessBits * | newsab, | ||
unsigned char | userbyte = 0x00 |
||
) |
|
pure virtual |
Decrement (inplace) the value block at address blockno
by value
unit.
This means that this is the equivalent of also calling transfer.
Implemented in logicalaccess::MifarePlusSL1Commands, logicalaccess::MifarePlusSL1Policy< MifareSL1Impl, MifareClassicImpl >, logicalaccess::MifareACR1222LCommands, logicalaccess::MifareCL1356Commands, logicalaccess::MifareOmnikeyXX21Commands, and logicalaccess::MifarePCSCCommands.
|
static |
Find the referenced sector in the MAD.
aid | The application ID. |
madbuf | The MAD buffer. |
madbuflen | The MAD buffer length. |
|
static |
|
protected |
|
static |
Get number of data blocks for a sector.
sector | The sector. |
unsigned int logicalaccess::MifareCommands::getSectorFromMAD | ( | long | aid, |
std::shared_ptr< MifareKey > | madKeyA | ||
) |
Get the sector referenced by the AID from the MAD.
aid | The application ID. |
madKeyA | The MAD key A for read access. |
|
static |
Get the sector start block.
sector | The sector. |
|
pure virtual |
Increment (inplace) the value block at address blockno
.
This means that this is the equivalent of also calling transfer.
Implemented in logicalaccess::MifarePlusSL1Commands, logicalaccess::MifarePlusSL1Policy< MifareSL1Impl, MifareClassicImpl >, logicalaccess::MifareACR1222LCommands, logicalaccess::MifareCL1356Commands, logicalaccess::MifareOmnikeyXX21Commands, and logicalaccess::MifarePCSCCommands.
|
pure virtual |
Load a key on a given location.
location | The location. |
keytype | The mifare key type. |
key | The key. |
Implemented in logicalaccess::MifarePlusSL1Commands, logicalaccess::MifarePlusSL1Policy< MifareSL1Impl, MifareClassicImpl >, logicalaccess::MifareOK5553Commands, logicalaccess::MifarePCSCCommands, logicalaccess::MifareSpringCardCommands, and logicalaccess::MifareSTidSTRCommands.
|
pure virtual |
Load a key to the reader.
keyno | The reader key slot number. Can be anything from 0x00 to 0x1F. |
keytype | The key type. |
key | The key. |
vol | Use volatile memory. |
Implemented in logicalaccess::MifarePlusSL1Commands, logicalaccess::MifarePlusSL1Policy< MifareSL1Impl, MifareClassicImpl >, logicalaccess::MifareOK5553Commands, logicalaccess::MifareCherryCommands, logicalaccess::MifarePCSCCommands, logicalaccess::MifareSCMCommands, logicalaccess::MifareSpringCardCommands, logicalaccess::MifareSpringCardCommands, and logicalaccess::MifareSTidSTRCommands.
|
pure virtual |
Read bytes from the card.
blockno | The block number. |
len | The count of bytes to read. (0 <= len < 16) |
Implemented in logicalaccess::MifarePlusSL1Commands, logicalaccess::MifarePlusSL1Policy< MifareSL1Impl, MifareClassicImpl >, logicalaccess::MifareOK5553Commands, logicalaccess::MifarePCSCCommands, and logicalaccess::MifareSTidSTRCommands.
|
finalvirtual |
|
finalvirtual |
bool logicalaccess::MifareCommands::readValueBlock | ( | uint8_t | blockno, |
int32_t & | value, | ||
uint8_t & | backup_block | ||
) |
Read the value and the address of the backup block from a value-block.
If the block is not a valid value block, return false.
void logicalaccess::MifareCommands::setSectorToMAD | ( | long | aid, |
unsigned int | sector, | ||
std::shared_ptr< MifareKey > | madKeyA, | ||
std::shared_ptr< MifareKey > | madKeyB | ||
) |
Set the sector referenced by the AID to the MAD.
aid | The application ID. |
sector | The sector. |
madKeyA | The MAD key A for read access. |
madKeyB | The MAD key B for write access. |
|
pure virtual |
Write bytes to the card.
blockno | The block number. |
buf | The buffer containing the data. |
buflen | The length of buffer. |
Implemented in logicalaccess::MifarePlusSL1Commands, logicalaccess::MifarePlusSL1Policy< MifareSL1Impl, MifareClassicImpl >, logicalaccess::MifareOK5553Commands, logicalaccess::MifarePCSCCommands, and logicalaccess::MifareSTidSTRCommands.
|
finalvirtual |
|
finalvirtual |
bool logicalaccess::MifareCommands::writeValueBlock | ( | uint8_t | blockno, |
int32_t | value, | ||
uint8_t | backup_blockno | ||
) |
Write a value block, using value
as the numerical value to be written and backup_blockno as the address of the backup block.