From 74faab36d9ee253fd26e29f0449609441b45c02f Mon Sep 17 00:00:00 2001 From: Chris van Marle Date: Tue, 11 Oct 2022 22:13:37 +0200 Subject: [PATCH] MRTD display AIDs and DGs after auth --- .../nfc/scenes/nfc_scene_passport_read_auth.c | 22 +++++++++++++++++++ lib/nfc/protocols/mrtd.c | 6 +---- lib/nfc/protocols/mrtd.h | 2 +- lib/nfc/protocols/mrtd_helpers.h | 2 ++ 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/applications/main/nfc/scenes/nfc_scene_passport_read_auth.c b/applications/main/nfc/scenes/nfc_scene_passport_read_auth.c index d0498bd95..6ec777a15 100644 --- a/applications/main/nfc/scenes/nfc_scene_passport_read_auth.c +++ b/applications/main/nfc/scenes/nfc_scene_passport_read_auth.c @@ -26,6 +26,28 @@ void nfc_scene_passport_read_auth_on_enter(void* context) { uint32_t unicode_version = mrtd_data->files.EF_COM.unicode_version; string_cat_printf(temp_str, "Unicode version: %d.%d.%d\n", unicode_version/10000, unicode_version/100%100, unicode_version%100); + string_cat_printf(temp_str, "Avail.files: "); + for(size_t i=0; ifiles.EF_COM.tag_list[i]; + const EFFile* file = mrtd_tag_to_file(tag); + if(file->tag) { + if(i > 0) string_cat_printf(temp_str, ", "); + string_cat_printf(temp_str, "%s", file->name); + } + } + string_cat_printf(temp_str, "\n"); + + EF_DIR_contents* EF_DIR = &mrtd_data->files.EF_DIR; + if(EF_DIR->applications_count > 0) { + string_cat_printf(temp_str, "Apps:\n"); + for(uint8_t i=0; iapplications_count; ++i) { + for(uint8_t n=0; napplications[i][n]); + } + string_cat_printf(temp_str, "\n"); + } + } + /* char iso_type = FURI_BIT(data->sak, 5) ? '4' : '3'; //TODO: NFC-B? diff --git a/lib/nfc/protocols/mrtd.c b/lib/nfc/protocols/mrtd.c index 07501abf3..c68d9b7c6 100644 --- a/lib/nfc/protocols/mrtd.c +++ b/lib/nfc/protocols/mrtd.c @@ -164,11 +164,7 @@ bool mrtd_external_authenticate(MrtdApplication* app, uint8_t* cmd_data, size_t bool mrtd_select_file(MrtdApplication* app, EFFile file) { uint8_t data[] = {file.file_id >> 8, file.file_id & 0xff}; FURI_LOG_D(TAG, "Send select EF: %s (0x%04X)", file.name, file.file_id); - uint8_t buffer[100]; - size_t buffer_written = 0; - if(!mrtd_send_apdu(app, 0x00, 0xA4, 0x02, 0x0C, 0x02, data, -1, buffer, &buffer_written)) { - FURI_LOG_D(TAG, "Buffer_written: %d", buffer_written); - hexdump(FuriLogLevelDebug, "Buffer:", buffer, buffer_written); + if(!mrtd_send_apdu(app, 0x00, 0xA4, 0x02, 0x0C, 0x02, data, -1, NULL, NULL)) { FURI_LOG_E(TAG, "Failed select EF 0x%04X", file.file_id); return false; } diff --git a/lib/nfc/protocols/mrtd.h b/lib/nfc/protocols/mrtd.h index 277ad5e0b..1ca5fe4b3 100644 --- a/lib/nfc/protocols/mrtd.h +++ b/lib/nfc/protocols/mrtd.h @@ -16,7 +16,7 @@ typedef struct { typedef struct { MrtdAuthData auth; - bool auth_success; + bool auth_success; //TODO: register (and display) method used BAC/PACE struct { EF_DIR_contents EF_DIR; diff --git a/lib/nfc/protocols/mrtd_helpers.h b/lib/nfc/protocols/mrtd_helpers.h index ee3eec584..c91cf7261 100644 --- a/lib/nfc/protocols/mrtd_helpers.h +++ b/lib/nfc/protocols/mrtd_helpers.h @@ -165,3 +165,5 @@ static __inline uint64_t mrtd_ssc_from_data(const uint8_t* rnd_ic, const uint8_t size_t mrtd_protect_apdu(uint8_t cla, uint8_t ins, uint8_t p1, uint8_t p2, uint8_t lc, const void* data, int16_t le, const uint8_t* key_enc, const uint8_t* key_mac, uint64_t ssc, uint8_t* output); int tlv_number(TlvInfo tlv); + +const EFFile* mrtd_tag_to_file(uint8_t tag);