Fixed validating

This commit is contained in:
assasinfil
2023-11-20 20:46:51 +03:00
parent 9c92338ddf
commit 00b1018e9e
2 changed files with 47 additions and 41 deletions

View File

@@ -649,11 +649,11 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_crc16_2); card_crc16_2);
card_validator = card_validator1 * 1024 + card_validator2; card_validator = card_validator1 * 1024 + card_validator2;
FuriHalRtcDateTime card_use_before_date_s = {0}; FuriHalRtcDateTime card_use_before_date_s = {0};
from_days_to_datetime(card_valid_by_date - 1, &card_use_before_date_s, 1992); from_days_to_datetime(card_valid_by_date, &card_use_before_date_s, 1992);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; FuriHalRtcDateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
(card_start_trip_date - 1) * 24 * 60 + card_start_trip_time, (card_start_trip_date) * 24 * 60 + card_start_trip_time,
&card_start_trip_minutes_s, &card_start_trip_minutes_s,
1992); 1992);
furi_string_printf( furi_string_printf(
@@ -711,7 +711,7 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_valid_from_date, card_valid_from_date,
card_rfu3); card_rfu3);
FuriHalRtcDateTime card_use_before_date_s = {0}; FuriHalRtcDateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date - 1, &card_use_before_date_s, 1992); from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 1992);
furi_string_printf( furi_string_printf(
result, result,
@@ -1483,7 +1483,8 @@ static bool social_moscow_verify_type(Nfc* nfc, MfClassicType type) {
} }
static bool social_moscow_verify(Nfc* nfc) { static bool social_moscow_verify(Nfc* nfc) {
return social_moscow_verify_type(nfc, MfClassicType4k); return social_moscow_verify_type(nfc, MfClassicType1k) ||
social_moscow_verify_type(nfc, MfClassicType4k);
} }
static bool social_moscow_read(Nfc* nfc, NfcDevice* device) { static bool social_moscow_read(Nfc* nfc, NfcDevice* device) {
@@ -1546,13 +1547,12 @@ static bool social_moscow_parse(const NfcDevice* device, FuriString* parsed_data
FuriString* metro_result = furi_string_alloc(); FuriString* metro_result = furi_string_alloc();
FuriString* ground_result = furi_string_alloc(); FuriString* ground_result = furi_string_alloc();
bool result1 = parse_transport_block(&data->block[4], metro_result);
parse_transport_block(&data->block[4], metro_result); bool result2 = parse_transport_block(&data->block[16], ground_result);
parse_transport_block(&data->block[16], ground_result); if(result1 || result2) {
furi_string_printf( furi_string_printf(
parsed_data, parsed_data,
"\e#Social \ecard\nNumber: %lx %x %llx %x\nOMC: %llx\nValid for: %02x/%02x %02x%02x\n%s\n%s", "\e#Social \ecard\nNumber: %lx %x %llx %x\nOMC: %llx\nValid for: %02x/%02x %02x%02x\n\e#Metro\n%s\n\e#Ground\n%s",
card_code, card_code,
card_region, card_region,
card_number, card_number,
@@ -1567,6 +1567,9 @@ static bool social_moscow_parse(const NfcDevice* device, FuriString* parsed_data
furi_string_free(metro_result); furi_string_free(metro_result);
furi_string_free(ground_result); furi_string_free(ground_result);
parsed = true; parsed = true;
} else {
return false;
}
} while(false); } while(false);
return parsed; return parsed;

View File

@@ -1276,8 +1276,7 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 2019); from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 2019);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; FuriHalRtcDateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(card_start_trip_minutes, &card_start_trip_minutes_s, 2019);
card_start_trip_minutes - (24 * 60), &card_start_trip_minutes_s, 2019);
furi_string_printf( furi_string_printf(
result, result,
"Number: %010lu\nValid for: %02d.%02d.%04d\nBalance: %ld rub\nTrip from: %02d.%02d.%04d %02d:%02d\nValidator: %05d", "Number: %010lu\nValid for: %02d.%02d.%04d\nBalance: %ld rub\nTrip from: %02d.%02d.%04d %02d:%02d\nValidator: %05d",
@@ -1340,11 +1339,11 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_route, card_route,
card_hash); card_hash);
FuriHalRtcDateTime card_use_before_date_s = {0}; FuriHalRtcDateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date - 1, &card_use_before_date_s, 2019); from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 2019);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; FuriHalRtcDateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
card_valid_from_date + card_valid_for_minutes - card_start_trip_neg_minutes - 24 * 60, card_valid_from_date + card_valid_for_minutes - card_start_trip_neg_minutes,
&card_start_trip_minutes_s, &card_start_trip_minutes_s,
2019); //-time 2019); //-time
furi_string_printf( furi_string_printf(
@@ -1465,10 +1464,10 @@ static bool troika_get_card_config(TroikaCardConfig* config, MfClassicType type)
bool success = true; bool success = true;
if(type == MfClassicType1k) { if(type == MfClassicType1k) {
config->data_sector = 8; config->data_sector = 11;
config->keys = troika_1k_keys; config->keys = troika_1k_keys;
} else if(type == MfClassicType4k) { } else if(type == MfClassicType4k) {
config->data_sector = 4; config->data_sector = 11;
config->keys = troika_4k_keys; config->keys = troika_4k_keys;
} else { } else {
success = false; success = false;
@@ -1574,16 +1573,20 @@ static bool troika_parse(const NfcDevice* device, FuriString* parsed_data) {
FuriString* metro_result = furi_string_alloc(); FuriString* metro_result = furi_string_alloc();
FuriString* ground_result = furi_string_alloc(); FuriString* ground_result = furi_string_alloc();
parse_transport_block(&data->block[32], metro_result); bool result1 = parse_transport_block(&data->block[32], metro_result);
parse_transport_block(&data->block[28], ground_result); bool result2 = parse_transport_block(&data->block[28], ground_result);
if(result1 || result2) {
furi_string_printf( furi_string_printf(
parsed_data, parsed_data,
"\e#Troika\n%s\n%s", "\e#Troika\n%s\n\e#Ediniy\n%s\n\e#TAT\n",
furi_string_get_cstr(metro_result), furi_string_get_cstr(metro_result),
furi_string_get_cstr(ground_result)); furi_string_get_cstr(ground_result));
furi_string_free(metro_result); furi_string_free(metro_result);
furi_string_free(ground_result); furi_string_free(ground_result);
parsed = true; parsed = true;
} else {
return false;
}
} while(false); } while(false);
return parsed; return parsed;