From 7bd7fe7ad123929efdec64dfb9c2d2b9b40be8a2 Mon Sep 17 00:00:00 2001 From: Eric Betts Date: Mon, 1 Jan 2024 11:07:42 -0800 Subject: [PATCH] Store diversifier len --- sam_api.c | 2 ++ scenes/seader_scene_card_menu.c | 2 +- seader_credential.c | 4 +++- seader_credential.h | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/sam_api.c b/sam_api.c index ac59b1e..4ed97fe 100644 --- a/sam_api.c +++ b/sam_api.c @@ -774,6 +774,7 @@ NfcCommand seader_worker_card_detect( OCTET_STRING_fromBuf( &cardDetails->protocol, (const char*)protocol_bytes, sizeof(protocol_bytes)); memcpy(credential->diversifier, uid, uid_len); + credential->diversifier_len = uid_len; } else { protocol_bytes[1] = FrameProtocol_nfc; OCTET_STRING_fromBuf( @@ -783,6 +784,7 @@ NfcCommand seader_worker_card_detect( cardDetails->atqa = &atqa_string; if(seader_mf_df_check_card_type(atqa[0], atqa[1], sak)) { memcpy(credential->diversifier, uid, uid_len); + credential->diversifier_len = uid_len; } } diff --git a/scenes/seader_scene_card_menu.c b/scenes/seader_scene_card_menu.c index e55a61b..7cd6c58 100644 --- a/scenes/seader_scene_card_menu.c +++ b/scenes/seader_scene_card_menu.c @@ -33,7 +33,7 @@ void seader_scene_card_menu_on_enter(void* context) { SubmenuIndexSaveRFID, seader_scene_card_menu_submenu_callback, seader); - if(credential->sio[0] == 0x30) { + if(credential->sio[0] == 0x30 && credential->diversifier_len == RFAL_PICOPASS_UID_LEN) { submenu_add_item( submenu, "Save SR", diff --git a/seader_credential.c b/seader_credential.c index aa0f7d4..3641384 100644 --- a/seader_credential.c +++ b/seader_credential.c @@ -72,6 +72,7 @@ static bool seader_credential_load(SeaderCredential* cred, FuriString* path, boo // Optional SIO/Diversifier flipper_format_read_hex(file, "SIO", cred->sio, sizeof(cred->sio)); flipper_format_read_hex(file, "Diversifier", cred->diversifier, sizeof(cred->diversifier)); + cred->diversifier_len = sizeof(cred->diversifier); // No way to know real length; parsed = true; } while(false); @@ -364,7 +365,7 @@ bool seader_credential_save_agnostic(SeaderCredential* cred, const char* name) { if(cred->sio[0] == 0x30) { if(!flipper_format_write_hex(file, "SIO", cred->sio, sizeof(cred->sio))) break; if(!flipper_format_write_hex( - file, "Diversifier", cred->diversifier, sizeof(cred->diversifier))) + file, "Diversifier", cred->diversifier, cred->diversifier_len)) break; } @@ -643,6 +644,7 @@ void seader_credential_clear(SeaderCredential* cred) { cred->type = SeaderCredentialTypeNone; memset(cred->sio, 0, sizeof(cred->sio)); memset(cred->diversifier, 0, sizeof(cred->diversifier)); + cred->diversifier_len = 0; furi_string_reset(cred->load_path); } diff --git a/seader_credential.h b/seader_credential.h index c8ce928..72720cb 100644 --- a/seader_credential.h +++ b/seader_credential.h @@ -37,6 +37,7 @@ typedef struct { size_t bit_length; uint8_t sio[128]; uint8_t diversifier[8]; + uint8_t diversifier_len; SeaderCredentialType type; SeaderCredentialSaveFormat save_format; char name[SEADER_CRED_NAME_MAX_LEN + 1];