From 835fa61102ba8b9c5884f5f4be58d0f956f5b5f1 Mon Sep 17 00:00:00 2001 From: frankmorgner Date: Mon, 12 Apr 2010 12:09:40 +0000 Subject: [PATCH] - trying new apdu to reset retry counter in pace_test - added pace wrapper for sm_transmit_apdu which automatically increments the ssc git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@67 96b47cad-a561-4643-ad3b-153ac7d7599c --- ccid/pace.c | 28 ++++++++++++++++++++++++---- ccid/pace.h | 3 +++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/ccid/pace.c b/ccid/pace.c index f600974..7a2c208 100644 --- a/ccid/pace.c +++ b/ccid/pace.c @@ -828,6 +828,16 @@ int pace_test(sc_card_t *card) SC_TEST_RET(card->ctx, EstablishPACEChannel(card, in, &out, &outlen, &sctx), "Could not establish PACE channel."); + /* reset retry counter */ + apdu.cla = 0x00; + apdu.ins = 0x2C; + apdu.p1 = 0x03; + apdu.p2 = 0x02; + apdu.cse = SC_APDU_CASE_1; + + SC_TEST_RET(card->ctx, pace_transmit_apdu(&sctx, card, &apdu), + "Could not reset retry counter of CAN"); + /* select CardSecurity */ apdu.cla = 0x00; apdu.ins = 0xA4; @@ -841,8 +851,8 @@ int pace_test(sc_card_t *card) apdu.le = 0x00; apdu.cse = SC_APDU_CASE_4_SHORT; - /*increment_ssc(&sctx);*/ - sm_transmit_apdu(&sctx, card, &apdu); + SC_TEST_RET(card->ctx, pace_transmit_apdu(&sctx, card, &apdu), + "Could not select EF.CardSecurity"); /* read CardSecurity */ apdu.cla = 0x00; @@ -852,8 +862,8 @@ int pace_test(sc_card_t *card) apdu.le = 0x00; apdu.cse = SC_APDU_CASE_2_SHORT; - increment_ssc(&sctx); - sm_transmit_apdu(&sctx, card, &apdu); + SC_TEST_RET(card->ctx, pace_transmit_apdu(&sctx, card, &apdu), + "Could not read EF.CardSecurity"); return SC_SUCCESS; } @@ -1140,4 +1150,14 @@ err: SC_FUNC_RETURN(card->ctx, SC_LOG_TYPE_ERROR, r); } +int pace_transmit_apdu(struct sm_ctx *sctx, sc_card_t *card, + sc_apdu_t *apdu) +{ + SC_TEST_RET(card->ctx, sm_transmit_apdu(sctx, card, apdu), + "Could not send SM APDU"); + increment_ssc(sctx); + + SC_FUNC_RETURN(card->ctx, SC_LOG_TYPE_DEBUG, SC_SUCCESS); +} + #endif diff --git a/ccid/pace.h b/ccid/pace.h index 451d7c5..d4f69d7 100644 --- a/ccid/pace.h +++ b/ccid/pace.h @@ -75,6 +75,9 @@ int EstablishPACEChannel(sc_card_t *card, const __u8 *in, __u8 **out, size_t *outlen, struct sm_ctx *ctx); int pace_test(sc_card_t *card); +int pace_transmit_apdu(struct sm_ctx *sctx, sc_card_t *card, + sc_apdu_t *apdu); + #ifdef __cplusplus } #endif