Skip to content

Commit 648dce0

Browse files
committed
upd picopass
1 parent cb94234 commit 648dce0

File tree

2 files changed

+42
-42
lines changed

2 files changed

+42
-42
lines changed

base_pack/picopass/scenes/picopass_scene_card_menu.c

+34-39
Original file line numberDiff line numberDiff line change
@@ -23,52 +23,45 @@ void picopass_scene_card_menu_on_enter(void* context) {
2323
PicopassBlock* AA1 = picopass->dev->dev_data.AA1;
2424

2525
bool sio = 0x30 == AA1[PICOPASS_ICLASS_PACS_CFG_BLOCK_INDEX].data[0];
26-
bool no_key = picopass_is_memset(pacs->key, 0x00, PICOPASS_BLOCK_LEN);
2726
bool secured = (AA1[PICOPASS_CONFIG_BLOCK_INDEX].data[7] & PICOPASS_FUSE_CRYPT10) !=
2827
PICOPASS_FUSE_CRYPT0;
28+
bool zero_config = picopass_is_memset(
29+
AA1[PICOPASS_ICLASS_PACS_CFG_BLOCK_INDEX].data, 0x00, PICOPASS_BLOCK_LEN);
30+
bool no_credential = picopass_is_memset(pacs->credential, 0x00, sizeof(pacs->credential));
31+
bool no_key =
32+
picopass_is_memset(AA1[PICOPASS_SECURE_KD_BLOCK_INDEX].data, 0xFF, PICOPASS_BLOCK_LEN);
2933

30-
if(!secured) {
34+
if(secured && zero_config) {
3135
submenu_add_item(
32-
submenu, "Save", SubmenuIndexSave, picopass_scene_card_menu_submenu_callback, picopass);
33-
} else if(no_key) {
34-
if(sio) {
35-
submenu_add_item(
36-
submenu,
37-
"Save",
38-
SubmenuIndexSave,
39-
picopass_scene_card_menu_submenu_callback,
40-
picopass);
41-
submenu_add_item(
42-
submenu,
43-
"Save in Seader fmt",
44-
SubmenuIndexSaveAsSeader,
45-
picopass_scene_card_menu_submenu_callback,
46-
picopass);
47-
} else {
48-
submenu_add_item(
49-
submenu,
50-
"Save Partial",
51-
SubmenuIndexSavePartial,
52-
picopass_scene_card_menu_submenu_callback,
53-
picopass);
54-
}
36+
submenu,
37+
"Save Partial",
38+
SubmenuIndexSavePartial,
39+
picopass_scene_card_menu_submenu_callback,
40+
picopass);
5541
} else {
5642
submenu_add_item(
5743
submenu, "Save", SubmenuIndexSave, picopass_scene_card_menu_submenu_callback, picopass);
44+
}
45+
46+
if(secured && (sio || pacs->sio)) {
47+
submenu_add_item(
48+
submenu,
49+
"Save in Seader fmt",
50+
SubmenuIndexSaveAsSeader,
51+
picopass_scene_card_menu_submenu_callback,
52+
picopass);
53+
}
54+
55+
if(secured && !no_credential) {
5856
submenu_add_item(
5957
submenu,
6058
"Save as LFRFID",
6159
SubmenuIndexSaveAsLF,
6260
picopass_scene_card_menu_submenu_callback,
6361
picopass);
64-
if(pacs->sio) { // SR
65-
submenu_add_item(
66-
submenu,
67-
"Save in Seader fmt",
68-
SubmenuIndexSaveAsSeader,
69-
picopass_scene_card_menu_submenu_callback,
70-
picopass);
71-
}
62+
}
63+
64+
if(!zero_config && !no_key) {
7265
submenu_add_item(
7366
submenu,
7467
"Write",
@@ -81,12 +74,14 @@ void picopass_scene_card_menu_on_enter(void* context) {
8174
SubmenuIndexEmulate,
8275
picopass_scene_card_menu_submenu_callback,
8376
picopass);
84-
submenu_add_item(
85-
submenu,
86-
"Change Key",
87-
SubmenuIndexChangeKey,
88-
picopass_scene_card_menu_submenu_callback,
89-
picopass);
77+
if(secured) {
78+
submenu_add_item(
79+
submenu,
80+
"Change Key",
81+
SubmenuIndexChangeKey,
82+
picopass_scene_card_menu_submenu_callback,
83+
picopass);
84+
}
9085
}
9186

9287
submenu_set_selected_item(

base_pack/picopass/scenes/picopass_scene_read_card_success.c

+8-3
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ void picopass_scene_read_card_success_on_enter(void* context) {
3939
}
4040

4141
// We can't test the pacs->key in case it is intentionally all 0's and we can't test the key block since it is populated with the diversified key before each key test, so we approximate with the PACS config block being blank.
42-
bool no_key = picopass_is_memset(
42+
bool zero_config = picopass_is_memset(
4343
AA1[PICOPASS_ICLASS_PACS_CFG_BLOCK_INDEX].data, 0x00, PICOPASS_BLOCK_LEN);
4444
bool empty = picopass_is_memset(
4545
AA1[PICOPASS_ICLASS_PACS_CFG_BLOCK_INDEX].data, 0xFF, PICOPASS_BLOCK_LEN);
@@ -62,7 +62,7 @@ void picopass_scene_read_card_success_on_enter(void* context) {
6262
"More",
6363
picopass_scene_read_card_success_widget_callback,
6464
picopass);
65-
} else if(no_key) {
65+
} else if(zero_config) {
6666
furi_string_cat_printf(wiegand_str, "Read Failed");
6767

6868
if(pacs->se_enabled) {
@@ -133,7 +133,12 @@ void picopass_scene_read_card_success_on_enter(void* context) {
133133
furi_string_cat_printf(credential_str, " +SIO");
134134
}
135135

136-
if(pacs->key) {
136+
bool no_key =
137+
picopass_is_memset(AA1[PICOPASS_SECURE_KD_BLOCK_INDEX].data, 0xFF, PICOPASS_BLOCK_LEN);
138+
139+
if(no_key) {
140+
furi_string_cat_printf(key_str, "No Key: used NR-MAC");
141+
} else if(pacs->key) {
137142
furi_string_cat_printf(key_str, "Key: ");
138143
uint8_t key[PICOPASS_BLOCK_LEN];
139144
memcpy(key, &pacs->key, PICOPASS_BLOCK_LEN);

0 commit comments

Comments
 (0)