Fixed version check for key wrapping functionality. Return needed buffer size in myeid_wrap_key, if no buffer or too small buffer is provided.

This commit is contained in:
Hannu Honkanen 2018-05-08 05:27:00 -07:00
parent 6b8c284d3e
commit c891ad2aad
1 changed files with 4 additions and 5 deletions

View File

@ -227,7 +227,7 @@ static int myeid_init(struct sc_card *card)
/* State that we have an RNG */
card->caps |= SC_CARD_CAP_RNG | SC_CARD_CAP_ISO7816_PIN_INFO;
if ((card->version.fw_major == 40 && card->version.fw_minor == 10 )
if ((card->version.fw_major == 40 && card->version.fw_minor >= 10 )
|| card->version.fw_major >= 41)
card->caps |= SC_CARD_CAP_WRAP_KEY | SC_CARD_CAP_UNWRAP_KEY
| SC_CARD_CAP_ONCARD_SESSION_OBJECTS;
@ -1273,12 +1273,11 @@ static int myeid_wrap_key(struct sc_card *card, u8 *out, size_t outlen)
r = sc_transmit_apdu(card, &apdu);
LOG_TEST_RET(ctx, r, "APDU transmit failed");
r = sc_check_sw(card, apdu.sw1, apdu.sw2);
LOG_TEST_RET(ctx, r, "compute_signature failed");
LOG_TEST_RET(ctx, r, "wrap key failed");
if (apdu.resplen > outlen)
LOG_FUNC_RETURN(ctx, SC_ERROR_BUFFER_TOO_SMALL);
if (apdu.resplen <= outlen)
memcpy(out, apdu.resp, apdu.resplen);
memcpy(out, apdu.resp, apdu.resplen);
LOG_FUNC_RETURN(ctx, apdu.resplen);
}