emrtd: Employ a workaround for data length of 0x80
This is to make US passport hashes read properly. https://wf.lavatech.top/ave-but-random/emrtd-data-quirks#EF_SOD
This commit is contained in:
@@ -217,6 +217,11 @@ static int emrtd_get_asn1_data_length(uint8_t *datain, int datainlen, int offset
|
||||
PrintAndLogEx(DEBUG, "asn1 datalength, lenfield: %02X", lenfield);
|
||||
if (lenfield <= 0x7f) {
|
||||
return lenfield;
|
||||
} else if (lenfield == 0x80) {
|
||||
// TODO: 0x80 means indeterminate.
|
||||
// Giving rest of the file is a workaround, nothing more, nothing less.
|
||||
// More at https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/
|
||||
return datainlen;
|
||||
} else if (lenfield == 0x81) {
|
||||
return ((int) * (datain + offset + 1));
|
||||
} else if (lenfield == 0x82) {
|
||||
@@ -231,7 +236,7 @@ static int emrtd_get_asn1_field_length(uint8_t *datain, int datainlen, int offse
|
||||
PrintAndLogEx(DEBUG, "asn1 fieldlength, datain: %s", sprint_hex_inrow(datain, datainlen));
|
||||
int lenfield = (int) * (datain + offset);
|
||||
PrintAndLogEx(DEBUG, "asn1 fieldlength, lenfield: %02X", lenfield);
|
||||
if (lenfield <= 0x7F) {
|
||||
if (lenfield <= 0x80) {
|
||||
return 1;
|
||||
} else if (lenfield == 0x81) {
|
||||
return 2;
|
||||
|
||||
Reference in New Issue
Block a user