- Lookup for crypto functions in libcrypto instead of libssl. Some systems
(Mac OS) do not provide libssl, and the other have crypto functions in
libcrypto but libssl is dynamically linked against libcrypto:
% ldd /usr/lib/libssl.so
/usr/lib/libssl.so:
libcrypto.so.6 => /lib/libcrypto.so.6 (0x800c00000)
libc.so.7 => /lib/libc.so.7 (0x800647000)
- Do not explicitly link against libssl (instead of libcrypto BTW): the
autotools magic already does this at some point;
- Improve error message when headers cannot be found.
After trying to tweak gindent so that it does not mess-up my ASCII art, give
and read the help of Vim to setup 'cinoptions' according to my needs
(cino=t0(0). This changeset reindent some bits that where not indented as they
should. A future commit will reindent the switch/case according to my (bad)
taste now that I have setup cindent correctly on my system (cino=t0(0:0).
The code can work with virtually any size of DESFire (since the operating
system embedded in the card handle almost everything), so there is no need for
us to distinguish cards of different sizes.
- 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.
- Allocate large blocks on Mifare Classic 4K in unit tests;
- Constraints sector number in mad_set_aid();
- Fix location of AID storage in mad_set_aid() (wrong variable name and offset, ECOPYPASTETOOFAST);
- New API function mad_sector_reserved();
- Use mad_sector_reserved() to avoid trying to use reserved sectors.
- New API function: tlv_append();
- Added unit tests for tlv_append();
- New internal functions: tlv_record_length(), tlv_next(), tlv_sequence_length();
- Rework tlv_decode() to use new internal functions.
- New mifare_classic_first_sector_block(), mifare_classic_last_sector_block() functions to ease detection of sectors boundaries;
- New unit tests for mifare_classic_first_sector_block() and mifare_classic_last_sector_block();
- Start to update the API for consistently using blocks and not mixing blocks and sectors with mifare_classic_*() functions;
- Update the mifare-classic-format(1) example to handle MIFARE Classic 1k and 4k.
Many thanks to Johann Dantant from SpringCard for giving me MIFARE Classic 4k cards.
- Factorize Mifare*Tag as MifareTag;
- Factorize mifare_*_get_tags() / mifare_*_free_tags() as freefare_get_tags() and freefare_free_tags();
- Add a new freefare_get_tag_type() function to get a tag type;
- Update regression test suite;
- Update example.
While this is a major change that basically change all the API, programs using libfreefare should be easily modified by replacing any Mifare*Tag variable by a generic MifareTag one, adding a few lines of code to check the target's type using freefare_get_tag_type(), and changing any call to mifare_*_get_tags() / mifare_*_free_tags() by the generic freefare_get_tags() and freefare_free_tags() functions.