MRTD add worker method for auhtenticated read

This commit is contained in:
Chris van Marle
2022-10-11 22:13:17 +02:00
parent 2e586338a1
commit b1f95c5c54
3 changed files with 23 additions and 1 deletions
+20 -1
View File
@@ -91,6 +91,8 @@ int32_t nfc_worker_task(void* context) {
if(nfc_worker->state == NfcWorkerStateRead) {
nfc_worker_read(nfc_worker);
} else if(nfc_worker->state == NfcWorkerStateReadMrtdAuth) {
nfc_worker_read_mrtd_auth(nfc_worker);
} else if(nfc_worker->state == NfcWorkerStateUidEmulate) {
nfc_worker_emulate_uid(nfc_worker);
} else if(nfc_worker->state == NfcWorkerStateEmulateApdu) {
@@ -283,9 +285,10 @@ static bool nfc_worker_read_mrtd(NfcWorker* nfc_worker, MrtdData* mrtd_data, Fur
//mrtd_select(mrtd_app, EF.DIR);
//mrtd_select_efcardaccess(mrtd_app);
//mrtd_select_efdir(mrtd_app);
mrtd_test(mrtd_app, mrtd_data);
if(!mrtd_select_app(mrtd_app, AID.eMRTDApplication)) break;
mrtd_test(mrtd_app, mrtd_data);
//TODO: read general informatie
//TODO: after auth scene, do auth (BAC / PACE)
@@ -316,6 +319,22 @@ static bool nfc_worker_read_mrtd(NfcWorker* nfc_worker, MrtdData* mrtd_data, Fur
return read_success;
}
bool nfc_worker_read_mrtd_auth(NfcWorker* nfc_worker) {
MrtdData* mrtd_data = &nfc_worker->dev_data->mrtd_data;
FuriHalNfcTxRxContext tx_rx = {};
MrtdApplication* mrtd_app = mrtd_alloc_init(&tx_rx);
do {
if(!furi_hal_nfc_detect(&nfc_worker->dev_data->nfc_data, 300)) break;
if(!mrtd_select_app(mrtd_app, AID.eMRTDApplication)) break;
if(!mrtd_bac(mrtd_app, &mrtd_data->auth)) break;
} while(false);
return false;
}
static bool nfc_worker_read_nfca(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) {
FuriHalNfcDevData* nfc_data = &nfc_worker->dev_data->nfc_data;
+1
View File
@@ -11,6 +11,7 @@ typedef enum {
NfcWorkerStateReady,
// Main worker states
NfcWorkerStateRead,
NfcWorkerStateReadMrtdAuth,
NfcWorkerStateUidEmulate,
NfcWorkerStateMfUltralightEmulate,
NfcWorkerStateMfClassicEmulate,
+2
View File
@@ -36,6 +36,8 @@ int32_t nfc_worker_task(void* context);
void nfc_worker_read(NfcWorker* nfc_worker);
bool nfc_worker_read_mrtd_auth(NfcWorker* nfc_worker);
void nfc_worker_emulate_uid(NfcWorker* nfc_worker);
void nfc_worker_emulate_mf_ultralight(NfcWorker* nfc_worker);