@@ -70,6 +70,20 @@ NfcCommand picopass_poller_select_handler(PicopassPoller* instance) {
70
70
return command ;
71
71
}
72
72
73
+ void picopass_poller_print_block (char * str , PicopassBlock block ) {
74
+ FURI_LOG_D (
75
+ TAG ,
76
+ str ,
77
+ block .data [0 ],
78
+ block .data [1 ],
79
+ block .data [2 ],
80
+ block .data [3 ],
81
+ block .data [4 ],
82
+ block .data [5 ],
83
+ block .data [6 ],
84
+ block .data [7 ]);
85
+ }
86
+
73
87
NfcCommand picopass_poller_pre_auth_handler (PicopassPoller * instance ) {
74
88
NfcCommand command = NfcCommandContinue ;
75
89
PicopassError error = PicopassErrorNone ;
@@ -79,17 +93,10 @@ NfcCommand picopass_poller_pre_auth_handler(PicopassPoller* instance) {
79
93
instance -> data -> card_data [PICOPASS_CSN_BLOCK_INDEX ].data ,
80
94
instance -> serial_num .data ,
81
95
sizeof (PicopassSerialNum ));
82
- FURI_LOG_D (
83
- TAG ,
96
+ instance -> data -> card_data [ PICOPASS_CSN_BLOCK_INDEX ]. valid = true;
97
+ picopass_poller_print_block (
84
98
"csn %02x%02x%02x%02x%02x%02x%02x%02x" ,
85
- instance -> data -> card_data [PICOPASS_CSN_BLOCK_INDEX ].data [0 ],
86
- instance -> data -> card_data [PICOPASS_CSN_BLOCK_INDEX ].data [1 ],
87
- instance -> data -> card_data [PICOPASS_CSN_BLOCK_INDEX ].data [2 ],
88
- instance -> data -> card_data [PICOPASS_CSN_BLOCK_INDEX ].data [3 ],
89
- instance -> data -> card_data [PICOPASS_CSN_BLOCK_INDEX ].data [4 ],
90
- instance -> data -> card_data [PICOPASS_CSN_BLOCK_INDEX ].data [5 ],
91
- instance -> data -> card_data [PICOPASS_CSN_BLOCK_INDEX ].data [6 ],
92
- instance -> data -> card_data [PICOPASS_CSN_BLOCK_INDEX ].data [7 ]);
99
+ instance -> data -> card_data [PICOPASS_CSN_BLOCK_INDEX ]);
93
100
94
101
PicopassBlock block = {};
95
102
error = picopass_poller_read_block (instance , PICOPASS_CONFIG_BLOCK_INDEX , & block );
@@ -100,18 +107,11 @@ NfcCommand picopass_poller_pre_auth_handler(PicopassPoller* instance) {
100
107
memcpy (
101
108
instance -> data -> card_data [PICOPASS_CONFIG_BLOCK_INDEX ].data ,
102
109
block .data ,
103
- sizeof ( PicopassBlock ) );
104
- FURI_LOG_D (
105
- TAG ,
110
+ PICOPASS_BLOCK_LEN );
111
+ instance -> data -> card_data [ PICOPASS_CONFIG_BLOCK_INDEX ]. valid = true;
112
+ picopass_poller_print_block (
106
113
"config %02x%02x%02x%02x%02x%02x%02x%02x" ,
107
- instance -> data -> card_data [PICOPASS_CONFIG_BLOCK_INDEX ].data [0 ],
108
- instance -> data -> card_data [PICOPASS_CONFIG_BLOCK_INDEX ].data [1 ],
109
- instance -> data -> card_data [PICOPASS_CONFIG_BLOCK_INDEX ].data [2 ],
110
- instance -> data -> card_data [PICOPASS_CONFIG_BLOCK_INDEX ].data [3 ],
111
- instance -> data -> card_data [PICOPASS_CONFIG_BLOCK_INDEX ].data [4 ],
112
- instance -> data -> card_data [PICOPASS_CONFIG_BLOCK_INDEX ].data [5 ],
113
- instance -> data -> card_data [PICOPASS_CONFIG_BLOCK_INDEX ].data [6 ],
114
- instance -> data -> card_data [PICOPASS_CONFIG_BLOCK_INDEX ].data [7 ]);
114
+ instance -> data -> card_data [PICOPASS_CONFIG_BLOCK_INDEX ]);
115
115
116
116
error = picopass_poller_read_block (instance , PICOPASS_SECURE_EPURSE_BLOCK_INDEX , & block );
117
117
if (error != PicopassErrorNone ) {
@@ -121,18 +121,11 @@ NfcCommand picopass_poller_pre_auth_handler(PicopassPoller* instance) {
121
121
memcpy (
122
122
instance -> data -> card_data [PICOPASS_SECURE_EPURSE_BLOCK_INDEX ].data ,
123
123
block .data ,
124
- sizeof ( PicopassBlock ) );
125
- FURI_LOG_D (
126
- TAG ,
124
+ PICOPASS_BLOCK_LEN );
125
+ instance -> data -> card_data [ PICOPASS_SECURE_EPURSE_BLOCK_INDEX ]. valid = true;
126
+ picopass_poller_print_block (
127
127
"epurse %02x%02x%02x%02x%02x%02x%02x%02x" ,
128
- instance -> data -> card_data [PICOPASS_SECURE_EPURSE_BLOCK_INDEX ].data [0 ],
129
- instance -> data -> card_data [PICOPASS_SECURE_EPURSE_BLOCK_INDEX ].data [1 ],
130
- instance -> data -> card_data [PICOPASS_SECURE_EPURSE_BLOCK_INDEX ].data [2 ],
131
- instance -> data -> card_data [PICOPASS_SECURE_EPURSE_BLOCK_INDEX ].data [3 ],
132
- instance -> data -> card_data [PICOPASS_SECURE_EPURSE_BLOCK_INDEX ].data [4 ],
133
- instance -> data -> card_data [PICOPASS_SECURE_EPURSE_BLOCK_INDEX ].data [5 ],
134
- instance -> data -> card_data [PICOPASS_SECURE_EPURSE_BLOCK_INDEX ].data [6 ],
135
- instance -> data -> card_data [PICOPASS_SECURE_EPURSE_BLOCK_INDEX ].data [7 ]);
128
+ instance -> data -> card_data [PICOPASS_SECURE_EPURSE_BLOCK_INDEX ]);
136
129
137
130
error = picopass_poller_read_block (instance , PICOPASS_SECURE_AIA_BLOCK_INDEX , & block );
138
131
if (error != PicopassErrorNone ) {
@@ -142,18 +135,11 @@ NfcCommand picopass_poller_pre_auth_handler(PicopassPoller* instance) {
142
135
memcpy (
143
136
instance -> data -> card_data [PICOPASS_SECURE_AIA_BLOCK_INDEX ].data ,
144
137
block .data ,
145
- sizeof ( PicopassBlock ) );
146
- FURI_LOG_D (
147
- TAG ,
138
+ PICOPASS_BLOCK_LEN );
139
+ instance -> data -> card_data [ PICOPASS_SECURE_AIA_BLOCK_INDEX ]. valid = true;
140
+ picopass_poller_print_block (
148
141
"aia %02x%02x%02x%02x%02x%02x%02x%02x" ,
149
- instance -> data -> card_data [PICOPASS_SECURE_AIA_BLOCK_INDEX ].data [0 ],
150
- instance -> data -> card_data [PICOPASS_SECURE_AIA_BLOCK_INDEX ].data [1 ],
151
- instance -> data -> card_data [PICOPASS_SECURE_AIA_BLOCK_INDEX ].data [2 ],
152
- instance -> data -> card_data [PICOPASS_SECURE_AIA_BLOCK_INDEX ].data [3 ],
153
- instance -> data -> card_data [PICOPASS_SECURE_AIA_BLOCK_INDEX ].data [4 ],
154
- instance -> data -> card_data [PICOPASS_SECURE_AIA_BLOCK_INDEX ].data [5 ],
155
- instance -> data -> card_data [PICOPASS_SECURE_AIA_BLOCK_INDEX ].data [6 ],
156
- instance -> data -> card_data [PICOPASS_SECURE_AIA_BLOCK_INDEX ].data [7 ]);
142
+ instance -> data -> card_data [PICOPASS_SECURE_AIA_BLOCK_INDEX ]);
157
143
158
144
instance -> state = PicopassPollerStateCheckSecurity ;
159
145
} while (false);
@@ -188,20 +174,20 @@ NfcCommand picopass_poller_check_security(PicopassPoller* instance) {
188
174
189
175
// Thank you proxmark!
190
176
PicopassBlock temp_block = {};
191
- memset (temp_block .data , 0xff , sizeof ( PicopassBlock ) );
177
+ memset (temp_block .data , 0xff , PICOPASS_BLOCK_LEN );
192
178
instance -> data -> pacs .legacy =
193
179
(memcmp (
194
180
instance -> data -> card_data [PICOPASS_SECURE_AIA_BLOCK_INDEX ].data ,
195
181
temp_block .data ,
196
- sizeof ( PicopassBlock ) ) == 0 );
182
+ PICOPASS_BLOCK_LEN ) == 0 );
197
183
198
184
temp_block .data [3 ] = 0x00 ;
199
185
temp_block .data [4 ] = 0x06 ;
200
186
instance -> data -> pacs .se_enabled =
201
187
(memcmp (
202
188
instance -> data -> card_data [PICOPASS_SECURE_AIA_BLOCK_INDEX ].data ,
203
189
temp_block .data ,
204
- sizeof ( PicopassBlock ) ) == 0 );
190
+ PICOPASS_BLOCK_LEN ) == 0 );
205
191
206
192
if (instance -> data -> pacs .se_enabled ) {
207
193
FURI_LOG_D (TAG , "SE enabled" );
@@ -401,6 +387,7 @@ NfcCommand picopass_poller_auth_handler(PicopassPoller* instance) {
401
387
if (instance -> mode == PicopassPollerModeRead ) {
402
388
memcpy (
403
389
instance -> data -> pacs .key , instance -> event_data .req_key .key , PICOPASS_KEY_LEN );
390
+ instance -> data -> card_data [PICOPASS_SECURE_KD_BLOCK_INDEX ].valid = true;
404
391
instance -> data -> pacs .elite_kdf = instance -> event_data .req_key .is_elite_key ;
405
392
picopass_poller_prepare_read (instance );
406
393
instance -> state = PicopassPollerStateReadBlock ;
@@ -457,7 +444,8 @@ NfcCommand picopass_poller_read_block_handler(PicopassPoller* instance) {
457
444
memcpy (
458
445
instance -> data -> card_data [instance -> current_block ].data ,
459
446
block .data ,
460
- sizeof (PicopassBlock ));
447
+ PICOPASS_BLOCK_LEN );
448
+ instance -> data -> card_data [instance -> current_block ].valid = true;
461
449
instance -> current_block ++ ;
462
450
} while (false);
463
451
0 commit comments