diff --git a/src/fs/file.c b/src/fs/file.c index ad2af10..5adb11a 100644 --- a/src/fs/file.c +++ b/src/fs/file.c @@ -262,19 +262,8 @@ void scan_flash() { file_t *file = (file_t *)search_by_fid(fid, NULL, SPECIFY_EF); if (!file) { file = file_new(fid); - if ((fid & 0xff00) == (KEY_PREFIX << 8)) { - //add_file_to_chain(file, &ef_kf); - } - else if ((fid & 0xff00) == (PRKD_PREFIX << 8)) { - //add_file_to_chain(file, &ef_prkdf); - } - else if ((fid & 0xff00) == (CD_PREFIX << 8)) { - //add_file_to_chain(file, &ef_cdf); - } - else if ((fid & 0xff00) == (EE_CERTIFICATE_PREFIX << 8)) { - //add_file_to_chain(file, &ef_pukdf); - } - else { + uint8_t pfx = fid >> 8; + if (pfx != KEY_PREFIX && pfx != PRKD_PREFIX && pfx != CD_PREFIX && pfx != EE_CERTIFICATE_PREFIX && pfx != DCOD_PREFIX && pfx != PROT_DATA_PREFIX && pfx != DATA_PREFIX) { TU_LOG1("SCAN FOUND ORPHAN FILE: %x\r\n",fid); continue; } diff --git a/src/hsm/sc_hsm.c b/src/hsm/sc_hsm.c index 7e22893..1203991 100644 --- a/src/hsm/sc_hsm.c +++ b/src/hsm/sc_hsm.c @@ -117,16 +117,14 @@ static int cmd_select() { //if ((fid & 0xff00) == (KEY_PREFIX << 8)) // fid = (PRKD_PREFIX << 8) | (fid & 0xff); - - if ((fid & 0xff00) == (PRKD_PREFIX << 8)) { - if (!(pe = search_dynamic_file(fid))) - return SW_FILE_NOT_FOUND(); - } - else if ((fid & 0xff00) == (CD_PREFIX << 8)) { - if (!(pe = search_dynamic_file(fid))) - return SW_FILE_NOT_FOUND(); - } - else if ((fid & 0xff00) == (EE_CERTIFICATE_PREFIX << 8)) { + + uint8_t pfx = fid >> 8; + if (pfx == PRKD_PREFIX || + pfx == CD_PREFIX || + pfx == EE_CERTIFICATE_PREFIX || + pfx == DCOD_PREFIX || + pfx == DATA_PREFIX || + pfx == PROT_DATA_PREFIX) { if (!(pe = search_dynamic_file(fid))) return SW_FILE_NOT_FOUND(); } @@ -297,6 +295,14 @@ static int cmd_list_keys() res_APDU[res_APDU_size++] = f->fid & 0xff; } } + + for (int i = 0; i < dynamic_files; i++) { + file_t *f = &dynamic_file[i]; + if ((f->fid & 0xff00) == (DCOD_PREFIX << 8)) { + res_APDU[res_APDU_size++] = DCOD_PREFIX; + res_APDU[res_APDU_size++] = f->fid & 0xff; + } + } return SW_OK(); }