- 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
This commit is contained in:
28
ccid/pace.c
28
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),
|
SC_TEST_RET(card->ctx, EstablishPACEChannel(card, in, &out, &outlen, &sctx),
|
||||||
"Could not establish PACE channel.");
|
"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 */
|
/* select CardSecurity */
|
||||||
apdu.cla = 0x00;
|
apdu.cla = 0x00;
|
||||||
apdu.ins = 0xA4;
|
apdu.ins = 0xA4;
|
||||||
@@ -841,8 +851,8 @@ int pace_test(sc_card_t *card)
|
|||||||
apdu.le = 0x00;
|
apdu.le = 0x00;
|
||||||
apdu.cse = SC_APDU_CASE_4_SHORT;
|
apdu.cse = SC_APDU_CASE_4_SHORT;
|
||||||
|
|
||||||
/*increment_ssc(&sctx);*/
|
SC_TEST_RET(card->ctx, pace_transmit_apdu(&sctx, card, &apdu),
|
||||||
sm_transmit_apdu(&sctx, card, &apdu);
|
"Could not select EF.CardSecurity");
|
||||||
|
|
||||||
/* read CardSecurity */
|
/* read CardSecurity */
|
||||||
apdu.cla = 0x00;
|
apdu.cla = 0x00;
|
||||||
@@ -852,8 +862,8 @@ int pace_test(sc_card_t *card)
|
|||||||
apdu.le = 0x00;
|
apdu.le = 0x00;
|
||||||
apdu.cse = SC_APDU_CASE_2_SHORT;
|
apdu.cse = SC_APDU_CASE_2_SHORT;
|
||||||
|
|
||||||
increment_ssc(&sctx);
|
SC_TEST_RET(card->ctx, pace_transmit_apdu(&sctx, card, &apdu),
|
||||||
sm_transmit_apdu(&sctx, card, &apdu);
|
"Could not read EF.CardSecurity");
|
||||||
|
|
||||||
return SC_SUCCESS;
|
return SC_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -1140,4 +1150,14 @@ err:
|
|||||||
SC_FUNC_RETURN(card->ctx, SC_LOG_TYPE_ERROR, r);
|
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
|
#endif
|
||||||
|
|||||||
@@ -75,6 +75,9 @@ int EstablishPACEChannel(sc_card_t *card, const __u8 *in,
|
|||||||
__u8 **out, size_t *outlen, struct sm_ctx *ctx);
|
__u8 **out, size_t *outlen, struct sm_ctx *ctx);
|
||||||
int pace_test(sc_card_t *card);
|
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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user