diff --git a/ccid/src/pace/sm.h b/ccid/src/pace/sm.h index 80dc6a9..5d043e8 100644 --- a/ccid/src/pace/sm.h +++ b/ccid/src/pace/sm.h @@ -53,7 +53,7 @@ struct sm_ctx { sc_apdu_t *sm_apdu); }; -int sm_transmit_apdu(const struct sm_ctx *sctx, sc_card_t *card, +int sm_transmit_apdu(struct sm_ctx *sctx, sc_card_t *card, sc_apdu_t *apdu); #ifdef __cplusplus diff --git a/ccid/src/sm.c b/ccid/src/sm.c index 2f85233..2c2a65e 100644 --- a/ccid/src/sm.c +++ b/ccid/src/sm.c @@ -579,7 +579,7 @@ err: return r; } -int sm_transmit_apdu(const struct sm_ctx *sctx, sc_card_t *card, +int sm_transmit_apdu(struct sm_ctx *sctx, sc_card_t *card, sc_apdu_t *apdu) { sc_apdu_t sm_apdu; @@ -590,13 +590,14 @@ int sm_transmit_apdu(const struct sm_ctx *sctx, sc_card_t *card, sm_apdu.resp = rbuf; sm_apdu.resplen = sizeof rbuf; - if ((apdu->cla & 0x0C) == 0x0C) { - sc_debug(card->ctx, "Given APDU is already protected with some secure messaging."); + if (!sctx || !sctx->active) { + sc_debug(card->ctx, "Secure messaging disabled."); return sc_transmit_apdu(card, apdu); } - if (!sctx || !sctx->active) { - sc_debug(card->ctx, "Secure messaging disabled."); + if ((apdu->cla & 0x0C) == 0x0C) { + sc_debug(card->ctx, "Given APDU is already protected with some secure messaging. Deactivating own SM context."); + sctx->active = 0; return sc_transmit_apdu(card, apdu); }