M5Unit-NFC 0.0.3 git rev:59f5362
Loading...
Searching...
No Matches
mifare.hpp File Reference

MIFARE definitions. More...

#include <cstdint>
#include <array>

Go to the source code of this file.

Namespaces

namespace  m5
 Top level namespace of M5stack.
 
namespace  mifare
 For MIFARE.
 
namespace  classic
 For MIFARE classic.
 
namespace  desfire
 For MIFARE DESFire.
 
namespace  plus
 For MIFARE Plus.
 

Typedefs

using m5::nfc::a::mifare::classic::Key = std::array<uint8_t, 6>
 MIFARE classic Key.
 
using m5::nfc::a::mifare::plus::AESKey = std::array<uint8_t, 16>
 MIFARE Plus SL2/3 Key (AES)
 

Functions

constexpr bool m5::nfc::a::mifare::classic::can_value_block_permission (const uint8_t permission)
 Can this permission be used as a value block?
 
constexpr bool m5::nfc::a::mifare::classic::is_sector_trailer_block (const uint16_t block)
 Is this block a sector trailer?
 
constexpr uint16_t m5::nfc::a::mifare::classic::get_sector_trailer_block (const uint16_t block)
 Obtains the block address of the sector to which it belongs from the block address.
 
constexpr uint16_t m5::nfc::a::mifare::classic::get_sector (const uint16_t block)
 Obtains the sector to which the block belongs from the block address.
 
constexpr uint8_t m5::nfc::a::mifare::classic::get_permission_offset (const uint16_t block)
 Get the offset in the permissions of this block.
 
constexpr uint16_t m5::nfc::a::mifare::classic::get_sector_trailer_block_from_sector (const uint16_t sector)
 Obtains the block address of the sector trailer from sector.
 
bool m5::nfc::a::mifare::classic::decode_value_block (int32_t &value, uint8_t &addr, const uint8_t buf[16])
 Decode the value of value block.
 
const uint8_t * m5::nfc::a::mifare::classic::encode_value_block (uint8_t buf[16], const int32_t value, const uint8_t addr)
 Encode the value of value block.
 
bool m5::nfc::a::mifare::classic::encode_access_bits (uint8_t abits[3], const uint8_t p0, const uint8_t p1, const uint8_t p2, const uint8_t p3)
 Encode access bits from permissions.
 
bool m5::nfc::a::mifare::classic::encode_access_bits (uint8_t abits[3], const uint8_t permissions[4])
 Encode access bits from permissions.
 
bool m5::nfc::a::mifare::classic::decode_access_bits (uint8_t permissions[4], const uint8_t ab0, const uint8_t ab1, const uint8_t ab2)
 Decode access bits to permissions.
 
bool m5::nfc::a::mifare::classic::decode_access_bits (uint8_t permissions[4], const uint8_t abits[3])
 Decode access bits to permissions.
 

Variables

constexpr uint16_t m5::nfc::a::mifare::classic::MIFARE_CLASSIC_MAX_TX_LEN {32}
 
constexpr uint16_t m5::nfc::a::mifare::classic::MIFARE_CLASSIC_MAX_RX_LEN {32}
 
constexpr uint16_t m5::nfc::a::mifare::classic::MIFARE_CLASSIC_MAX_TX_WITH_CRC {MIFARE_CLASSIC_MAX_TX_LEN + 2}
 
constexpr uint16_t m5::nfc::a::mifare::classic::MIFARE_CLASSIC_MAX_RX_WITH_CRC {MIFARE_CLASSIC_MAX_RX_LEN + 2}
 
constexpr uint16_t m5::nfc::a::mifare::classic::MIFARE_CLASSIC_MAX_BITSTREAM_LEN {(9 * MIFARE_CLASSIC_MAX_TX_WITH_CRC + 7) / 8}
 
constexpr Key m5::nfc::a::mifare::classic::DEFAULT_KEY {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}
 Default key for MIFARE classic.
 
constexpr uint32_t m5::nfc::a::mifare::desfire::DESFIRE_NDEF_APP_ID {0x000001}
 DESFire NDEF application AID.
 
constexpr uint8_t m5::nfc::a::mifare::desfire::DESFIRE_CC_FILE_NO {0x01}
 AN11004 default CC file number.
 
constexpr uint8_t m5::nfc::a::mifare::desfire::DESFIRE_NDEF_FILE_NO {0x02}
 AN11004 default NDEF file number.
 
constexpr uint8_t m5::nfc::a::mifare::desfire::DESFIRE_NDEF_AID [] = {0x00, 0x00, 0x01}
 DESFire NDEF AID (3 bytes)
 
constexpr uint8_t m5::nfc::a::mifare::desfire::DESFIRE_LIGHT_DF_NAME []
 
