@@ -268,11 +268,15 @@ epass2003_check_sw(struct sc_card *card, unsigned int sw1, unsigned int sw2)
268
268
static int
269
269
sc_transmit_apdu_t (sc_card_t * card , sc_apdu_t * apdu )
270
270
{
271
+ int r ;
271
272
size_t resplen = apdu -> resplen ;
272
- int r = sc_transmit_apdu (card , apdu );
273
- if ( ((0x69 == apdu -> sw1 ) && (0x85 == apdu -> sw2 )) || ((0x69 == apdu -> sw1 ) && (0x88 == apdu -> sw2 )))
273
+
274
+ r = sc_transmit_apdu (card , apdu );
275
+ if (apdu && (((0x69 == apdu -> sw1 ) && (0x85 == apdu -> sw2 )) || ((0x69 == apdu -> sw1 ) && (0x88 == apdu -> sw2 ))))
274
276
{
275
- epass2003_refresh (card );
277
+ r = epass2003_refresh (card );
278
+ LOG_TEST_RET (card -> ctx , r , "epass2003_refresh failed" );
279
+
276
280
/* renew old resplen */
277
281
apdu -> resplen = resplen ;
278
282
r = sc_transmit_apdu (card , apdu );
@@ -962,8 +966,8 @@ epass2003_refresh(struct sc_card *card)
962
966
card -> sm_ctx .sm_mode = 0 ;
963
967
memset (exdata -> icv_mac , 0 , sizeof (exdata -> icv_mac ));
964
968
r = mutual_auth (card , g_init_key_enc , g_init_key_mac );
965
- card -> sm_ctx .sm_mode = SM_MODE_TRANSMIT ;
966
969
LOG_TEST_RET (card -> ctx , r , "mutual_auth failed" );
970
+ card -> sm_ctx .sm_mode = SM_MODE_TRANSMIT ;
967
971
}
968
972
969
973
return r ;
@@ -1766,6 +1770,7 @@ static int epass2003_match_card(struct sc_card *card)
1766
1770
static int
1767
1771
epass2003_init (struct sc_card * card )
1768
1772
{
1773
+ int r = 0 ;
1769
1774
unsigned int flags ;
1770
1775
unsigned int ext_flags ;
1771
1776
unsigned char data [SC_MAX_APDU_BUFFER_SIZE ] = { 0 };
@@ -1827,9 +1832,10 @@ epass2003_init(struct sc_card *card)
1827
1832
card -> sm_ctx .ops .free_sm_apdu = epass2003_sm_free_wrapped_apdu ;
1828
1833
1829
1834
/* FIXME (VT): rather then set/unset 'g_sm', better to implement filter for APDUs to be wrapped */
1830
- epass2003_refresh (card );
1831
-
1832
- card -> sm_ctx .sm_mode = SM_MODE_TRANSMIT ;
1835
+ r = epass2003_refresh (card );
1836
+ if (r < 0 ) {
1837
+ sc_log (card -> ctx , "epass2003_refresh failed: %d continue without SM" , r );
1838
+ }
1833
1839
1834
1840
flags = SC_ALGORITHM_ONBOARD_KEY_GEN | SC_ALGORITHM_RSA_RAW | SC_ALGORITHM_RSA_HASH_NONE ;
1835
1841
0 commit comments