diff --git a/test/Makefile.am b/test/Makefile.am index 526cfcf..5cce4c6 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -12,6 +12,7 @@ TESTS = run-test.sh TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" noinst_LTLIBRARIES = \ + mifare_desfire_auto_authenticate.la \ test_mad.la \ test_mifare_application.la \ test_mifare_classic.la \ @@ -26,6 +27,9 @@ noinst_LTLIBRARIES = \ AM_LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined +mifare_desfire_auto_authenticate_la_SOURCES = mifare_desfire_auto_authenticate.c \ + mifare_desfire_auto_authenticate.h + test_mad_la_SOURCES = test_mad.c test_mad_la_LIBADD = $(top_builddir)/libfreefare/libfreefare.la @@ -47,7 +51,8 @@ test_mifare_classic_create_trailer_block_la_LIBADD = $(top_builddir)/libfreefare test_mifare_desfire_la_SOURCES = test_mifare_desfire.c \ mifare_desfire_fixture.c \ mifare_desfire_fixture.h -test_mifare_desfire_la_LIBADD = $(top_builddir)/libfreefare/libfreefare.la -lutil +test_mifare_desfire_la_LIBADD = $(top_builddir)/libfreefare/libfreefare.la \ + mifare_desfire_auto_authenticate.lo test_mifare_desfire_aid_la_SOURCES = test_mifare_desfire_aid.c test_mifare_desfire_aid_la_LIBADD = $(top_builddir)/libfreefare/libfreefare.la diff --git a/test/mifare_desfire_auto_authenticate.c b/test/mifare_desfire_auto_authenticate.c new file mode 100644 index 0000000..35b2a00 --- /dev/null +++ b/test/mifare_desfire_auto_authenticate.c @@ -0,0 +1,61 @@ +/*- + * 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$ + */ + +#include + +#include + +#include "mifare_desfire_auto_authenticate.h" + +uint8_t key_data_null[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +uint8_t key_data_des[8] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' }; +uint8_t key_data_3des[16] = { 'C', 'a', 'r', 'd', ' ', 'M', 'a', 's', 't', 'e', 'r', ' ', 'K', 'e', 'y', '!' }; + +void +mifare_desfire_auto_authenticate (MifareTag tag, uint8_t key_no) +{ + /* Determine which key is currently the master one */ + uint8_t key_version; + int res = mifare_desfire_get_key_version (tag, key_no, &key_version); + cut_assert_equal_int (0, res, cut_message ("mifare_desfire_get_key_version()")); + + MifareDESFireKey key; + + switch (key_version) { + case 0x00: + key = mifare_desfire_des_key_new_with_version (key_data_null); + break; + case 0xAA: + key = mifare_desfire_des_key_new_with_version (key_data_des); + break; + case 0xC7: + key = mifare_desfire_3des_key_new_with_version (key_data_3des); + break; + default: + cut_fail ("Unknown master key."); + } + + cut_assert_not_null (key, cut_message ("Cannot allocate key")); + + /* Authenticate with this key */ + res = mifare_desfire_authenticate (tag, key_no, key); + cut_assert_equal_int (0, res, cut_message ("mifare_desfire_authenticate()")); + + mifare_desfire_key_free (key); +} diff --git a/test/mifare_desfire_auto_authenticate.h b/test/mifare_desfire_auto_authenticate.h new file mode 100644 index 0000000..5bec992 --- /dev/null +++ b/test/mifare_desfire_auto_authenticate.h @@ -0,0 +1,29 @@ +/*- + * 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$ + */ + +#ifndef _MIFARE_DESFIRE_AUTO_AUTHENTICATE_H +#define _MIFARE_DESFIRE_AUTO_AUTHENTICATE_H + +extern uint8_t key_data_null[8]; +extern uint8_t key_data_des[8]; +extern uint8_t key_data_3des[16]; + +void mifare_desfire_auto_authenticate (MifareTag tag, uint8_t key_no); + +#endif diff --git a/test/test_mifare_desfire.c b/test/test_mifare_desfire.c index 40b5912..cd85d44 100644 --- a/test/test_mifare_desfire.c +++ b/test/test_mifare_desfire.c @@ -26,10 +26,7 @@ #include "freefare_internal.h" #include "mifare_desfire_fixture.h" - -uint8_t key_data_null[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -uint8_t key_data_des[8] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' }; -uint8_t key_data_3des[16] = { 'C', 'a', 'r', 'd', ' ', 'M', 'a', 's', 't', 'e', 'r', ' ', 'K', 'e', 'y', '!' }; +#include "mifare_desfire_auto_authenticate.h" #define cut_assert_success(last_command) \ do { \ @@ -52,34 +49,7 @@ test_mifare_desfire (void) res = mifare_desfire_get_version (tag, &version_info); cut_assert_success ("mifare_desfire_get_version()"); - /* Determine which key is currently the master one */ - uint8_t key_version; - res = mifare_desfire_get_key_version (tag, 0, &key_version); - cut_assert_success ("mifare_desfire_get_key_version()"); - - MifareDESFireKey key; - - switch (key_version) { - case 0x00: - key = mifare_desfire_des_key_new_with_version (key_data_null); - break; - case 0xAA: - key = mifare_desfire_des_key_new_with_version (key_data_des); - break; - case 0xC7: - key = mifare_desfire_3des_key_new_with_version (key_data_3des); - break; - default: - cut_fail ("Unknown master key."); - } - - cut_assert_not_null (key, cut_message ("Cannot allocate key")); - - /* Authenticate with this key */ - res = mifare_desfire_authenticate (tag, 0, key); - cut_assert_success ("mifare_desfire_authenticate()"); - - mifare_desfire_key_free (key); + mifare_desfire_auto_authenticate (tag, 0); /* * This unit test change key settings to more restrictive ones, so reset @@ -89,10 +59,11 @@ test_mifare_desfire (void) cut_assert_success ("mifare_desfire_change_key_settings()"); /* Change master key to DES */ - key = mifare_desfire_des_key_new_with_version (key_data_des); + MifareDESFireKey key = mifare_desfire_des_key_new_with_version (key_data_des); mifare_desfire_change_key (tag, 0, key, NULL); cut_assert_success ("mifare_desfire_change_key()"); + uint8_t key_version; res = mifare_desfire_get_key_version (tag, 0, &key_version); cut_assert_success ("mifare_desfire_get_key_version()"); cut_assert_equal_int (0xAA, key_version, cut_message ("Wrong key_version value."));