From a6ed34bbb5cbd10b3a8f92494271f2e1a428ee28 Mon Sep 17 00:00:00 2001 From: Jakub Jelen Date: Thu, 14 Jan 2021 17:20:04 +0100 Subject: [PATCH] Add support for Gemalto IDPrime OS version 3 (padded pin to 16 bytes with zeroes) Fixes #2202 --- src/libopensc/card-idprime.c | 4 ++++ src/libopensc/cards.h | 1 + src/libopensc/pkcs15-idprime.c | 6 ++++++ 3 files changed, 11 insertions(+) diff --git a/src/libopensc/card-idprime.c b/src/libopensc/card-idprime.c index 8ca393d1..1e667b89 100644 --- a/src/libopensc/card-idprime.c +++ b/src/libopensc/card-idprime.c @@ -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; diff --git a/src/libopensc/cards.h b/src/libopensc/cards.h index 16846d15..4d876f4d 100644 --- a/src/libopensc/cards.h +++ b/src/libopensc/cards.h @@ -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 */ diff --git a/src/libopensc/pkcs15-idprime.c b/src/libopensc/pkcs15-idprime.c index 219dfa8c..31343622 100644 --- a/src/libopensc/pkcs15-idprime.c +++ b/src/libopensc/pkcs15-idprime.c @@ -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;