Refactoring Blocks vs. Sectors.
- mifare_classic_format_sector() now wants a sector instead of a block (the name was really disturbing); - New public API functions for Block <=> Sector conversions.
This commit is contained in:
parent
cc5de33a56
commit
163ce56cc0
9 changed files with 62 additions and 48 deletions
|
|
@ -93,6 +93,11 @@ int mifare_classic_format_sector (MifareTag tag, const MifareClassicBlockNumbe
|
|||
|
||||
void mifare_classic_trailer_block (MifareClassicBlock *block, const MifareClassicKey key_a, uint8_t ab_0, uint8_t ab_1, uint8_t ab_2, uint8_t ab_tb, const uint8_t gpb, const MifareClassicKey key_b);
|
||||
|
||||
MifareSectorNumber mifare_classic_block_sector (MifareClassicBlockNumber block);
|
||||
MifareClassicBlockNumber mifare_classic_sector_first_block (MifareSectorNumber sector);
|
||||
size_t mifare_classic_sector_block_count (MifareSectorNumber sector);
|
||||
MifareClassicBlockNumber mifare_classic_sector_last_block (MifareSectorNumber sector);
|
||||
|
||||
#define C_000 0
|
||||
#define C_001 1
|
||||
#define C_010 2
|
||||
|
|
|
|||
|
|
@ -50,8 +50,6 @@ MifareTag mifare_ultralight_tag_new (void);
|
|||
void mifare_ultralight_tag_free (MifareTag tag);
|
||||
uint8_t sector_0x00_crc8 (Mad mad);
|
||||
uint8_t sector_0x10_crc8 (Mad mad);
|
||||
MifareClassicBlockNumber mifare_classic_first_sector_block (MifareClassicBlockNumber block);
|
||||
MifareClassicBlockNumber mifare_classic_last_sector_block (MifareClassicBlockNumber block);
|
||||
|
||||
#define MIFARE_ULTRALIGHT_PAGE_COUNT 16
|
||||
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ Mifare card manipulation library (libfreefare, \-lfreefare)
|
|||
.Ft int
|
||||
.Fn mifare_classic_get_data_block_permission "MifareTag tag" "const MifareClassicBlockNumber block" "const unsigned char permission" "const MifareClassicKeyType key_type"
|
||||
.Ft int
|
||||
.Fn mifare_classic_format_sector "MifareTag tag" "const MifareClassicBlockNumber block"
|
||||
.Fn mifare_classic_format_sector "MifareTag tag" "const MifareSectorNumber sector"
|
||||
.Ft void
|
||||
.Fn mifare_classic_trailer_block "MifareClassicBlock *block" "const MifareClassicKey key_a" "const uint8_t ab_0" "const uint8_t ab_1" "const uint8_t ab_2" "const uint8_t ab_tb" "const uint8_t gpb" "const MifareClassicKey key_b"
|
||||
.\" ____ _ _ _
|
||||
|
|
@ -181,10 +181,7 @@ are
|
|||
.Ar MCAB_WRITE_KEYB .
|
||||
.Pp
|
||||
A whole sector can be reset to factory defaults using
|
||||
.Fn mifare_classic_format_sector
|
||||
and providing any
|
||||
.Vt block
|
||||
in the sector.
|
||||
.Fn mifare_classic_format_sector .
|
||||
.Pp
|
||||
The
|
||||
.Fn mifare_classic_trailer_block
|
||||
|
|
|
|||
|
|
@ -521,7 +521,7 @@ get_block_access_bits (MifareTag tag, const MifareClassicBlockNumber block, Mifa
|
|||
|
||||
uint16_t sector_access_bits, sector_access_bits_;
|
||||
|
||||
MifareClassicBlockNumber trailer = mifare_classic_last_sector_block (block);
|
||||
MifareClassicBlockNumber trailer = mifare_classic_sector_last_block (mifare_classic_block_sector (block));
|
||||
|
||||
/*
|
||||
* The trailer block contains access bits for the whole sector in a 3 bytes
|
||||
|
|
@ -632,10 +632,10 @@ mifare_classic_get_data_block_permission (MifareTag tag, const MifareClassicBloc
|
|||
* Reset a MIFARE target sector to factory default.
|
||||
*/
|
||||
int
|
||||
mifare_classic_format_sector (MifareTag tag, const MifareClassicBlockNumber block)
|
||||
mifare_classic_format_sector (MifareTag tag, const MifareSectorNumber sector)
|
||||
{
|
||||
MifareClassicBlockNumber first_sector_block = mifare_classic_first_sector_block (block);
|
||||
MifareClassicBlockNumber last_sector_block = mifare_classic_last_sector_block (block);
|
||||
MifareClassicBlockNumber first_sector_block = mifare_classic_sector_first_block (sector);
|
||||
MifareClassicBlockNumber last_sector_block = mifare_classic_sector_last_block (sector);
|
||||
|
||||
/*
|
||||
* Check that the current key allow us to rewrite data and trailer blocks.
|
||||
|
|
@ -679,39 +679,51 @@ mifare_classic_format_sector (MifareTag tag, const MifareClassicBlockNumber bloc
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the sector's first block number in the provided block's sector.
|
||||
*/
|
||||
MifareClassicBlockNumber
|
||||
mifare_classic_first_sector_block (MifareClassicBlockNumber block)
|
||||
MifareSectorNumber
|
||||
mifare_classic_block_sector (MifareClassicBlockNumber block)
|
||||
{
|
||||
int res;
|
||||
if (block < 128) {
|
||||
res = (block / 4) * 4;
|
||||
} else {
|
||||
res = ((block - 128) / 16) * 16 + 128;
|
||||
}
|
||||
MifareSectorNumber res;
|
||||
|
||||
if (block < 32 * 4)
|
||||
res = block / 4;
|
||||
else
|
||||
res = 32 + ( (block - (32 * 4)) / 16 );
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the sector's last block number (aka trailer block) in the provided
|
||||
* block's sector.
|
||||
* Get the sector's first block number
|
||||
*/
|
||||
MifareClassicBlockNumber
|
||||
mifare_classic_last_sector_block (MifareClassicBlockNumber block)
|
||||
mifare_classic_sector_first_block (MifareSectorNumber sector)
|
||||
{
|
||||
int res;
|
||||
if (block < 128) {
|
||||
res = (block / 4) * 4 + 3;
|
||||
if (sector < 32) {
|
||||
res = sector * 4;
|
||||
} else {
|
||||
res = ((block - 128) / 16) * 16 + 15 + 128;
|
||||
res = 32 * 4 + (sector - 32) * 16;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
size_t
|
||||
mifare_classic_sector_block_count (MifareSectorNumber sector)
|
||||
{
|
||||
return (sector < 32) ? 4 : 16 ;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the sector's last block number (aka trailer block)
|
||||
*/
|
||||
MifareClassicBlockNumber
|
||||
mifare_classic_sector_last_block (MifareSectorNumber sector)
|
||||
{
|
||||
return mifare_classic_sector_first_block (sector) +
|
||||
mifare_classic_sector_block_count (sector) - 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Generates a MIFARE trailer block.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue