From 2b0b5b02b5eb684063fe680e35559e2119f20aad Mon Sep 17 00:00:00 2001 From: Astra <93453568+Astrrra@users.noreply.github.com> Date: Mon, 1 Jul 2024 02:54:55 +0900 Subject: [PATCH] [NFC] Add mf_classic_set_sector_trailer_read function (#3733) Co-authored-by: gornekich Co-authored-by: Aleksandr Kutuzov --- lib/nfc/protocols/mf_classic/mf_classic.c | 17 +++++++++++++++++ lib/nfc/protocols/mf_classic/mf_classic.h | 5 +++++ targets/f18/api_symbols.csv | 2 +- targets/f7/api_symbols.csv | 3 ++- 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/lib/nfc/protocols/mf_classic/mf_classic.c b/lib/nfc/protocols/mf_classic/mf_classic.c index 5fee3eb7b4..8bf96bff44 100644 --- a/lib/nfc/protocols/mf_classic/mf_classic.c +++ b/lib/nfc/protocols/mf_classic/mf_classic.c @@ -432,6 +432,23 @@ bool mf_classic_is_sector_trailer(uint8_t block) { return block == mf_classic_get_sector_trailer_num_by_block(block); } +void mf_classic_set_sector_trailer_read( + MfClassicData* data, + uint8_t block_num, + MfClassicSectorTrailer* sec_tr) { + furi_check(data); + furi_check(sec_tr); + furi_check(mf_classic_is_sector_trailer(block_num)); + + uint8_t sector_num = mf_classic_get_sector_by_block(block_num); + MfClassicSectorTrailer* sec_trailer = + mf_classic_get_sector_trailer_by_sector(data, sector_num); + memcpy(sec_trailer, sec_tr, sizeof(MfClassicSectorTrailer)); + FURI_BIT_SET(data->block_read_mask[block_num / 32], block_num % 32); + FURI_BIT_SET(data->key_a_mask, sector_num); + FURI_BIT_SET(data->key_b_mask, sector_num); +} + uint8_t mf_classic_get_sector_by_block(uint8_t block) { uint8_t sector = 0; diff --git a/lib/nfc/protocols/mf_classic/mf_classic.h b/lib/nfc/protocols/mf_classic/mf_classic.h index b42e09ab1d..6cb8aac15d 100644 --- a/lib/nfc/protocols/mf_classic/mf_classic.h +++ b/lib/nfc/protocols/mf_classic/mf_classic.h @@ -184,6 +184,11 @@ MfClassicSectorTrailer* bool mf_classic_is_sector_trailer(uint8_t block); +void mf_classic_set_sector_trailer_read( + MfClassicData* data, + uint8_t block_num, + MfClassicSectorTrailer* sec_tr); + uint8_t mf_classic_get_sector_by_block(uint8_t block); bool mf_classic_block_to_value(const MfClassicBlock* block, int32_t* value, uint8_t* addr); diff --git a/targets/f18/api_symbols.csv b/targets/f18/api_symbols.csv index e6a5985e2c..4aa6761314 100644 --- a/targets/f18/api_symbols.csv +++ b/targets/f18/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,67.0,, +Version,+,67.1,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/bt/bt_service/bt_keys_storage.h,, Header,+,applications/services/cli/cli.h,, diff --git a/targets/f7/api_symbols.csv b/targets/f7/api_symbols.csv index 0168552449..d91c106c5e 100644 --- a/targets/f7/api_symbols.csv +++ b/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,67.0,, +Version,+,67.1,, Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/bt/bt_service/bt_keys_storage.h,, @@ -2516,6 +2516,7 @@ Function,+,mf_classic_save,_Bool,"const MfClassicData*, FlipperFormat*" Function,+,mf_classic_set_block_read,void,"MfClassicData*, uint8_t, MfClassicBlock*" Function,+,mf_classic_set_key_found,void,"MfClassicData*, uint8_t, MfClassicKeyType, uint64_t" Function,+,mf_classic_set_key_not_found,void,"MfClassicData*, uint8_t, MfClassicKeyType" +Function,+,mf_classic_set_sector_trailer_read,void,"MfClassicData*, uint8_t, MfClassicSectorTrailer*" Function,+,mf_classic_set_uid,_Bool,"MfClassicData*, const uint8_t*, size_t" Function,+,mf_classic_value_to_block,void,"int32_t, uint8_t, MfClassicBlock*" Function,+,mf_classic_verify,_Bool,"MfClassicData*, const FuriString*"