constexpr uint16_t m5::nfc::a::mifare::desfire::DESFIRE_LIGHT_DF_FID {0xDF01}
 DESFire Light default DF FID.
 
constexpr uint8_t m5::nfc::a::mifare::desfire::DESFIRE_LIGHT_CC_FILE_NO {0x00}
 DESFire Light CC file number.
 
constexpr uint8_t m5::nfc::a::mifare::desfire::DESFIRE_LIGHT_NDEF_FILE_NO {0x04}
 DESFire Light NDEF file number.
 
constexpr uint16_t m5::nfc::a::mifare::desfire::DESFIRE_LIGHT_CC_FILE_ID {0xEF00}
 DESFire Light CC file ID.
 
constexpr uint16_t m5::nfc::a::mifare::desfire::DESFIRE_LIGHT_NDEF_FILE_ID {0xEF04}
 DESFire Light NDEF file ID.
 
constexpr uint16_t m5::nfc::a::mifare::desfire::DESFIRE_LIGHT_NDEF_FILE_SIZE {256}
 DESFire Light NDEF file size (bytes)
 
constexpr uint8_t m5::nfc::a::mifare::desfire::DESFIRE_DEFAULT_KEY [16] {}
 
constexpr AESKey m5::nfc::a::mifare::plus::DEFAULT_KEY {}
 Default key for MIFARE Plus.
 
constexpr AESKey m5::nfc::a::mifare::plus::DEFAULT_FF_KEY
 Default AES sector key (as classic DEFAULT_KEY)
 
Historical bytes for identity type
constexpr std::array< uint8_t, 7 > m5::nfc::a::mifare::historical_bytes_mifare_plus_s = {0xC1, 0x05, 0x2F, 0x2F, 0x00, 0x35, 0xC7}
 
constexpr std::array< uint8_t, 7 > m5::nfc::a::mifare::historical_bytes_mifare_plus_x_ev = {0xC1, 0x05, 0x2F, 0x2F, 0x01, 0xBC, 0xD6}
 
constexpr std::array< uint8_t, 7 > m5::nfc::a::mifare::historical_bytes_mifare_plus_se0 = {0xC1, 0x05, 0x21, 0x30, 0x00, 0xF6, 0xD1}
 
constexpr std::array< uint8_t, 7 > m5::nfc::a::mifare::historical_bytes_mifare_plus_se1 = {0xC1, 0x05, 0x21, 0x30, 0x10, 0xF6, 0xD1}
 
constexpr std::array< uint8_t, 7 > m5::nfc::a::mifare::historical_bytes_mifare_plus_se2 = {0xC1, 0x05, 0x21, 0x30, 0x00, 0x77, 0xC1}
 
Access bit
constexpr uint8_t m5::nfc::a::mifare::classic::READ_WRITE_BLOCK {0x00}
 Read and write block.
 
constexpr uint8_t m5::nfc::a::mifare::classic::VALUE_BLOCK_NON_RECHARGEABLE {0x01}
 Value block (debit only)
 
constexpr uint8_t m5::nfc::a::mifare::classic::VALUE_BLOCK_RECHARGEABLE {0x06}
 Value block (rechargeable)
 

Access rights

DESFire default key

constexpr int8_t m5::nfc::a::mifare::desfire::access_denied {-1}
 Obtain read permissions from access rights.
 
constexpr int8_t m5::nfc::a::mifare::desfire::access_free {-2}
 Obtain read permissions from access rights.
 
int8_t m5::nfc::a::mifare::desfire::required_read_key_no_from_access_rights (const uint16_t access_rights)
 Obtain read permissions from access rights.
 
int8_t m5::nfc::a::mifare::desfire::required_write_key_no_from_access_rights (const uint16_t access_rights)
 Obtain rite permissions from access rights.
 

Detailed Description

MIFARE definitions.

Function Documentation

◆ can_value_block_permission()

bool m5::nfc::a::mifare::classic::can_value_block_permission ( const uint8_t permission)
inlineconstexpr

Can this permission be used as a value block?

Returns
True if can

◆ decode_access_bits() [1/2]

bool m5::nfc::a::mifare::classic::decode_access_bits ( uint8_t permissions[4],
const uint8_t ab0,
const uint8_t ab1,
const uint8_t ab2 )

Decode access bits to permissions.

Parameters
permissions[4]Output buffer at least 4 bytes
ab01st byte of the access bits
ab12nd byte of the access bits
ab23rd byte of the access bits
Returns
True if successful
Note
permissions[0] block 0
permissions[1] block 1
permissions[2] block 2
permissions[3] sector trailer
Warning
Return values should always be checked

◆ decode_access_bits() [2/2]

bool m5::nfc::a::mifare::classic::decode_access_bits ( uint8_t permissions[4],
const uint8_t abits[3] )
inline

Decode access bits to permissions.

