mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2025-12-12 12:42:30 +04:00
cardholder name parsing prepared
This commit is contained in:
@@ -31,7 +31,7 @@ void nfc_render_emv_uid(const uint8_t* uid, const uint8_t uid_len, FuriString* s
|
|||||||
|
|
||||||
void nfc_render_emv_data(const EmvData* data, FuriString* str) {
|
void nfc_render_emv_data(const EmvData* data, FuriString* str) {
|
||||||
nfc_render_emv_pan(data->emv_application.pan, data->emv_application.pan_len, str);
|
nfc_render_emv_pan(data->emv_application.pan, data->emv_application.pan_len, str);
|
||||||
nfc_render_emv_name(data->emv_application.name, str);
|
nfc_render_emv_name(data->emv_application.application_name, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void nfc_render_emv_pan(const uint8_t* data, const uint8_t len, FuriString* str) {
|
void nfc_render_emv_pan(const uint8_t* data, const uint8_t len, FuriString* str) {
|
||||||
|
|||||||
@@ -73,10 +73,10 @@ static bool emv_parse(const NfcDevice* device, FuriString* parsed_data) {
|
|||||||
const EmvApplication app = data->emv_application;
|
const EmvApplication app = data->emv_application;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if(strlen(app.label))
|
if(strlen(app.application_label))
|
||||||
furi_string_cat_printf(parsed_data, "\e#%s\n", app.label);
|
furi_string_cat_printf(parsed_data, "\e#%s\n", app.application_label);
|
||||||
else if(strlen(app.name))
|
else if(strlen(app.application_name))
|
||||||
furi_string_cat_printf(parsed_data, "\e#%s\n", app.name);
|
furi_string_cat_printf(parsed_data, "\e#%s\n", app.application_name);
|
||||||
else
|
else
|
||||||
furi_string_cat_printf(parsed_data, "\e#%s\n", "EMV");
|
furi_string_cat_printf(parsed_data, "\e#%s\n", "EMV");
|
||||||
|
|
||||||
@@ -95,6 +95,9 @@ static bool emv_parse(const NfcDevice* device, FuriString* parsed_data) {
|
|||||||
furi_string_free(pan);
|
furi_string_free(pan);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(strlen(app.cardholder_name))
|
||||||
|
furi_string_cat_printf(parsed_data, "Cardholder name: %s\n", app.cardholder_name);
|
||||||
|
|
||||||
if(app.effective_month) {
|
if(app.effective_month) {
|
||||||
char day[] = "??";
|
char day[] = "??";
|
||||||
if(app.effective_day) itoa(app.effective_day, day, 16);
|
if(app.effective_day) itoa(app.effective_day, day, 16);
|
||||||
|
|||||||
@@ -77,11 +77,11 @@ bool emv_load(EmvData* data, FlipperFormat* ff, uint32_t version) {
|
|||||||
EmvApplication* app = &data->emv_application;
|
EmvApplication* app = &data->emv_application;
|
||||||
|
|
||||||
flipper_format_read_string(ff, "Application name", temp_str);
|
flipper_format_read_string(ff, "Application name", temp_str);
|
||||||
strcpy(app->name, furi_string_get_cstr(temp_str));
|
strcpy(app->application_name, furi_string_get_cstr(temp_str));
|
||||||
|
|
||||||
//Read label
|
//Read label
|
||||||
flipper_format_read_string(ff, "Application label", temp_str);
|
flipper_format_read_string(ff, "Application label", temp_str);
|
||||||
strcpy(app->label, furi_string_get_cstr(temp_str));
|
strcpy(app->application_label, furi_string_get_cstr(temp_str));
|
||||||
|
|
||||||
uint32_t pan_len;
|
uint32_t pan_len;
|
||||||
if(!flipper_format_read_uint32(ff, "PAN length", &pan_len, 1)) break;
|
if(!flipper_format_read_uint32(ff, "PAN length", &pan_len, 1)) break;
|
||||||
@@ -131,9 +131,10 @@ bool emv_save(const EmvData* data, FlipperFormat* ff) {
|
|||||||
|
|
||||||
if(!flipper_format_write_comment_cstr(ff, "EMV specific data:\n")) break;
|
if(!flipper_format_write_comment_cstr(ff, "EMV specific data:\n")) break;
|
||||||
|
|
||||||
if(!flipper_format_write_string_cstr(ff, "Application name", app.name)) break;
|
if(!flipper_format_write_string_cstr(ff, "Application name", app.application_name)) break;
|
||||||
|
|
||||||
if(!flipper_format_write_string_cstr(ff, "Application label", app.label)) break;
|
if(!flipper_format_write_string_cstr(ff, "Application label", app.application_label))
|
||||||
|
break;
|
||||||
|
|
||||||
uint32_t pan_len = app.pan_len;
|
uint32_t pan_len = app.pan_len;
|
||||||
if(!flipper_format_write_uint32(ff, "PAN length", &pan_len, 1)) break;
|
if(!flipper_format_write_uint32(ff, "PAN length", &pan_len, 1)) break;
|
||||||
|
|||||||
@@ -78,8 +78,9 @@ typedef struct {
|
|||||||
uint8_t priority;
|
uint8_t priority;
|
||||||
uint8_t aid[16];
|
uint8_t aid[16];
|
||||||
uint8_t aid_len;
|
uint8_t aid_len;
|
||||||
char name[16 + 1];
|
char application_name[16 + 1];
|
||||||
char label[16 + 1];
|
char application_label[16 + 1];
|
||||||
|
char cardholder_name[24 + 1];
|
||||||
uint8_t pan[10]; // card_number
|
uint8_t pan[10]; // card_number
|
||||||
uint8_t pan_len;
|
uint8_t pan_len;
|
||||||
uint8_t exp_day;
|
uint8_t exp_day;
|
||||||
|
|||||||
@@ -116,17 +116,17 @@ static bool
|
|||||||
FURI_LOG_T(TAG, "found EMV_TAG_APP_PRIORITY %X: %d", tag, app->priority);
|
FURI_LOG_T(TAG, "found EMV_TAG_APP_PRIORITY %X: %d", tag, app->priority);
|
||||||
break;
|
break;
|
||||||
case EMV_TAG_APPL_LABEL:
|
case EMV_TAG_APPL_LABEL:
|
||||||
memcpy(app->label, &buff[i], tlen);
|
memcpy(app->application_label, &buff[i], tlen);
|
||||||
app->label[tlen] = '\0';
|
app->application_label[tlen] = '\0';
|
||||||
success = true;
|
success = true;
|
||||||
FURI_LOG_T(TAG, "found EMV_TAG_APPL_LABEL %x: %s", tag, app->label);
|
FURI_LOG_T(TAG, "found EMV_TAG_APPL_LABEL %x: %s", tag, app->application_label);
|
||||||
break;
|
break;
|
||||||
case EMV_TAG_APPL_NAME:
|
case EMV_TAG_APPL_NAME:
|
||||||
furi_check(tlen < sizeof(app->name));
|
furi_check(tlen < sizeof(app->application_name));
|
||||||
memcpy(app->name, &buff[i], tlen);
|
memcpy(app->application_name, &buff[i], tlen);
|
||||||
app->name[tlen] = '\0';
|
app->application_name[tlen] = '\0';
|
||||||
success = true;
|
success = true;
|
||||||
FURI_LOG_T(TAG, "found EMV_TAG_APPL_NAME %x: %s", tag, app->name);
|
FURI_LOG_T(TAG, "found EMV_TAG_APPL_NAME %x: %s", tag, app->application_name);
|
||||||
break;
|
break;
|
||||||
case EMV_TAG_APPL_EFFECTIVE:
|
case EMV_TAG_APPL_EFFECTIVE:
|
||||||
app->effective_year = buff[i];
|
app->effective_year = buff[i];
|
||||||
@@ -190,11 +190,11 @@ static bool
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EMV_TAG_CARDHOLDER_NAME: {
|
case EMV_TAG_CARDHOLDER_NAME: {
|
||||||
char name[27];
|
if(strlen(app->cardholder_name) > tlen) break;
|
||||||
memcpy(name, &buff[i], tlen);
|
memcpy(app->cardholder_name, &buff[i], tlen);
|
||||||
name[tlen] = '\0';
|
app->cardholder_name[tlen] = '\0';
|
||||||
success = true;
|
success = true;
|
||||||
FURI_LOG_T(TAG, "found EMV_TAG_CARDHOLDER_NAME %x: %s", tag, name);
|
FURI_LOG_T(TAG, "found EMV_TAG_CARDHOLDER_NAME %x: %s", tag, app->cardholder_name);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EMV_TAG_PAN:
|
case EMV_TAG_PAN:
|
||||||
|
|||||||
Reference in New Issue
Block a user