emrtd: split lds tag det to a different func and improve emrtd_lds_get_data_by_tag
This commit is contained in:
@@ -622,8 +622,15 @@ static int emrtd_read_file(uint8_t *dataout, int *dataoutlen, uint8_t *kenc, uin
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int emrtd_lds_determine_tag_length(uint8_t tag) {
|
||||||
|
if ((tag == 0x5F) || (tag == 0x7F)) {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static bool emrtd_lds_get_data_by_tag(uint8_t *datain, int datainlen, uint8_t *dataout, int *dataoutlen, int tag1, int tag2, bool twobytetag) {
|
static bool emrtd_lds_get_data_by_tag(uint8_t *datain, int datainlen, uint8_t *dataout, int *dataoutlen, int tag1, int tag2, bool twobytetag) {
|
||||||
int offset = 1;
|
int offset = emrtd_lds_determine_tag_length(*datain);
|
||||||
offset += emrtd_get_asn1_field_length(datain, datainlen, offset);
|
offset += emrtd_get_asn1_field_length(datain, datainlen, offset);
|
||||||
|
|
||||||
int e_idlen = 0;
|
int e_idlen = 0;
|
||||||
@@ -632,11 +639,7 @@ static bool emrtd_lds_get_data_by_tag(uint8_t *datain, int datainlen, uint8_t *d
|
|||||||
while (offset < datainlen) {
|
while (offset < datainlen) {
|
||||||
PrintAndLogEx(DEBUG, "emrtd_lds_get_data_by_tag, offset: %i, data: %X", offset, *(datain + offset));
|
PrintAndLogEx(DEBUG, "emrtd_lds_get_data_by_tag, offset: %i, data: %X", offset, *(datain + offset));
|
||||||
// Determine element ID length to set as offset on asn1datalength
|
// Determine element ID length to set as offset on asn1datalength
|
||||||
if ((*(datain + offset) == 0x5F) || (*(datain + offset) == 0x7F)) {
|
e_idlen = emrtd_lds_determine_tag_length(*(datain + offset));
|
||||||
e_idlen = 2;
|
|
||||||
} else {
|
|
||||||
e_idlen = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the length of the element
|
// Get the length of the element
|
||||||
e_datalen = emrtd_get_asn1_data_length(datain + offset, datainlen - offset, e_idlen);
|
e_datalen = emrtd_get_asn1_data_length(datain + offset, datainlen - offset, e_idlen);
|
||||||
|
|||||||
Reference in New Issue
Block a user