.\" Copyright (C) 2010 Romain Tartiere .\" .\" This program is free software: you can redistribute it and/or modify it .\" under the terms of the GNU Lesser General Public License as published by the .\" Free Software Foundation, either version 3 of the License, or (at your .\" option) any later version. .\" .\" This program 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. .\" .\" You should have received a copy of the GNU Lesser General Public License .\" along with this program. If not, see .\" .\" $Id$ .\" .Dd March 30, 2010 .Dt MAD 3 .Os .\" _ _ .\" | \ | | __ _ _ __ ___ ___ .\" | \| |/ _` | '_ ` _ \ / _ \ .\" | |\ | (_| | | | | | | __/ .\" |_| \_|\__,_|_| |_| |_|\___| .\" .Sh NAME .Nm mad_new , .Nm mad_read , .Nm mad_write , .Nm mad_get_version , .Nm mad_set_version , .Nm mad_get_card_publisher_sector , .Nm mad_set_card_publisher_sector , .Nm mad_get_aid , .Nm mad_set_aid , .Nm mad_free , .Nd "Mifare Application Directory (MAD) Manipulation Functions" .\" _ _ _ .\" | | (_) |__ _ __ __ _ _ __ _ _ .\" | | | | '_ \| '__/ _` | '__| | | | .\" | |___| | |_) | | | (_| | | | |_| | .\" |_____|_|_.__/|_| \__,_|_| \__, | .\" |___/ .Sh LIBRARY Mifare card manipulation library (libfreefare, \-lfreefare) .\" ____ _ .\" / ___| _ _ _ __ ___ _ __ ___(_)___ .\" \___ \| | | | '_ \ / _ \| '_ \/ __| / __| .\" ___) | |_| | | | | (_) | |_) \__ \ \__ \ .\" |____/ \__, |_| |_|\___/| .__/|___/_|___/ .\" |___/ |_| .Sh SYNOPSIS .In freefare.h .Ft "Mad" .Fn mad_new "uint8_t version" .Ft "Mad" .Fn mad_read "MifareTag tag" .Ft "int" .Fn mad_write "MifareTag tag" "Mad mad" "MifareClassicKey key_b_sector_00" "MifareClassicKey key_b_sector_10" .Ft "int" .Fn mad_get_version "Mad mad" .Ft "void" .Fn mad_set_version "Mad mad" "uint8_t version" .Ft "MifareClassicSectorNumber" .Fn mad_get_card_publisher_sector "Mad mad" .Ft "int" .Fn mad_set_card_publisher_sector "Mad mad" "MifareClassicSectorNumber cps" .Ft "int" .Fn mad_get_aid "Mad mad" "MifareClassicSectorNumber sector" "MadAid *aid" .Ft "int" .Fn mad_set_aid "Mad mad" "MifareClassicSectorNumber sector" "MadAid aid" .Ft "void" .Fn mad_free "Mad mad" .\" ____ _ _ _ .\" | _ \ ___ ___ ___ _ __(_)_ __ | |_(_) ___ _ __ .\" | | | |/ _ \/ __|/ __| '__| | '_ \| __| |/ _ \| '_ \ .\" | |_| | __/\__ \ (__| | | | |_) | |_| | (_) | | | | .\" |____/ \___||___/\___|_| |_| .__/ \__|_|\___/|_| |_| .\" |_| .Sh DESCRIPTION Mifare Application Directories (MAD) can be easily manipulated using the .Fn mad_* set of functions. .Pp A .Vt mad can be loaded form a Mifare Classic .Vt tag using .Fn mad_read or generated from scratch using .Fn mad_new and providing the .Vt version of the .Vt mad to generate. After using a .Vt mad , the memory can be reclaimed using .Fn mad_free . .Pp A .Vt mad can be written to a Mifare Classic .Vt tag using .Fn mad_write and providing the B keys required for writing to sectors 0, .Vt key_b_sector_00, and the one required for writing to sectors 10, .Vt key_b_sector_10 . When writing a MAD version 1 .Vt mad , the .Vt key_b_sector_10 . .Pp The .Vt version of a MAD .Vt mad can be read using .Fn mad_get_version and changed using .Fn mad_set_version . .Pp The card publisher sector number .Vt cps can be read read using .Fn mad_get_card_publisher_sector and writen using .Fn mad_set_card_publisher_sector . .Pp Sectors allocation in the .Vt mad is handled by the .Fn mad_get_aid and .Fn mad_set_aid functions. These functions fill-in or read the Application Identifier, .Vt aid for the given .Vt sector . .\" ___ _ _ _ _ _ .\" |_ _|_ __ ___ _ __ | | ___ _ __ ___ ___ _ __ | |_ __ _| |_(_) ___ _ __ _ __ ___ | |_ ___ ___ .\" | || '_ ` _ \| '_ \| |/ _ \ '_ ` _ \ / _ \ '_ \| __/ _` | __| |/ _ \| '_ \ | '_ \ / _ \| __/ _ \/ __| .\" | || | | | | | |_) | | __/ | | | | | __/ | | | || (_| | |_| | (_) | | | | | | | | (_) | || __/\__ \ .\" |___|_| |_| |_| .__/|_|\___|_| |_| |_|\___|_| |_|\__\__,_|\__|_|\___/|_| |_| |_| |_|\___/ \__\___||___/ .\" |_| .\".Sh IMPLEMENTATION NOTES .\" ____ _ _ .\" | _ \ ___| |_ _ _ _ __ _ __ __ ____ _| |_ _ ___ ___ .\" | |_) / _ \ __| | | | '__| '_ \ \ \ / / _` | | | | |/ _ \/ __| .\" | _ < __/ |_| |_| | | | | | | \ V / (_| | | |_| | __/\__ \ .\" |_| \_\___|\__|\__,_|_| |_| |_| \_/ \__,_|_|\__,_|\___||___/ .\" .Sh RETURN VALUES The .Fn mad_new function return .Va NULL on failure and allocates memory that has to be freed using .Fn mad_free on success. Unless stated otherwise, all other functions return a value greater than or equal to .Va 0 on success or .Va -1 on failure. .\" ____ _ .\" / ___| ___ ___ __ _| |___ ___ .\" \___ \ / _ \/ _ \ / _` | / __|/ _ \ .\" ___) | __/ __/ | (_| | \__ \ (_) | .\" |____/ \___|\___| \__,_|_|___/\___/ .\" .Sh SEE ALSO .Xr freefare 3 , .Xr mifare_application 3 , .Xr mifare_classic 3 .\" _ _ _ .\" / \ _ _| |_| |__ ___ _ __ ___ .\" / _ \| | | | __| '_ \ / _ \| '__/ __| .\" / ___ \ |_| | |_| | | | (_) | | \__ \ .\" /_/ \_\__,_|\__|_| |_|\___/|_| |___/ .\" .Sh AUTHORS .An Romain Tartiere Aq romain@blogreen.org .An Romuald Conty Aq romuald@libnfc.org