MRTD show auth failure message

This commit is contained in:
Chris van Marle
2022-10-25 10:33:36 +02:00
parent fe2b5fa21e
commit c3d7417c25
2 changed files with 18 additions and 7 deletions

View File

@@ -11,6 +11,7 @@ void nfc_scene_passport_read_widget_callback(GuiButtonType result, InputType typ
void nfc_scene_passport_read_on_enter(void* context) { void nfc_scene_passport_read_on_enter(void* context) {
Nfc* nfc = context; Nfc* nfc = context;
FuriHalNfcDevData* data = &nfc->dev->dev_data.nfc_data; FuriHalNfcDevData* data = &nfc->dev->dev_data.nfc_data;
MrtdData* mrtd_data = &nfc->dev->dev_data.mrtd_data;
DOLPHIN_DEED(DolphinDeedNfcReadSuccess); 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, " %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, "\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)); widget_add_text_scroll_element(widget, 0, 0, 128, 52, furi_string_get_cstr(temp_str));
furi_string_free(temp_str); furi_string_free(temp_str);
@@ -82,4 +87,4 @@ void nfc_scene_passport_read_on_exit(void* context) {
// Clear view // Clear view
widget_reset(nfc->widget); widget_reset(nfc->widget);
} }

View File

@@ -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! //TODO: try select eMRTDApp first, but when PACE, read CardAccess first!
if(!mrtd_select_app(mrtd_app, AID.eMRTDApplication)) break; // Passport app not selected if(!mrtd_select_app(mrtd_app, AID.eMRTDApplication)) break; // Passport app not selected
// At least we're dealing with a passport. So return true. if(mrtd_data->auth.method == MrtdAuthMethodNone) {
read_success = true; // 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 if(!mrtd_authenticate(mrtd_app, mrtd_data)) {
//TODO: show auth failure screen // 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.COM);
mrtd_read_parse_file(mrtd_app, mrtd_data, EF.DG1); 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_hal_nfc_sleep(); // Needed between checks
FURI_LOG_D(TAG, "Try reading MRTD"); FURI_LOG_D(TAG, "Try reading MRTD");
//TODO: support NFC-B?
if(nfc_worker_read_mrtd(nfc_worker, tx_rx)) { if(nfc_worker_read_mrtd(nfc_worker, tx_rx)) {
nfc_worker->dev_data->protocol = NfcDeviceProtocolMRTD; nfc_worker->dev_data->protocol = NfcDeviceProtocolMRTD;
break; break;