/* RFIDIOt.py - RFID IO tools for python
 *
 * Adam Laurie <adam@algroup.co.uk>
 * http://rfidiot.org/
 *
 * This code is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This code is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

Copyright (c) 2006, Adam Laurie <adam@algroup.co.uk>
http://www.thebunker.net
http://trifinite.org/trifinite_group_adam.html

q: What is RFIDIOt?
a: A collection of tools and libraries for exploring RFID technology, written 
in python.

q: Why RFIDIOt?
a: I like silly puns. Also, I'm coming at this from an idiot's point of view: 
I know nothing about RFID tags, and even less about python. As such, I felt a 
complete idiot when I started. :)

q: How can I contribute?
a: Send me patches, info, new tools, coffee, money, drugs and/or loose women.

q: What hardware is supported?
a: So far this works with the ACG serial readers. I use the CF Card model, 
but it should also work with the USB version by changing the serial port to 
/dev/ttyUSB0. You can find more details here:

  http://www.acg.de

q: So what exactly is here?
a: 

RFIDIOt.py  		The main RFIDIOt code. Read it for comments on how
                        it is structured.

RFIDIOtconfig.py	Local configuration options.

bruteforce.py 	 	Brute force a login to sector 0 on a standard MIFARE 
			card. This is done using random 48 bit keys, so you 
			have more chance of winning the lottery three times 
			in a row, but what the hell? YOU NEVER KNOW!!! :)

cardselect.py 		Select a card and display it's ID.

eeprom.py 		Display current reader EEPROM settings.

isotype.py		Determine TAG type of ISO 14443 devices.

lfxtype			Determine tag type of 125kHz devices.

lfxread.py		Read data from 125kHz devices.

loginall.py 		Login to every sector using the factory installed 
			transport keys.

mifare.pdf		Slides from a talk that gives some useful info on 
			MIFARE block layout.

readmifare1k.py  	Read every data block on a standard 1K MIFARE card.

writemifare1k.py	Write random data to every block on a 1K MIFARE card.
			This will destroy all current data on the card.
			WARNING:
			If you modify it two write the 4th block in each sector
			you will irreperably lock out the card. This is because
			that block contains the access controls for the sector
			so if you write nonsene to it, that sector becomes
			unreadable.

mrpkey.py		Authenticate and read data from MRP (ICAO 9303 compliant
			Machine Readable Passport).
