Просмотр исходного кода

Only parse loaded file if it is not SE

Eric Betts 1 год назад
Родитель
Сommit
f1a65810f6
1 измененных файлов с 20 добавлено и 1 удалено
  1. 20 1
      picopass_device.c

+ 20 - 1
picopass_device.c

@@ -323,6 +323,23 @@ static bool picopass_device_load_data(PicopassDevice* dev, FuriString* path, boo
             }
             }
         }
         }
 
 
+        // Check if legacy or SE
+        PicopassBlock temp_block = {};
+        memset(temp_block.data, 0xff, PICOPASS_BLOCK_LEN);
+        pacs->legacy =
+            (memcmp(
+                 card_data[PICOPASS_SECURE_AIA_BLOCK_INDEX].data,
+                 temp_block.data,
+                 PICOPASS_BLOCK_LEN) == 0);
+
+        temp_block.data[3] = 0x00;
+        temp_block.data[4] = 0x06;
+        pacs->se_enabled =
+            (memcmp(
+                 card_data[PICOPASS_SECURE_AIA_BLOCK_INDEX].data,
+                 temp_block.data,
+                 PICOPASS_BLOCK_LEN) == 0);
+
         size_t app_limit = card_data[PICOPASS_CONFIG_BLOCK_INDEX].data[0];
         size_t app_limit = card_data[PICOPASS_CONFIG_BLOCK_INDEX].data[0];
         // Fix for unpersonalized cards that have app_limit set to 0xFF
         // Fix for unpersonalized cards that have app_limit set to 0xFF
         if(app_limit > PICOPASS_MAX_APP_LIMIT) app_limit = PICOPASS_MAX_APP_LIMIT;
         if(app_limit > PICOPASS_MAX_APP_LIMIT) app_limit = PICOPASS_MAX_APP_LIMIT;
@@ -347,7 +364,9 @@ static bool picopass_device_load_data(PicopassDevice* dev, FuriString* path, boo
         }
         }
         if(!block_read) break;
         if(!block_read) break;
 
 
-        if(card_data[PICOPASS_ICLASS_PACS_CFG_BLOCK_INDEX].valid) {
+        if(pacs->se_enabled) {
+            FURI_LOG_D(TAG, "Skipping parsing: SE enabled");
+        } else if(card_data[PICOPASS_ICLASS_PACS_CFG_BLOCK_INDEX].valid) {
             picopass_device_parse_credential(card_data, pacs);
             picopass_device_parse_credential(card_data, pacs);
             picopass_device_parse_wiegand(pacs);
             picopass_device_parse_wiegand(pacs);
         }
         }