logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

mifare_classic_connect, mifare_classic_disconnect, mifare_classic_authenticate, mifare_classic_read,

Authors

       Romain Tartiere <romain@blogreen.org>
       Romuald Conty <romuald@libnfc.org>

Debian                                           March 30, 2010                                MIFARE_CLASSIC(3)

Description

       The  mifare_classic_*()  set of functions allow manipulation of both Mifare Classic 1k and Mifare Classic
       4k cards.

       A  given  tag   is   activated   using   mifare_classic_connect(),   deactivation   is   performed   with
       mifare_classic_disconnect().

       After  a  successful  connection,  an  authentication  for  a  block using a key of type key_type (either
       MFC_KEY_A or MFC_KEY_B) using mifare_classic_authenticate() is required for further operation.

       Once successfuly authenticated, data of a block can be read using mifare_classic_read() and written using
       mifare_classic_write().

       Value-blocks can be easily accessed using the mifare_classic_read_value() and mifare_classic_init_value()
       functions.  Additional  functions  are  available  for  such   blocks:   mifare_classic_increment()   and
       mifare_classic_decrement() increment or decrement the value of the provided block by amount and store the
       result  in  the  target's internal data register.  The value in this register can also be loaded with the
       value from another block using mifare_classic_restore().  Writing back the value of the target's internal
       data register to a block is requested using mifare_classic_transfer().

       Permissions for a data block can be fetched using mifare_classic_get_data_block_permission().  The access
       permission to be checkf for key key_type is one of MCAB_R, MCAB_W, MCAB_IorMCAB_D;  respectively  for
       read, write, increment and decrement permissions.

       mifare_classic_get_trailer_block_permission()  acts  like  mifare_classic_get_data_block_permission() but
       the    available    permissions    are     MCAB_READ_KEYA,     MCAB_READ_KEYB,     MCAB_READ_ACCESS_BITS,
       MCAB_WRITE_ACCESS_BITS, MCAB_READ_KEYBandMCAB_WRITE_KEYB.

       A whole sector can be reset to factory defaults using mifare_classic_format_sector().

       The mifare_classic_trailer_block() is a convenience function for building a trailer block block given a A
       key key_a; access bits for the blocks of the sector ab_0, ab_1andab_2; and a B key key_b.

       The mifare_classic_block_sector(), function returns the number of the sector holding block.

       The               mifare_classic_sector_first_block(),               mifare_classic_sector_block_count(),
       mifare_classic_sector_last_block() or the complement of the  mifare_classic_block_sector()  function  and
       return various block-level information about the provided sector.

Library

       Mifare card manipulation library (libfreefare, -lfreefare)

Name

       mifare_classic_connect,   mifare_classic_disconnect,   mifare_classic_authenticate,  mifare_classic_read,
       mifare_classic_init_value,  mifare_classic_read_value,  mifare_classic_write,   mifare_classic_increment,
       mifare_classic_decrement,                 mifare_classic_restore,                mifare_classic_transfer,
       mifare_classic_get_trailer_block_permission,                    mifare_classic_get_data_block_permission,
       mifare_classic_format_sector,          mifare_classic_trailer_block,         mifare_classic_block_sector,
       mifare_classic_sector_first_block, mifare_classic_sector_block_count, mifare_classic_sector_last_block  —
       Mifare Classic Manipulation Functions

Return Values

       Unless  stated  otherwise,  all  functions  return a value greater than or equal to 0 on success or -1 on
       failure.

See Also

freefare(3), mad(3)

Synopsis

#include<freefare.h>intmifare_classic_connect(MifareTagtag);

       intmifare_classic_disconnect(MifareTagtag);

       intmifare_classic_authenticate(MifareTagtag,       constMifareClassicBlockNumberblock,
           constMifareClassicKeykey, constMifareClassicKeyTypekey_type);

       intmifare_classic_read(MifareTagtag, constMifareClassicBlockNumberblock, MifareClassicBlock*data);

       intmifare_classic_init_value(MifareTagtag,  constMifareClassicBlockNumberblock,  constint32_tvalue,
           constMifareClassicBlockNumberadr);

       intmifare_classic_read_value(MifareTagtag,   constMifareClassicBlockNumberblock,   int32_t*value,
           MifareClassicBlockNumber*adr);

       intmifare_classic_write(MifareTagtag, constMifareClassicBlockNumberblock, constMifareClassicBlockdata);

       intmifare_classic_increment(MifareTagtag, constMifareClassicBlockNumberblock, constuint32_tamount);

       intmifare_classic_decrement(MifareTagtag, constMifareClassicBlockNumberblock, constuint32_tamount);

       intmifare_classic_restore(MifareTagtag, constMifareClassicBlockNumberblock);

       intmifare_classic_transfer(MifareTagtag, constMifareClassicBlockNumberblock);

       intmifare_classic_get_trailer_block_permission(MifareTagtag,   constMifareClassicBlockNumberblock,
           constuint16_tpermission, constMifareClassicKeyTypekey_type);

       intmifare_classic_get_data_block_permission(MifareTagtag,    constMifareClassicBlockNumberblock,
           constunsignedcharpermission, constMifareClassicKeyTypekey_type);

       intmifare_classic_format_sector(MifareTagtag, constMifareClassicSectorNumbersector);

       voidmifare_classic_trailer_block(MifareClassicBlock*block, constMifareClassicKeykey_a, constuint8_tab_0,
           constuint8_tab_1,   constuint8_tab_2,   constuint8_tab_tb,   constuint8_tgpb,
           constMifareClassicKeykey_b);

       MifareClassicSectorNumbermifare_classic_block_sector(MifareClassicBlockNumberblock);

       MifareClassicBlockNumbermifare_classic_sector_first_block(MifareClassicSectorNumbersector);

       size_tmifare_classic_sector_block_count(MifareClassicSectorNumbersector);

       MifareClassicBlockNumbermifare_classic_sector_last_block(MifareClassicSectorNumbersector);

See Also