Parameters
permissions[4]Output buffer at least 4 bytes
abits[3]Array of the access bits
Returns
True if successful
Warning
Return values should always be checked

◆ decode_value_block()

bool m5::nfc::a::mifare::classic::decode_value_block ( int32_t & value,
uint8_t & addr,
const uint8_t buf[16] )

Decode the value of value block.

Parameters
[out]valueValue
[out]addrBlock address
bufData of block(16 bytes)
Returns
True if successful

◆ encode_access_bits() [1/2]

bool m5::nfc::a::mifare::classic::encode_access_bits ( uint8_t abits[3],
const uint8_t p0,
const uint8_t p1,
const uint8_t p2,
const uint8_t p3 )

Encode access bits from permissions.

Parameters
abits[3]Output buffer at least 3 bytes
p0permissions for block 0
p1permissions for block 1
p2permissions for block 2
p3permissions for sector tarailer
Returns
True if successful
Warning
Return values should always be checked
Writing incorrect access bits may make the sector inaccessible!

◆ encode_access_bits() [2/2]

bool m5::nfc::a::mifare::classic::encode_access_bits ( uint8_t abits[3],
const uint8_t permissions[4] )
inline

Encode access bits from permissions.

Parameters
abits[3]Output buffer at least 3 bytes
permissions[4]Array of the permissions. [0];block0 ... [3]:sector trailer
Returns
True if successful
Warning
Return values should always be checked
Writing incorrect access bits may make the sector inaccessible!

◆ encode_value_block()

const uint8_t * m5::nfc::a::mifare::classic::encode_value_block ( uint8_t buf[16],
const int32_t value,
const uint8_t addr )

Encode the value of value block.

Parameters
[out]bufOutput buffer at least 16 bytes
valueValue
addrBlock address
Returns
Encoded buffer

◆ get_permission_offset()

uint8_t m5::nfc::a::mifare::classic::get_permission_offset ( const uint16_t block)
inlineconstexpr

Get the offset in the permissions of this block.

Returns
Offset (0-3)

◆ get_sector()

uint16_t m5::nfc::a::mifare::classic::get_sector ( const uint16_t block)
inlineconstexpr

Obtains the sector to which the block belongs from the block address.

Returns
Sector no

◆ get_sector_trailer_block()

uint16_t m5::nfc::a::mifare::classic::get_sector_trailer_block ( const uint16_t block)
inlineconstexpr

Obtains the block address of the sector to which it belongs from the block address.

Returns
The sector trailer block address of the block belongs

◆ get_sector_trailer_block_from_sector()

uint16_t m5::nfc::a::mifare::classic::get_sector_trailer_block_from_sector ( const uint16_t sector)
inlineconstexpr

Obtains the block address of the sector trailer from sector.

Parameters
sectorSector no
Returns
The sector trailer block address of the sector

◆ is_sector_trailer_block()

bool m5::nfc::a::mifare::classic::is_sector_trailer_block ( const uint16_t block)
inlineconstexpr

Is this block a sector trailer?

Returns
True if sector trailer

◆ required_read_key_no_from_access_rights()

int8_t m5::nfc::a::mifare::desfire::required_read_key_no_from_access_rights ( const uint16_t access_rights)
inline

Obtain read permissions from access rights.

Parameters
access_rightsAccess rights
Return values
>=0 Key number to use
==access_denied Access denied
==access_free Access free

◆ required_write_key_no_from_access_rights()

int8_t m5::nfc::a::mifare::desfire::required_write_key_no_from_access_rights ( const uint16_t access_rights)
inline

Obtain rite permissions from access rights.

Parameters
access_rightsAccess rights
Return values
>=0 Key number to use
==access_denied Access denied
==access_free Access free

Variable Documentation

◆ access_denied

int8_t m5::nfc::a::mifare::desfire::access_denied {-1}
constexpr

Obtain read permissions from access rights.

Parameters
access_rightsAccess rights
Return values
>=0 Key number to use
==access_denied Access denied
==access_free Access free

◆ access_free

int8_t m5::nfc::a::mifare::desfire::access_free {-2}
constexpr

Obtain read permissions from access rights.

Parameters
access_rightsAccess rights
Return values
>=0 Key number to use
==access_denied Access denied
==access_free Access free

◆ DEFAULT_FF_KEY

AESKey m5::nfc::a::mifare::plus::DEFAULT_FF_KEY
constexpr
Initial value:
= {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}

Default AES sector key (as classic DEFAULT_KEY)

◆ DESFIRE_LIGHT_DF_NAME

uint8_t m5::nfc::a::mifare::desfire::DESFIRE_LIGHT_DF_NAME[]
constexpr
Initial value:
= {
0xA0, 0x00, 0x00, 0x03, 0x96, 0x56, 0x43, 0x41, 0x03, 0xF0, 0x15, 0x40, 0x00, 0x00, 0x00, 0x0B}