@@ -41,7 +41,7 @@ static bool picopass_device_save_file_seader(
41
41
FuriString * file_path ) {
42
42
furi_assert (dev );
43
43
PicopassPacs * pacs = & dev -> dev_data .pacs ;
44
- PicopassBlock * AA1 = dev -> dev_data .AA1 ;
44
+ PicopassBlock * card_data = dev -> dev_data .card_data ;
45
45
bool result = false;
46
46
47
47
const char * seader_file_header = "Flipper Seader Credential" ;
@@ -67,17 +67,17 @@ static bool picopass_device_save_file_seader(
67
67
// TODO: save SR vs SE more properly
68
68
if (pacs -> sio ) { // SR
69
69
for (uint8_t i = 0 ; i < 8 ; i ++ ) {
70
- memcpy (sio + (i * 8 ), AA1 [10 + i ].data , PICOPASS_BLOCK_LEN );
70
+ memcpy (sio + (i * 8 ), card_data [10 + i ].data , PICOPASS_BLOCK_LEN );
71
71
}
72
72
if (!flipper_format_write_hex (file , "SIO" , sio , sizeof (sio ))) break ;
73
73
} else if (pacs -> se_enabled ) { //SE
74
74
for (uint8_t i = 0 ; i < 8 ; i ++ ) {
75
- memcpy (sio + (i * 8 ), AA1 [6 + i ].data , PICOPASS_BLOCK_LEN );
75
+ memcpy (sio + (i * 8 ), card_data [6 + i ].data , PICOPASS_BLOCK_LEN );
76
76
}
77
77
if (!flipper_format_write_hex (file , "SIO" , sio , sizeof (sio ))) break ;
78
78
}
79
79
if (!flipper_format_write_hex (
80
- file , "Diversifier" , AA1 [PICOPASS_CSN_BLOCK_INDEX ].data , PICOPASS_BLOCK_LEN ))
80
+ file , "Diversifier" , card_data [PICOPASS_CSN_BLOCK_INDEX ].data , PICOPASS_BLOCK_LEN ))
81
81
break ;
82
82
83
83
result = true;
@@ -162,13 +162,13 @@ static bool picopass_device_save_file(
162
162
bool saved = false;
163
163
FlipperFormat * file = flipper_format_file_alloc (dev -> storage );
164
164
PicopassPacs * pacs = & dev -> dev_data .pacs ;
165
- PicopassBlock * AA1 = dev -> dev_data .AA1 ;
165
+ PicopassBlock * card_data = dev -> dev_data .card_data ;
166
166
FuriString * temp_str ;
167
167
temp_str = furi_string_alloc ();
168
168
169
169
if (dev -> format == PicopassDeviceSaveFormatPartial ) {
170
170
// Clear key that may have been set when doing key tests for legacy
171
- memset (AA1 [PICOPASS_SECURE_KD_BLOCK_INDEX ].data , 0 , PICOPASS_BLOCK_LEN );
171
+ memset (card_data [PICOPASS_SECURE_KD_BLOCK_INDEX ].data , 0 , PICOPASS_BLOCK_LEN );
172
172
}
173
173
174
174
do {
@@ -197,13 +197,13 @@ static bool picopass_device_save_file(
197
197
if (!flipper_format_write_comment_cstr (file , "Picopass blocks" )) break ;
198
198
bool block_saved = true;
199
199
200
- size_t app_limit = AA1 [PICOPASS_CONFIG_BLOCK_INDEX ].data [0 ] < PICOPASS_MAX_APP_LIMIT ?
201
- AA1 [PICOPASS_CONFIG_BLOCK_INDEX ].data [0 ] :
200
+ size_t app_limit = card_data [PICOPASS_CONFIG_BLOCK_INDEX ].data [0 ] < PICOPASS_MAX_APP_LIMIT ?
201
+ card_data [PICOPASS_CONFIG_BLOCK_INDEX ].data [0 ] :
202
202
PICOPASS_MAX_APP_LIMIT ;
203
203
for (size_t i = 0 ; i < app_limit ; i ++ ) {
204
204
furi_string_printf (temp_str , "Block %d" , i );
205
205
if (!flipper_format_write_hex (
206
- file , furi_string_get_cstr (temp_str ), AA1 [i ].data , PICOPASS_BLOCK_LEN )) {
206
+ file , furi_string_get_cstr (temp_str ), card_data [i ].data , PICOPASS_BLOCK_LEN )) {
207
207
block_saved = false;
208
208
break ;
209
209
}
@@ -245,7 +245,7 @@ bool picopass_device_save(PicopassDevice* dev, const char* dev_name) {
245
245
static bool picopass_device_load_data (PicopassDevice * dev , FuriString * path , bool show_dialog ) {
246
246
bool parsed = false;
247
247
FlipperFormat * file = flipper_format_file_alloc (dev -> storage );
248
- PicopassBlock * AA1 = dev -> dev_data .AA1 ;
248
+ PicopassBlock * card_data = dev -> dev_data .card_data ;
249
249
PicopassPacs * pacs = & dev -> dev_data .pacs ;
250
250
FuriString * temp_str ;
251
251
temp_str = furi_string_alloc ();
@@ -272,26 +272,26 @@ static bool picopass_device_load_data(PicopassDevice* dev, FuriString* path, boo
272
272
for (size_t i = 0 ; i < 6 ; i ++ ) {
273
273
furi_string_printf (temp_str , "Block %d" , i );
274
274
if (!flipper_format_read_hex (
275
- file , furi_string_get_cstr (temp_str ), AA1 [i ].data , PICOPASS_BLOCK_LEN )) {
275
+ file , furi_string_get_cstr (temp_str ), card_data [i ].data , PICOPASS_BLOCK_LEN )) {
276
276
block_read = false;
277
277
break ;
278
278
}
279
279
}
280
280
281
- size_t app_limit = AA1 [PICOPASS_CONFIG_BLOCK_INDEX ].data [0 ];
281
+ size_t app_limit = card_data [PICOPASS_CONFIG_BLOCK_INDEX ].data [0 ];
282
282
// Fix for unpersonalized cards that have app_limit set to 0xFF
283
283
if (app_limit > PICOPASS_MAX_APP_LIMIT ) app_limit = PICOPASS_MAX_APP_LIMIT ;
284
284
for (size_t i = 6 ; i < app_limit ; i ++ ) {
285
285
furi_string_printf (temp_str , "Block %d" , i );
286
286
if (!flipper_format_read_hex (
287
- file , furi_string_get_cstr (temp_str ), AA1 [i ].data , PICOPASS_BLOCK_LEN )) {
287
+ file , furi_string_get_cstr (temp_str ), card_data [i ].data , PICOPASS_BLOCK_LEN )) {
288
288
block_read = false;
289
289
break ;
290
290
}
291
291
}
292
292
if (!block_read ) break ;
293
293
294
- picopass_device_parse_credential (AA1 , pacs );
294
+ picopass_device_parse_credential (card_data , pacs );
295
295
picopass_device_parse_wiegand (pacs -> credential , pacs );
296
296
297
297
parsed = true;
@@ -364,7 +364,7 @@ bool picopass_file_select(PicopassDevice* dev) {
364
364
365
365
void picopass_device_data_clear (PicopassDeviceData * dev_data ) {
366
366
for (size_t i = 0 ; i < PICOPASS_MAX_APP_LIMIT ; i ++ ) {
367
- memset (dev_data -> AA1 [i ].data , 0 , sizeof (dev_data -> AA1 [i ].data ));
367
+ memset (dev_data -> card_data [i ].data , 0 , sizeof (dev_data -> card_data [i ].data ));
368
368
}
369
369
dev_data -> pacs .legacy = false;
370
370
dev_data -> pacs .se_enabled = false;
@@ -419,30 +419,30 @@ void picopass_device_decrypt(uint8_t* enc_data, uint8_t* dec_data) {
419
419
mbedtls_des3_free (& ctx );
420
420
}
421
421
422
- void picopass_device_parse_credential (PicopassBlock * AA1 , PicopassPacs * pacs ) {
423
- pacs -> biometrics = AA1 [6 ].data [4 ];
424
- pacs -> pin_length = AA1 [6 ].data [6 ] & 0x0F ;
425
- pacs -> encryption = AA1 [6 ].data [7 ];
422
+ void picopass_device_parse_credential (PicopassBlock * card_data , PicopassPacs * pacs ) {
423
+ pacs -> biometrics = card_data [6 ].data [4 ];
424
+ pacs -> pin_length = card_data [6 ].data [6 ] & 0x0F ;
425
+ pacs -> encryption = card_data [6 ].data [7 ];
426
426
427
427
if (pacs -> encryption == PicopassDeviceEncryption3DES ) {
428
428
FURI_LOG_D (TAG , "3DES Encrypted" );
429
- picopass_device_decrypt (AA1 [7 ].data , pacs -> credential );
429
+ picopass_device_decrypt (card_data [7 ].data , pacs -> credential );
430
430
431
- picopass_device_decrypt (AA1 [8 ].data , pacs -> pin0 );
431
+ picopass_device_decrypt (card_data [8 ].data , pacs -> pin0 );
432
432
433
- picopass_device_decrypt (AA1 [9 ].data , pacs -> pin1 );
433
+ picopass_device_decrypt (card_data [9 ].data , pacs -> pin1 );
434
434
} else if (pacs -> encryption == PicopassDeviceEncryptionNone ) {
435
435
FURI_LOG_D (TAG , "No Encryption" );
436
- memcpy (pacs -> credential , AA1 [7 ].data , PICOPASS_BLOCK_LEN );
437
- memcpy (pacs -> pin0 , AA1 [8 ].data , PICOPASS_BLOCK_LEN );
438
- memcpy (pacs -> pin1 , AA1 [9 ].data , PICOPASS_BLOCK_LEN );
436
+ memcpy (pacs -> credential , card_data [7 ].data , PICOPASS_BLOCK_LEN );
437
+ memcpy (pacs -> pin0 , card_data [8 ].data , PICOPASS_BLOCK_LEN );
438
+ memcpy (pacs -> pin1 , card_data [9 ].data , PICOPASS_BLOCK_LEN );
439
439
} else if (pacs -> encryption == PicopassDeviceEncryptionDES ) {
440
440
FURI_LOG_D (TAG , "DES Encrypted" );
441
441
} else {
442
442
FURI_LOG_D (TAG , "Unknown encryption" );
443
443
}
444
444
445
- pacs -> sio = (AA1 [10 ].data [0 ] == 0x30 ); // rough check
445
+ pacs -> sio = (card_data [10 ].data [0 ] == 0x30 ); // rough check
446
446
}
447
447
448
448
void picopass_device_parse_wiegand (uint8_t * credential , PicopassPacs * pacs ) {
@@ -466,8 +466,8 @@ void picopass_device_parse_wiegand(uint8_t* credential, PicopassPacs* pacs) {
466
466
467
467
bool picopass_device_hid_csn (PicopassDevice * dev ) {
468
468
furi_assert (dev );
469
- PicopassBlock * AA1 = dev -> dev_data .AA1 ;
470
- uint8_t * csn = AA1 [PICOPASS_CSN_BLOCK_INDEX ].data ;
469
+ PicopassBlock * card_data = dev -> dev_data .card_data ;
470
+ uint8_t * csn = card_data [PICOPASS_CSN_BLOCK_INDEX ].data ;
471
471
// From Proxmark3 RRG sourcecode
472
472
bool isHidRange = (memcmp (csn + 5 , "\xFF\x12\xE0" , 3 ) == 0 ) && ((csn [4 ] & 0xF0 ) == 0xF0 );
473
473
0 commit comments