Fix UIF DO handling.

This commit is contained in:
NIIBE Yutaka
2018-09-27 22:29:49 +09:00
parent ca79f5421f
commit 12079974fd

View File

@@ -1797,6 +1797,10 @@ gpg_data_scan (const uint8_t *do_start, const uint8_t *do_end)
digital_signature_counter = 0; digital_signature_counter = 0;
uif_flags = 0; uif_flags = 0;
/* Clear all data objects. */
for (i = 0; i < NR_DO__LAST__; i++)
do_ptr[i] = NULL;
/* When the card is terminated no data objects are valid. */ /* When the card is terminated no data objects are valid. */
if (do_start == NULL) if (do_start == NULL)
return; return;
@@ -1859,6 +1863,7 @@ gpg_data_scan (const uint8_t *do_start, const uint8_t *do_end)
case NR_DO_UIF_AUT: case NR_DO_UIF_AUT:
uif_flags &= ~(3 << ((nr - NR_DO_UIF_SIG) * 2)); uif_flags &= ~(3 << ((nr - NR_DO_UIF_SIG) * 2));
uif_flags |= (second_byte & 3) << ((nr - NR_DO_UIF_SIG) * 2); uif_flags |= (second_byte & 3) << ((nr - NR_DO_UIF_SIG) * 2);
p++;
break; break;
case NR_COUNTER_123: case NR_COUNTER_123:
p++; p++;
@@ -1959,6 +1964,13 @@ gpg_data_copy (const uint8_t *p_start)
p += 4; p += 4;
} }
for (i = 0; i < 3; i++)
if ((v = (uif_flags & (3 << (i * 2)))))
{
flash_enum_write_internal (p, NR_DO_UIF_SIG + 1, v);
p += 2;
}
data_objects_number_of_bytes = 0; data_objects_number_of_bytes = 0;
for (i = 0; i < NR_DO__LAST__; i++) for (i = 0; i < NR_DO__LAST__; i++)
if (do_ptr[i] != NULL) if (do_ptr[i] != NULL)