mirror of
https://github.com/DarkFlippers/unleashed-firmware
synced 2025-02-17 05:48:33 +00:00
Fixed validating
This commit is contained in:
parent
9c92338ddf
commit
00b1018e9e
2 changed files with 47 additions and 41 deletions
|
@ -649,11 +649,11 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
|
|||
card_crc16_2);
|
||||
card_validator = card_validator1 * 1024 + card_validator2;
|
||||
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};
|
||||
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,
|
||||
1992);
|
||||
furi_string_printf(
|
||||
|
@ -711,7 +711,7 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
|
|||
card_valid_from_date,
|
||||
card_rfu3);
|
||||
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(
|
||||
result,
|
||||
|
@ -1483,7 +1483,8 @@ static bool social_moscow_verify_type(Nfc* nfc, MfClassicType type) {
|
|||
}
|
||||
|
||||
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) {
|
||||
|
@ -1546,27 +1547,29 @@ static bool social_moscow_parse(const NfcDevice* device, FuriString* parsed_data
|
|||
|
||||
FuriString* metro_result = furi_string_alloc();
|
||||
FuriString* ground_result = furi_string_alloc();
|
||||
|
||||
parse_transport_block(&data->block[4], metro_result);
|
||||
parse_transport_block(&data->block[16], ground_result);
|
||||
|
||||
furi_string_printf(
|
||||
parsed_data,
|
||||
"\e#Social \ecard\nNumber: %lx %x %llx %x\nOMC: %llx\nValid for: %02x/%02x %02x%02x\n%s\n%s",
|
||||
card_code,
|
||||
card_region,
|
||||
card_number,
|
||||
card_control,
|
||||
omc_number,
|
||||
month,
|
||||
year,
|
||||
data->block[60].data[13],
|
||||
data->block[60].data[14],
|
||||
furi_string_get_cstr(metro_result),
|
||||
furi_string_get_cstr(ground_result));
|
||||
furi_string_free(metro_result);
|
||||
furi_string_free(ground_result);
|
||||
parsed = true;
|
||||
bool result1 = parse_transport_block(&data->block[4], metro_result);
|
||||
bool result2 = parse_transport_block(&data->block[16], ground_result);
|
||||
if(result1 || result2) {
|
||||
furi_string_printf(
|
||||
parsed_data,
|
||||
"\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_region,
|
||||
card_number,
|
||||
card_control,
|
||||
omc_number,
|
||||
month,
|
||||
year,
|
||||
data->block[60].data[13],
|
||||
data->block[60].data[14],
|
||||
furi_string_get_cstr(metro_result),
|
||||
furi_string_get_cstr(ground_result));
|
||||
furi_string_free(metro_result);
|
||||
furi_string_free(ground_result);
|
||||
parsed = true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} while(false);
|
||||
|
||||
return parsed;
|
||||
|
|
|
@ -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);
|
||||
|
||||
FuriHalRtcDateTime card_start_trip_minutes_s = {0};
|
||||
from_minutes_to_datetime(
|
||||
card_start_trip_minutes - (24 * 60), &card_start_trip_minutes_s, 2019);
|
||||
from_minutes_to_datetime(card_start_trip_minutes, &card_start_trip_minutes_s, 2019);
|
||||
furi_string_printf(
|
||||
result,
|
||||
"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_hash);
|
||||
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};
|
||||
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,
|
||||
2019); //-time
|
||||
furi_string_printf(
|
||||
|
@ -1465,10 +1464,10 @@ static bool troika_get_card_config(TroikaCardConfig* config, MfClassicType type)
|
|||
bool success = true;
|
||||
|
||||
if(type == MfClassicType1k) {
|
||||
config->data_sector = 8;
|
||||
config->data_sector = 11;
|
||||
config->keys = troika_1k_keys;
|
||||
} else if(type == MfClassicType4k) {
|
||||
config->data_sector = 4;
|
||||
config->data_sector = 11;
|
||||
config->keys = troika_4k_keys;
|
||||
} else {
|
||||
success = false;
|
||||
|
@ -1574,16 +1573,20 @@ static bool troika_parse(const NfcDevice* device, FuriString* parsed_data) {
|
|||
|
||||
FuriString* metro_result = furi_string_alloc();
|
||||
FuriString* ground_result = furi_string_alloc();
|
||||
parse_transport_block(&data->block[32], metro_result);
|
||||
parse_transport_block(&data->block[28], ground_result);
|
||||
furi_string_printf(
|
||||
parsed_data,
|
||||
"\e#Troika\n%s\n%s",
|
||||
furi_string_get_cstr(metro_result),
|
||||
furi_string_get_cstr(ground_result));
|
||||
furi_string_free(metro_result);
|
||||
furi_string_free(ground_result);
|
||||
parsed = true;
|
||||
bool result1 = parse_transport_block(&data->block[32], metro_result);
|
||||
bool result2 = parse_transport_block(&data->block[28], ground_result);
|
||||
if(result1 || result2) {
|
||||
furi_string_printf(
|
||||
parsed_data,
|
||||
"\e#Troika\n%s\n\e#Ediniy\n%s\n\e#TAT\n",
|
||||
furi_string_get_cstr(metro_result),
|
||||
furi_string_get_cstr(ground_result));
|
||||
furi_string_free(metro_result);
|
||||
furi_string_free(ground_result);
|
||||
parsed = true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} while(false);
|
||||
|
||||
return parsed;
|
||||
|
|
Loading…
Add table
Reference in a new issue