AuthentIC: when using SM decrease max-send-size value

update list of APDUs that always sent in plain (non SM wrapped) mode
This commit is contained in:
Viktor Tarasov 2012-06-19 17:37:51 +02:00
parent 34541e95c4
commit f9a13179d8
1 changed files with 17 additions and 12 deletions

View File

@ -2000,6 +2000,7 @@ authentic_manage_sdo(struct sc_card *card, struct sc_authentic_sdo *sdo, unsigne
if (card->max_send_size > 255) if (card->max_send_size > 255)
card->max_send_size = 255; card->max_send_size = 255;
rv = sc_transmit_apdu(card, &apdu); rv = sc_transmit_apdu(card, &apdu);
card->max_send_size = save_max_send; card->max_send_size = save_max_send;
LOG_TEST_RET(ctx, rv, "APDU transmit failed"); LOG_TEST_RET(ctx, rv, "APDU transmit failed");
@ -2248,6 +2249,9 @@ authentic_sm_open(struct sc_card *card)
memcpy(card->sm_ctx.info.config_section, card->sm_ctx.config_section, sizeof(card->sm_ctx.info.config_section)); memcpy(card->sm_ctx.info.config_section, card->sm_ctx.config_section, sizeof(card->sm_ctx.info.config_section));
sc_log(ctx, "SM context config '%s'; SM mode 0x%X", card->sm_ctx.info.config_section, card->sm_ctx.sm_mode); sc_log(ctx, "SM context config '%s'; SM mode 0x%X", card->sm_ctx.info.config_section, card->sm_ctx.sm_mode);
if (card->sm_ctx.sm_mode == SM_MODE_TRANSMIT && card->max_send_size == 0)
card->max_send_size = 239;
rv = authentic_sm_acl_init (card, &card->sm_ctx.info, SM_CMD_INITIALIZE, init_data, &init_data_len); rv = authentic_sm_acl_init (card, &card->sm_ctx.info, SM_CMD_INITIALIZE, init_data, &init_data_len);
LOG_TEST_RET(ctx, rv, "authentIC: cannot open SM"); LOG_TEST_RET(ctx, rv, "authentIC: cannot open SM");
@ -2304,18 +2308,19 @@ authentic_sm_get_wrapped_apdu(struct sc_card *card, struct sc_apdu *plain, struc
plain->cla, plain->ins, plain->p1, plain->p2, plain->datalen, plain->data); plain->cla, plain->ins, plain->p1, plain->p2, plain->datalen, plain->data);
*sm_apdu = NULL; *sm_apdu = NULL;
if (plain->cla & 0x04) if ((plain->cla & 0x04)
return 0; || (plain->cla==0x00 && plain->ins==0x22)
else if (plain->cla==0x00 && plain->ins==0xA4) || (plain->cla==0x00 && plain->ins==0x2A)
return 0; || (plain->cla==0x00 && plain->ins==0x84)
else if (plain->cla==0x00 && plain->ins==0xC0) || (plain->cla==0x00 && plain->ins==0x88)
return 0; || (plain->cla==0x00 && plain->ins==0xA4)
else if (plain->cla==0x00 && plain->ins==0x20) || (plain->cla==0x00 && plain->ins==0xC0)
return 0; || (plain->cla==0x00 && plain->ins==0xCA)
else if (plain->cla==0x80 && plain->ins==0x2E) || (plain->cla==0x80 && plain->ins==0x50)
return 0; ) {
else if (plain->cla==0x80 && plain->ins==0x50) sc_log(ctx, "SM wrap is not applied for this APDU");
return 0; LOG_FUNC_RETURN(ctx, SC_SUCCESS);
}
if (card->sm_ctx.sm_mode != SM_MODE_TRANSMIT) if (card->sm_ctx.sm_mode != SM_MODE_TRANSMIT)
LOG_FUNC_RETURN(ctx, SC_ERROR_SM_NOT_INITIALIZED); LOG_FUNC_RETURN(ctx, SC_ERROR_SM_NOT_INITIALIZED);