diff --git a/libfreefare/mifare_desfire.c b/libfreefare/mifare_desfire.c index 860aeb6..87f8790 100644 --- a/libfreefare/mifare_desfire.c +++ b/libfreefare/mifare_desfire.c @@ -574,9 +574,14 @@ mifare_desfire_get_key_version (MifareTag tag, uint8_t key_no, uint8_t *version) BUFFER_INIT (res, 2 + CMAC_LENGTH); - DESFIRE_TRANSCEIVE (tag, cmd, res); + uint8_t *p = mifare_cryto_preprocess_data (tag, cmd, &__cmd_n, 0, MDCM_PLAIN | CMAC_COMMAND); - *version = res[0]; + DESFIRE_TRANSCEIVE2 (tag, p, __cmd_n, res); + + ssize_t sn = __res_n; + p = mifare_cryto_postprocess_data (tag, res, &sn, MDCM_PLAIN | CMAC_COMMAND | CMAC_VERIFY); + + *version = p[0]; return 0; } diff --git a/test/test_mifare_desfire_ev1_aes.c b/test/test_mifare_desfire_ev1_aes.c index 638cf9b..7123122 100644 --- a/test/test_mifare_desfire_ev1_aes.c +++ b/test/test_mifare_desfire_ev1_aes.c @@ -65,11 +65,6 @@ test_mifare_desfire_ev1_aes (void) 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 (key_data_aes_version, key_version, cut_message ("Wrong key_version value.")); - res = mifare_desfire_authenticate_aes (tag, 0, key); cut_assert_success ("mifare_desfire_authenticate_aes()"); mifare_desfire_key_free (key); @@ -83,6 +78,19 @@ test_mifare_desfire_ev1_aes (void) res = mifare_desfire_select_application (tag, NULL); cut_assert_success ("mifare_desfire_select_application()"); + res = mifare_desfire_authenticate_aes (tag, 0, key); + cut_assert_success ("mifare_desfire_authenticate_aes()"); + mifare_desfire_key_free (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 (key_data_aes_version, key_version, cut_message ("Wrong key_version value.")); + + uint32_t size; + res = mifare_desfire_free_mem (tag, &size); + cut_assert_success ("mifare_desfire_free_mem()"); + MifareDESFireAID aid_a = mifare_desfire_aid_new (0x00AAAAAA); cut_assert_not_null (aid_a, cut_message ("Cannot allocate AID")); res = mifare_desfire_create_application (tag, aid_a, 0xFF, 0);