]>
cvs.zerfleddert.de Git - proxmark3-svn/blob - common/protocols.c
   6 // ATA55xx shared presets & routines 
   7 uint32_t GetT55xxClockBit(uint32_t clock
) { 
  10                         return T55x7_BITRATE_RF_128
; 
  12                         return T55x7_BITRATE_RF_100
; 
  14                         return T55x7_BITRATE_RF_64
; 
  16                         return T55x7_BITRATE_RF_50
; 
  18                         return T55x7_BITRATE_RF_40
; 
  20                         return T55x7_BITRATE_RF_32
; 
  22                         return T55x7_BITRATE_RF_16
; 
  24                         return T55x7_BITRATE_RF_8
; 
  32 #define prnt PrintAndLog 
  34 // iclass / picopass chip config structures and shared routines 
  36         uint8_t app_limit
;      //[8] 
  37         uint8_t otp
[2];         //[9-10] 
  38         uint8_t block_writelock
;//[11] 
  39         uint8_t chip_config
;    //[12] 
  40         uint8_t mem_config
;     //[13] 
  43 } picopass_conf_block
; 
  47         picopass_conf_block conf
; 
  51         uint8_t app_issuer_area
[8]; 
  54 uint8_t isset(uint8_t val
, uint8_t mask
) { 
  58 uint8_t notset(uint8_t val
, uint8_t mask
) { 
  62 void fuse_config(const picopass_hdr 
*hdr
) { 
  63         uint8_t fuses 
= hdr
->conf
.fuses
; 
  65         if (isset(fuses
,FUSE_FPERS
))prnt("  Mode: Personalization [Programmable]"); 
  66         else prnt("  Mode: Application [Locked]"); 
  68         if (isset(fuses
, FUSE_CODING1
)) 
  72                 if( isset( fuses 
, FUSE_CODING0
)) prnt("Coding: ISO 14443-2 B/ISO 15693"); 
  73                 else prnt("Coding: ISO 14443B only"); 
  75         if( isset (fuses
,FUSE_CRYPT1 
| FUSE_CRYPT0 
)) prnt(" Crypt: Secured page, keys not locked"); 
  76         if( isset (fuses
,FUSE_CRYPT1
) && notset( fuses
, FUSE_CRYPT0 
)) prnt(" Crypt: Secured page, keys not locked"); 
  77         if( notset (fuses
,FUSE_CRYPT1
) && isset( fuses
, FUSE_CRYPT0 
)) prnt(" Crypt: Non secured page"); 
  78         if( notset (fuses
,FUSE_CRYPT1
) && notset( fuses
, FUSE_CRYPT0 
)) prnt(" Crypt: No auth possible. Read only if RA is enabled"); 
  80         if( isset( fuses
, FUSE_RA
)) prnt("    RA: Read access enabled"); 
  81         else prnt("    RA: Read access not enabled"); 
  84 void getMemConfig(uint8_t mem_cfg
, uint8_t chip_cfg
, uint8_t *max_blk
, uint8_t *app_areas
, uint8_t *kb
) { 
  85         // mem-bit 5, mem-bit 7, chip-bit 4: defines chip type 
  86         if(isset(chip_cfg
, 0x10) && notset(mem_cfg
, 0x80) && notset(mem_cfg
, 0x20)) { 
  90         } else if(isset(chip_cfg
, 0x10) && isset(mem_cfg
, 0x80) && notset(mem_cfg
, 0x20)) { 
  93                 *max_blk 
= 255; //16kb 
  94         } else if(notset(chip_cfg
, 0x10) && notset(mem_cfg
, 0x80) && notset(mem_cfg
, 0x20)) { 
  97                 *max_blk 
= 255; //16kb 
  98         } else if(isset(chip_cfg
, 0x10) && isset(mem_cfg
, 0x80) && isset(mem_cfg
, 0x20)) { 
 101                 *max_blk 
= 255; //16kb 
 102         } else if(notset(chip_cfg
, 0x10) && notset(mem_cfg
, 0x80) && isset(mem_cfg
, 0x20)) { 
 105                 *max_blk 
= 255; //16kb 
 113 void mem_app_config(const picopass_hdr 
*hdr
) { 
 114         uint8_t mem 
= hdr
->conf
.mem_config
; 
 115         uint8_t chip 
= hdr
->conf
.chip_config
; 
 116         uint8_t applimit 
= hdr
->conf
.app_limit
; 
 117         if (applimit 
< 6) applimit 
= 26; 
 119         uint8_t app_areas 
= 2; 
 120         uint8_t max_blk 
= 31; 
 121         getMemConfig(mem
, chip
, &max_blk
, &app_areas
, &kb
); 
 122         prnt("   Mem: %u KBits/%u App Areas (%u * 8 bytes) [%02X]", kb
, app_areas
, max_blk
, mem
); 
 123         prnt("   AA1: blocks 06-%02X", applimit
); 
 124         prnt("   AA2: blocks %02X-%02X", applimit
+1, max_blk
); 
 126 void print_picopass_info(const picopass_hdr 
*hdr
) { 
 130 void printIclassDumpInfo(uint8_t* iclass_dump
) { 
 131         print_picopass_info((picopass_hdr 
*) iclass_dump
); 
 136         picopass_hdr hdr = {0x27,0xaf,0x48,0x01,0xf9,0xff,0x12,0xe0,0x12,0xff,0xff,0xff,0x7f,0x1f,0xff,0x3c}; 
 137         prnt("Picopass configuration:"); 
 138         print_picopass_info(&hdr); 
 140 int main(int argc, char *argv[]) {