Skip to content

Commit

Permalink
Fixed validating
Browse files Browse the repository at this point in the history
  • Loading branch information
assasinfil committed Nov 20, 2023
1 parent 9c92338 commit 00b1018
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 41 deletions.
53 changes: 28 additions & 25 deletions applications/main/nfc/plugins/supported_cards/social_moscow.c
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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;
Expand Down
35 changes: 19 additions & 16 deletions applications/main/nfc/plugins/supported_cards/troika.c
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 00b1018

Please sign in to comment.