From 4bb6fc175bc048015af40f56e9a96193e55d727a Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Thu, 15 Feb 2024 01:01:00 +0000 Subject: [PATCH] Temp fix/revert for transaction history --- lib/nfc/protocols/emv/emv_poller_i.c | 76 +++++++++++++++------------- 1 file changed, 41 insertions(+), 35 deletions(-) diff --git a/lib/nfc/protocols/emv/emv_poller_i.c b/lib/nfc/protocols/emv/emv_poller_i.c index e72432287..42277a27c 100644 --- a/lib/nfc/protocols/emv/emv_poller_i.c +++ b/lib/nfc/protocols/emv/emv_poller_i.c @@ -632,10 +632,10 @@ EmvError emv_poller_read_afl(EmvPoller* instance) { FURI_LOG_D(TAG, "Search PAN in SFI"); - uint8_t sfi_2_mask = 0; - uint8_t sfi_3_mask = 0; + // uint8_t sfi_2_mask = 0; + // uint8_t sfi_3_mask = 0; - bool pan_fetched = (instance->data->emv_application.pan_len); + // bool pan_fetched = (instance->data->emv_application.pan_len); // Iterate through all files for(size_t i = 0; i < instance->data->emv_application.afl.size; i += 4) { @@ -644,8 +644,8 @@ EmvError emv_poller_read_afl(EmvPoller* instance) { uint8_t record_end = afl->data[i + 2]; // Iterate through all records in file for(uint8_t record = record_start; record <= record_end; ++record) { - if((sfi == 2) && (record < 8)) FURI_BIT_SET(sfi_2_mask, record); - if((sfi == 3) && (record < 8)) FURI_BIT_SET(sfi_3_mask, record); + // if((sfi == 2) && (record < 8)) FURI_BIT_SET(sfi_2_mask, record); + // if((sfi == 3) && (record < 8)) FURI_BIT_SET(sfi_3_mask, record); error = emv_poller_read_sfi_record(instance, sfi, record); if(error != EmvErrorNone) break; @@ -658,41 +658,47 @@ EmvError emv_poller_read_afl(EmvPoller* instance) { FURI_LOG_T(TAG, "Failed to parse SFI 0x%X record %d", sfi, record); } - if(instance->data->emv_application.pan_len) pan_fetched = true; // Card number fetched + // Some READ RECORD returns 1 byte response 0x12/0x13 (IDK WTF), + // then poller return Timeout to all subsequent requests. + // TODO: remove below lines when it was fixed + if(instance->data->emv_application.pan_len != 0) + return EmvErrorNone; // Card number fetched + // if(instance->data->emv_application.pan_len) pan_fetched = true; // Card number fetched } } - bool cardholder_name_fetched = strlen(instance->data->emv_application.cardholder_name); + // bool cardholder_name_fetched = strlen(instance->data->emv_application.cardholder_name); // Bruteforse files 2-3 - FURI_LOG_T(TAG, "Bruteforce files 2-3"); - for(size_t sfi = 2; sfi <= 3; sfi++) { - // Iterate through records 1-5 in file - for(size_t record = 1; record <= 5; record++) { - // Skip previously readed sfi - if(sfi == 2) { - if((sfi_2_mask >> record) & (0b1)) continue; - } - if(sfi == 3) { - if((sfi_3_mask >> record) & (0b1)) continue; - } + // FURI_LOG_T(TAG, "Bruteforce files 2-3"); + // for(size_t sfi = 2; sfi <= 3; sfi++) { + // // Iterate through records 1-5 in file + // for(size_t record = 1; record <= 5; record++) { + // // Skip previously readed sfi + // // if(sfi == 2) { + // // if((sfi_2_mask >> record) & (0b1)) continue; + // // } + // // if(sfi == 3) { + // // if((sfi_3_mask >> record) & (0b1)) continue; + // // } - if(strlen(instance->data->emv_application.cardholder_name)) - cardholder_name_fetched = true; - error = emv_poller_read_sfi_record(instance, sfi, record); - if(error != EmvErrorNone) break; + // if(strlen(instance->data->emv_application.cardholder_name)) + // cardholder_name_fetched = true; + // error = emv_poller_read_sfi_record(instance, sfi, record); + // if(error != EmvErrorNone) break; - if(!emv_decode_response_tlv( - bit_buffer_get_data(instance->rx_buffer), - bit_buffer_get_size_bytes(instance->rx_buffer), - &instance->data->emv_application)) { - error = EmvErrorProtocol; - FURI_LOG_T(TAG, "Failed to parse SFI 0x%X record %d", sfi, record); - } - } - } - if(pan_fetched || cardholder_name_fetched) - return EmvErrorNone; - else - return error; + // if(!emv_decode_response_tlv( + // bit_buffer_get_data(instance->rx_buffer), + // bit_buffer_get_size_bytes(instance->rx_buffer), + // &instance->data->emv_application)) { + // error = EmvErrorProtocol; + // FURI_LOG_T(TAG, "Failed to parse SFI 0x%X record %d", sfi, record); + // } + // } + // } + // if(pan_fetched || cardholder_name_fetched) + // return EmvErrorNone; + // else + // return error; + return error; } static EmvError emv_poller_req_get_data(EmvPoller* instance, uint16_t tag) {