Bläddra i källkod

Store diversifier len

Eric Betts 2 år sedan
förälder
incheckning
7bd7fe7ad1
4 ändrade filer med 7 tillägg och 2 borttagningar
  1. 2 0
      sam_api.c
  2. 1 1
      scenes/seader_scene_card_menu.c
  3. 3 1
      seader_credential.c
  4. 1 0
      seader_credential.h

+ 2 - 0
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;
         }
     }
 

+ 1 - 1
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",

+ 3 - 1
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);
 }
 

+ 1 - 0
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];