Add support for Gemalto IDPrime OS version 3 (padded pin to 16 bytes with zeroes)

Fixes #2202
This commit is contained in:
Jakub Jelen 2021-01-14 17:20:04 +01:00 committed by Frank Morgner
parent 26adaf519c
commit a6ed34bbb5
3 changed files with 11 additions and 0 deletions

View File

@ -252,6 +252,10 @@ static int idprime_init(sc_card_t *card)
card->type = SC_CARD_TYPE_IDPRIME_V2;
sc_log(card->ctx, "Detected IDPrime applet version 2");
break;
case 0x03:
card->type = SC_CARD_TYPE_IDPRIME_V3;
sc_log(card->ctx, "Detected IDPrime applet version 3");
break;
default:
sc_log(card->ctx, "Unknown OS version received: %d", rbuf[11]);
break;

View File

@ -266,6 +266,7 @@ enum {
SC_CARD_TYPE_IDPRIME_BASE = 37000,
SC_CARD_TYPE_IDPRIME_V1,
SC_CARD_TYPE_IDPRIME_V2,
SC_CARD_TYPE_IDPRIME_V3,
SC_CARD_TYPE_IDPRIME_GENERIC,
/* eDO cards */

View File

@ -98,6 +98,12 @@ static int sc_pkcs15emu_idprime_init(sc_pkcs15_card_t *p15card)
pin_info.attrs.pin.max_length = 16;
pin_info.tries_left = -1;
if (card->type == SC_CARD_TYPE_IDPRIME_V3) {
pin_info.attrs.pin.flags |= SC_PKCS15_PIN_FLAG_NEEDS_PADDING;
pin_info.attrs.pin.stored_length = 16;
pin_info.attrs.pin.pad_char = 0x00;
}
sc_log(card->ctx, "IDPrime Adding pin with label=%s", pin_label);
strncpy(pin_obj.label, pin_label, SC_PKCS15_MAX_LABEL_SIZE - 1);
pin_obj.flags = SC_PKCS15_CO_FLAG_PRIVATE;