diff --git a/applications/main/nfc/scenes/nfc_scene_passport_read.c b/applications/main/nfc/scenes/nfc_scene_passport_read.c index 3f5ce66f8..be8077682 100644 --- a/applications/main/nfc/scenes/nfc_scene_passport_read.c +++ b/applications/main/nfc/scenes/nfc_scene_passport_read.c @@ -11,6 +11,7 @@ void nfc_scene_passport_read_widget_callback(GuiButtonType result, InputType typ void nfc_scene_passport_read_on_enter(void* context) { Nfc* nfc = context; FuriHalNfcDevData* data = &nfc->dev->dev_data.nfc_data; + MrtdData* mrtd_data = &nfc->dev->dev_data.mrtd_data; DOLPHIN_DEED(DolphinDeedNfcReadSuccess); @@ -40,7 +41,11 @@ void nfc_scene_passport_read_on_enter(void* context) { furi_string_cat_printf(temp_str, " %02X", data->uid[i]); } furi_string_cat_printf(temp_str, "\nATQA: %02X %02X ", data->atqa[1], data->atqa[0]); - furi_string_cat_printf(temp_str, " SAK: %02X", data->sak); + furi_string_cat_printf(temp_str, " SAK: %02X\n", data->sak); + + if(mrtd_data->auth.method != MrtdAuthMethodNone && !mrtd_data->auth_success) { + furi_string_cat_printf(temp_str, "Auth failed. Wrong params?"); + } widget_add_text_scroll_element(widget, 0, 0, 128, 52, furi_string_get_cstr(temp_str)); furi_string_free(temp_str); @@ -82,4 +87,4 @@ void nfc_scene_passport_read_on_exit(void* context) { // Clear view widget_reset(nfc->widget); -} \ No newline at end of file +} diff --git a/lib/nfc/nfc_worker.c b/lib/nfc/nfc_worker.c index 412d5229d..a0728d928 100644 --- a/lib/nfc/nfc_worker.c +++ b/lib/nfc/nfc_worker.c @@ -283,11 +283,18 @@ static bool nfc_worker_read_mrtd(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* t //TODO: try select eMRTDApp first, but when PACE, read CardAccess first! if(!mrtd_select_app(mrtd_app, AID.eMRTDApplication)) break; // Passport app not selected - // At least we're dealing with a passport. So return true. - read_success = true; + if(mrtd_data->auth.method == MrtdAuthMethodNone) { + // Selected the passport app, but auth. not selected + // Successfully read what we could + read_success = true; + break; + } - if(!mrtd_authenticate(mrtd_app, mrtd_data)) break; // Authentication failed - //TODO: show auth failure screen + if(!mrtd_authenticate(mrtd_app, mrtd_data)) { + // At least we're reading an MRTD and should the app switch to the NFC scenes + read_success = true; + break; // Authentication failed + } mrtd_read_parse_file(mrtd_app, mrtd_data, EF.COM); mrtd_read_parse_file(mrtd_app, mrtd_data, EF.DG1); @@ -337,7 +344,6 @@ static bool nfc_worker_read_nfca(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* t furi_hal_nfc_sleep(); // Needed between checks FURI_LOG_D(TAG, "Try reading MRTD"); - //TODO: support NFC-B? if(nfc_worker_read_mrtd(nfc_worker, tx_rx)) { nfc_worker->dev_data->protocol = NfcDeviceProtocolMRTD; break;