Fix UIF DO handling.
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user