use a transation while sending and receiving data
This commit is contained in:
+15
@@ -230,8 +230,16 @@ ykpiv_rc ykpiv_transfer_data(ykpiv_state *state, const unsigned char *templ,
|
||||
const unsigned char *in_ptr = in_data;
|
||||
unsigned long max_out = *out_len;
|
||||
ykpiv_rc res;
|
||||
long rc;
|
||||
*out_len = 0;
|
||||
|
||||
rc = SCardBeginTransaction(state->card);
|
||||
if(rc != SCARD_S_SUCCESS) {
|
||||
if(state->verbose) {
|
||||
fprintf(stderr, "error: Failed to being pcsc transaction, rc=%08lx\n", rc);
|
||||
}
|
||||
return YKPIV_PCSC_ERROR;
|
||||
}
|
||||
do {
|
||||
size_t this_size = 0xff;
|
||||
unsigned long recv_len = 0xff;
|
||||
@@ -291,6 +299,13 @@ ykpiv_rc ykpiv_transfer_data(ykpiv_state *state, const unsigned char *templ,
|
||||
out_data += recv_len - 2;
|
||||
*out_len += recv_len - 2;
|
||||
}
|
||||
rc = SCardEndTransaction(state->card, SCARD_LEAVE_CARD);
|
||||
if(rc != SCARD_S_SUCCESS) {
|
||||
if(state->verbose) {
|
||||
fprintf(stderr, "error: Failed to end pcsc transaction, rc=%08lx\n", rc);
|
||||
}
|
||||
return YKPIV_PCSC_ERROR;
|
||||
}
|
||||
return YKPIV_OK;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user