[pkg-opensc-commit] [opensc] 22/50: readers: coding style for log messages
Eric Dorland
eric at moszumanska.debian.org
Sat May 28 03:35:48 UTC 2016
This is an automated email from the git hooks/post-receive script.
eric pushed a commit to branch master
in repository opensc.
commit 163fc42ee6dca2e2e5a7a9581c7f461163239312
Author: Viktor Tarasov <viktor.tarasov at gmail.com>
Date: Thu Apr 21 11:15:45 2016 +0200
readers: coding style for log messages
---
src/libopensc/reader-ctapi.c | 52 ++--
src/libopensc/reader-pcsc.c | 615 +++++++++++++++++++++----------------------
2 files changed, 333 insertions(+), 334 deletions(-)
diff --git a/src/libopensc/reader-ctapi.c b/src/libopensc/reader-ctapi.c
index 456edd3..32f9104 100644
--- a/src/libopensc/reader-ctapi.c
+++ b/src/libopensc/reader-ctapi.c
@@ -98,11 +98,11 @@ static int ctapi_reset(sc_reader_t *reader)
rv = priv->funcs.CT_data(priv->ctn, &dad, &sad, 5, cmd, &lr, rbuf);
if (rv || (lr < 2)) {
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Error getting status of terminal: %d, using defaults\n", rv);
+ sc_log(reader->ctx, "Error getting status of terminal: %d, using defaults", rv);
return SC_ERROR_TRANSMIT_FAILED;
}
if (rbuf[lr-2] != 0x90) {
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "SW1/SW2: 0x%x/0x%x\n", rbuf[lr-2], rbuf[lr-1]);
+ sc_log(reader->ctx, "SW1/SW2: 0x%x/0x%x", rbuf[lr-2], rbuf[lr-1]);
return SC_ERROR_TRANSMIT_FAILED;
}
return 0;
@@ -132,7 +132,7 @@ static int refresh_attributes(sc_reader_t *reader)
rv = priv->funcs.CT_data(priv->ctn, &dad, &sad, 5, cmd, &lr, rbuf);
if (rv || (lr < 3) || (rbuf[lr-2] != 0x90)) {
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Error getting status of terminal: %d/%d/0x%x\n", rv, lr, rbuf[lr-2]);
+ sc_log(reader->ctx, "Error getting status of terminal: %d/%d/0x%x", rv, lr, rbuf[lr-2]);
return SC_ERROR_TRANSMIT_FAILED;
}
if (lr < 4) {
@@ -141,11 +141,11 @@ static int refresh_attributes(sc_reader_t *reader)
} else {
if (rbuf[0] != CTBCS_P2_STATUS_ICC) {
/* Should we be more tolerant here? I do not think so... */
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Invalid data object returnd on CTBCS_P2_STATUS_ICC: 0x%x\n", rbuf[0]);
+ sc_log(reader->ctx, "Invalid data object returnd on CTBCS_P2_STATUS_ICC: 0x%x", rbuf[0]);
return SC_ERROR_TRANSMIT_FAILED;
}
/* Fixme - should not be reached */
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Returned status for %d slots\n", rbuf[1]);
+ sc_log(reader->ctx, "Returned status for %d slots", rbuf[1]);
reader->flags = SC_READER_CARD_PRESENT;
}
@@ -175,7 +175,7 @@ static int ctapi_internal_transmit(sc_reader_t *reader,
rv = priv->funcs.CT_data(priv->ctn, &dad, &sad, (unsigned short)sendsize, (u8 *) sendbuf, &lr, recvbuf);
if (rv != 0) {
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Error transmitting APDU: %d\n", rv);
+ sc_log(reader->ctx, "Error transmitting APDU: %d", rv);
return SC_ERROR_TRANSMIT_FAILED;
}
*recvsize = lr;
@@ -185,9 +185,9 @@ static int ctapi_internal_transmit(sc_reader_t *reader,
static int ctapi_transmit(sc_reader_t *reader, sc_apdu_t *apdu)
{
- size_t ssize, rsize, rbuflen = 0;
- u8 *sbuf = NULL, *rbuf = NULL;
- int r;
+ size_t ssize, rsize, rbuflen = 0;
+ u8 *sbuf = NULL, *rbuf = NULL;
+ int r;
rsize = rbuflen = apdu->resplen + 2;
rbuf = malloc(rbuflen);
@@ -204,7 +204,7 @@ static int ctapi_transmit(sc_reader_t *reader, sc_apdu_t *apdu)
rbuf, &rsize, apdu->control);
if (r < 0) {
/* unable to transmit ... most likely a reader problem */
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "unable to transmit");
+ sc_log(reader->ctx, "unable to transmit");
goto out;
}
sc_apdu_log(reader->ctx, SC_LOG_DEBUG_NORMAL, rbuf, rsize, 0);
@@ -255,7 +255,7 @@ static int ctapi_connect(sc_reader_t *reader)
rv = priv->funcs.CT_data(priv->ctn, &dad, &sad, 5, cmd, &lr, rbuf);
if (rv || rbuf[lr-2] != 0x90) {
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Error activating card: %d\n", rv);
+ sc_log(reader->ctx, "Error activating card: %d", rv);
return SC_ERROR_TRANSMIT_FAILED;
}
if (lr < 2)
@@ -307,7 +307,7 @@ static struct sc_reader_driver ctapi_drv = {
};
static struct ctapi_module * add_module(struct ctapi_global_private_data *gpriv,
- const char *name, void *dlhandle)
+ const char *name, void *dlhandle)
{
int i;
@@ -336,14 +336,14 @@ static int ctapi_load_module(sc_context_t *ctx,
list = scconf_find_list(conf, "ports");
if (list == NULL) {
- sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "No ports configured.\n");
+ sc_log(ctx, "No ports configured.");
return -1;
}
val = conf->name->data;
dlh = sc_dlopen(val);
if (!dlh) {
- sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "Unable to open shared library '%s': %s\n", val, sc_dlerror());
+ sc_log(ctx, "Unable to open shared library '%s': %s", val, sc_dlerror());
return -1;
}
@@ -366,12 +366,12 @@ static int ctapi_load_module(sc_context_t *ctx,
struct ctapi_private_data *priv;
if (sscanf(list->data, "%d", &port) != 1) {
- sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "Port '%s' is not a number.\n", list->data);
+ sc_log(ctx, "Port '%s' is not a number.", list->data);
continue;
}
rv = funcs.CT_init((unsigned short)mod->ctn_count, (unsigned short)port);
if (rv) {
- sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "CT_init() failed with %d\n", rv);
+ sc_log(ctx, "CT_init() failed with %d", rv);
continue;
}
@@ -421,16 +421,16 @@ static int ctapi_load_module(sc_context_t *ctx,
rv = priv->funcs.CT_data(priv->ctn, &dad, &sad, 5, cmd, &lr, rbuf);
if (rv || (lr < 4) || (rbuf[lr-2] != 0x90)) {
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Error getting status of terminal: %d, using defaults\n", rv);
+ sc_log(reader->ctx, "Error getting status of terminal: %d, using defaults", rv);
}
if (rbuf[0] != CTBCS_P2_STATUS_TFU) {
/* Number of slots might also detected by using CTBCS_P2_STATUS_ICC.
If you think that's important please do it... ;) */
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Invalid data object returnd on CTBCS_P2_STATUS_TFU: 0x%x\n", rbuf[0]);
+ sc_log(reader->ctx, "Invalid data object returnd on CTBCS_P2_STATUS_TFU: 0x%x", rbuf[0]);
}
NumUnits = rbuf[1];
if (NumUnits + 4 > lr) {
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Invalid data returnd: %d functional units, size %d\n", NumUnits, rv);
+ sc_log(reader->ctx, "Invalid data returnd: %d functional units, size %d", NumUnits, rv);
}
priv->ctapi_functional_units = 0;
for(i = 0; i < NumUnits; i++) {
@@ -452,22 +452,22 @@ static int ctapi_load_module(sc_context_t *ctx,
/* Maybe a weak point here if multiple interfaces are present and not returned
in the "canonical" order. This is not forbidden by the specs, but why should
anyone want to do that? */
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Found slot id 0x%x\n", rbuf[i+2]);
+ sc_log(reader->ctx, "Found slot id 0x%x", rbuf[i+2]);
break;
case CTBCS_P1_DISPLAY:
priv->ctapi_functional_units |= CTAPI_FU_DISPLAY;
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Display detected\n");
+ sc_log(reader->ctx, "Display detected");
break;
case CTBCS_P1_KEYPAD:
priv->ctapi_functional_units |= CTAPI_FU_KEYBOARD;
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Keypad detected\n");
+ sc_log(reader->ctx, "Keypad detected");
break;
case CTBCS_P1_PRINTER:
priv->ctapi_functional_units |= CTAPI_FU_PRINTER;
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Printer detected\n");
+ sc_log(reader->ctx, "Printer detected");
break;
case CTBCS_P1_FINGERPRINT:
@@ -476,11 +476,11 @@ static int ctapi_load_module(sc_context_t *ctx,
case CTBCS_P1_FACE_RECOGNITION:
case CTBCS_P1_IRISSCAN:
priv->ctapi_functional_units |= CTAPI_FU_BIOMETRIC;
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Biometric sensor detected\n");
+ sc_log(reader->ctx, "Biometric sensor detected");
break;
default:
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Unknown functional unit 0x%x\n", rbuf[i+2]);
+ sc_log(reader->ctx, "Unknown functional unit 0x%x", rbuf[i+2]);
}
}
/* CT-BCS does not define Keyboard/Display for each slot, so I assume
@@ -498,7 +498,7 @@ static int ctapi_load_module(sc_context_t *ctx,
}
return 0;
symerr:
- sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "Unable to resolve CT-API symbols.\n");
+ sc_log(ctx, "Unable to resolve CT-API symbols.");
sc_dlclose(dlh);
return -1;
}
diff --git a/src/libopensc/reader-pcsc.c b/src/libopensc/reader-pcsc.c
index 587f2b3..23b4dc3 100644
--- a/src/libopensc/reader-pcsc.c
+++ b/src/libopensc/reader-pcsc.c
@@ -196,7 +196,7 @@ static int pcsc_internal_transmit(sc_reader_t *reader,
LONG rv;
SCARDHANDLE card;
- SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_NORMAL);
+ LOG_FUNC_CALLED(reader->ctx);
card = priv->pcsc_card;
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
@@ -246,9 +246,9 @@ static int pcsc_internal_transmit(sc_reader_t *reader,
static int pcsc_transmit(sc_reader_t *reader, sc_apdu_t *apdu)
{
- size_t ssize, rsize, rbuflen = 0;
- u8 *sbuf = NULL, *rbuf = NULL;
- int r;
+ size_t ssize, rsize, rbuflen = 0;
+ u8 *sbuf = NULL, *rbuf = NULL;
+ int r;
/* we always use a at least 258 byte size big return buffer
* to mimic the behaviour of the old implementation (some readers
@@ -266,14 +266,14 @@ static int pcsc_transmit(sc_reader_t *reader, sc_apdu_t *apdu)
if (r != SC_SUCCESS)
goto out;
if (reader->name)
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "reader '%s'", reader->name);
+ sc_log(reader->ctx, "reader '%s'", reader->name);
sc_apdu_log(reader->ctx, SC_LOG_DEBUG_NORMAL, sbuf, ssize, 1);
r = pcsc_internal_transmit(reader, sbuf, ssize,
rbuf, &rsize, apdu->control);
if (r < 0) {
/* unable to transmit ... most likely a reader problem */
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "unable to transmit");
+ sc_log(reader->ctx, "unable to transmit");
goto out;
}
sc_apdu_log(reader->ctx, SC_LOG_DEBUG_NORMAL, rbuf, rsize, 0);
@@ -300,7 +300,7 @@ static int refresh_attributes(sc_reader_t *reader)
DWORD state, prev_state;
LONG rv;
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "%s check", reader->name);
+ sc_log(reader->ctx, "%s check", reader->name);
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
return SC_ERROR_NOT_ALLOWED;
@@ -309,7 +309,8 @@ static int refresh_attributes(sc_reader_t *reader)
priv->reader_state.szReader = reader->name;
priv->reader_state.dwCurrentState = SCARD_STATE_UNAWARE;
priv->reader_state.dwEventState = SCARD_STATE_UNAWARE;
- } else {
+ }
+ else {
priv->reader_state.dwCurrentState = priv->reader_state.dwEventState;
}
@@ -327,8 +328,8 @@ static int refresh_attributes(sc_reader_t *reader)
state = priv->reader_state.dwEventState;
prev_state = priv->reader_state.dwCurrentState;
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "current state: 0x%08X", state);
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "previous state: 0x%08X", prev_state);
+ sc_log(reader->ctx, "current state: 0x%08X", state);
+ sc_log(reader->ctx, "previous state: 0x%08X", prev_state);
if (state & SCARD_STATE_UNKNOWN) {
/* State means "reader unknown", but we have listed it at least once.
@@ -363,7 +364,8 @@ static int refresh_attributes(sc_reader_t *reader)
/* Requires pcsc-lite 1.6.5+ to function properly */
if ((state & 0xFFFF0000) != (prev_state & 0xFFFF0000)) {
reader->flags |= SC_READER_CARD_CHANGED;
- } else {
+ }
+ else {
/* Check if the card handle is still valid. If the card changed,
* the handle will be invalid. */
DWORD readers_len = 0, cstate, prot, atr_len = SC_MAX_ATR_SIZE;
@@ -372,17 +374,19 @@ static int refresh_attributes(sc_reader_t *reader)
if (rv == (LONG)SCARD_W_REMOVED_CARD)
reader->flags |= SC_READER_CARD_CHANGED;
}
- } else {
+ }
+ else {
reader->flags |= SC_READER_CARD_CHANGED;
}
- } else {
+ }
+ else {
reader->flags &= ~SC_READER_CARD_PRESENT;
if (old_flags & SC_READER_CARD_PRESENT)
reader->flags |= SC_READER_CARD_CHANGED;
}
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "card %s%s",
- reader->flags & SC_READER_CARD_PRESENT ? "present" : "absent",
- reader->flags & SC_READER_CARD_CHANGED ? ", changed": "");
+ sc_log(reader->ctx, "card %s%s",
+ reader->flags & SC_READER_CARD_PRESENT ? "present" : "absent",
+ reader->flags & SC_READER_CARD_CHANGED ? ", changed": "");
return SC_SUCCESS;
}
@@ -390,7 +394,7 @@ static int refresh_attributes(sc_reader_t *reader)
static int pcsc_detect_card_presence(sc_reader_t *reader)
{
int rv;
- SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_NORMAL);
+ LOG_FUNC_CALLED(reader->ctx);
rv = refresh_attributes(reader);
if (rv != SC_SUCCESS)
@@ -433,7 +437,7 @@ static int pcsc_reconnect(sc_reader_t * reader, DWORD action)
struct pcsc_private_data *priv = GET_PRIV_DATA(reader);
int r;
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Reconnecting to the card...");
+ sc_log(reader->ctx, "Reconnecting to the card...");
r = refresh_attributes(reader);
if (r!= SC_SUCCESS)
@@ -472,7 +476,7 @@ static int pcsc_connect(sc_reader_t *reader)
struct pcsc_private_data *priv = GET_PRIV_DATA(reader);
int r;
- SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_NORMAL);
+ LOG_FUNC_CALLED(reader->ctx);
r = refresh_attributes(reader);
if (r != SC_SUCCESS)
@@ -501,19 +505,19 @@ static int pcsc_connect(sc_reader_t *reader)
reader->active_protocol = pcsc_proto_to_opensc(active_proto);
priv->pcsc_card = card_handle;
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Initial protocol: %s", reader->active_protocol == SC_PROTO_T1 ? "T=1" : "T=0");
+ sc_log(reader->ctx, "Initial protocol: %s", reader->active_protocol == SC_PROTO_T1 ? "T=1" : "T=0");
/* Check if we need a specific protocol. refresh_attributes above already sets the ATR */
if (check_forced_protocol(reader->ctx, &reader->atr, &tmp)) {
if (active_proto != tmp) {
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Reconnecting to force protocol");
+ sc_log(reader->ctx, "Reconnecting to force protocol");
r = pcsc_reconnect(reader, SCARD_UNPOWER_CARD);
if (r != SC_SUCCESS) {
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "pcsc_reconnect (to force protocol) failed", r);
+ sc_log(reader->ctx, "pcsc_reconnect (to force protocol) failed", r);
return r;
}
}
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Final protocol: %s", reader->active_protocol == SC_PROTO_T1 ? "T=1" : "T=0");
+ sc_log(reader->ctx, "Final protocol: %s", reader->active_protocol == SC_PROTO_T1 ? "T=1" : "T=0");
}
/* After connect reader is not locked yet */
@@ -526,7 +530,7 @@ static int pcsc_disconnect(sc_reader_t * reader)
{
struct pcsc_private_data *priv = GET_PRIV_DATA(reader);
- SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_NORMAL);
+ LOG_FUNC_CALLED(reader->ctx);
if (!(reader->ctx->flags & SC_CTX_FLAG_TERMINATE))
priv->gpriv->SCardDisconnect(priv->pcsc_card, priv->gpriv->disconnect_action);
@@ -540,7 +544,7 @@ static int pcsc_lock(sc_reader_t *reader)
int r;
struct pcsc_private_data *priv = GET_PRIV_DATA(reader);
- SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_NORMAL);
+ LOG_FUNC_CALLED(reader->ctx);
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
return SC_ERROR_NOT_ALLOWED;
@@ -552,7 +556,7 @@ static int pcsc_lock(sc_reader_t *reader)
case SCARD_E_READER_UNAVAILABLE:
r = pcsc_connect(reader);
if (r != SC_SUCCESS) {
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "pcsc_connect failed", r);
+ sc_log(reader->ctx, "pcsc_connect failed", r);
return r;
}
/* return failure so that upper layers will be notified and try to lock again */
@@ -561,7 +565,7 @@ static int pcsc_lock(sc_reader_t *reader)
/* try to reconnect if the card was reset by some other application */
r = pcsc_reconnect(reader, SCARD_LEAVE_CARD);
if (r != SC_SUCCESS) {
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "pcsc_reconnect failed", r);
+ sc_log(reader->ctx, "pcsc_reconnect failed", r);
return r;
}
/* return failure so that upper layers will be notified and try to lock again */
@@ -580,7 +584,7 @@ static int pcsc_unlock(sc_reader_t *reader)
LONG rv;
struct pcsc_private_data *priv = GET_PRIV_DATA(reader);
- SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_NORMAL);
+ LOG_FUNC_CALLED(reader->ctx);
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
return SC_ERROR_NOT_ALLOWED;
@@ -630,7 +634,7 @@ static int pcsc_cancel(sc_context_t *ctx)
LONG rv = SCARD_S_SUCCESS;
struct pcsc_global_private_data *gpriv = (struct pcsc_global_private_data *)ctx->reader_drv_data;
- SC_FUNC_CALLED(ctx, SC_LOG_DEBUG_NORMAL);
+ LOG_FUNC_CALLED(ctx);
if (ctx->flags & SC_CTX_FLAG_TERMINATE)
return SC_ERROR_NOT_ALLOWED;
@@ -787,7 +791,7 @@ static int pcsc_finish(sc_context_t *ctx)
{
struct pcsc_global_private_data *gpriv = (struct pcsc_global_private_data *) ctx->reader_drv_data;
- SC_FUNC_CALLED(ctx, SC_LOG_DEBUG_NORMAL);
+ LOG_FUNC_CALLED(ctx);
if (gpriv) {
if (gpriv->pcsc_ctx != -1 && !(ctx->flags & SC_CTX_FLAG_TERMINATE))
@@ -809,51 +813,50 @@ static int pcsc_finish(sc_context_t *ctx)
*/
static unsigned long part10_detect_pace_capabilities(sc_reader_t *reader, SCARDHANDLE card_handle)
{
- u8 pace_capabilities_buf[] = {
- PACE_FUNCTION_GetReaderPACECapabilities, /* idxFunction */
- 0, 0, /* lengthInputData */
- };
- u8 rbuf[7];
- u8 *p = rbuf;
- DWORD rcount = sizeof rbuf;
- struct pcsc_private_data *priv;
- unsigned long flags = 0;
-
- if (!reader)
- goto err;
- priv = GET_PRIV_DATA(reader);
- if (!priv)
- goto err;
-
- if (priv->pace_ioctl && priv->gpriv) {
+ u8 pace_capabilities_buf[] = {
+ PACE_FUNCTION_GetReaderPACECapabilities,/* idxFunction */
+ 0, 0, /* lengthInputData */
+ };
+ u8 rbuf[7];
+ u8 *p = rbuf;
+ DWORD rcount = sizeof rbuf;
+ struct pcsc_private_data *priv;
+ unsigned long flags = 0;
+
+ if (!reader)
+ goto err;
+ priv = GET_PRIV_DATA(reader);
+ if (!priv)
+ goto err;
+
+ if (priv->pace_ioctl && priv->gpriv) {
if (SCARD_S_SUCCESS != priv->gpriv->SCardControl(card_handle,
priv->pace_ioctl, pace_capabilities_buf,
sizeof pace_capabilities_buf, rbuf, sizeof(rbuf),
&rcount)) {
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL,
- "PC/SC v2 part 10 amd1: Get PACE properties failed!");
+ sc_log(reader->ctx, "PC/SC v2 part 10 amd1: Get PACE properties failed!");
goto err;
}
- if (rcount != 7)
- goto err;
- /* Result */
- if ((uint32_t) *p != 0)
- goto err;
- p += sizeof(uint32_t);
- /* length_OutputData */
- if ((uint16_t) *p != 1)
- goto err;
- p += sizeof(uint16_t);
-
- if (*p & PACE_CAPABILITY_eSign)
- flags |= SC_READER_CAP_PACE_ESIGN;
- if (*p & PACE_CAPABILITY_eID)
- flags |= SC_READER_CAP_PACE_EID;
- if (*p & PACE_CAPABILITY_generic)
- flags |= SC_READER_CAP_PACE_GENERIC;
- if (*p & PACE_CAPABILITY_DestroyPACEChannel)
- flags |= SC_READER_CAP_PACE_DESTROY_CHANNEL;
+ if (rcount != 7)
+ goto err;
+ /* Result */
+ if ((uint32_t) *p != 0)
+ goto err;
+ p += sizeof(uint32_t);
+ /* length_OutputData */
+ if ((uint16_t) *p != 1)
+ goto err;
+ p += sizeof(uint16_t);
+
+ if (*p & PACE_CAPABILITY_eSign)
+ flags |= SC_READER_CAP_PACE_ESIGN;
+ if (*p & PACE_CAPABILITY_eID)
+ flags |= SC_READER_CAP_PACE_EID;
+ if (*p & PACE_CAPABILITY_generic)
+ flags |= SC_READER_CAP_PACE_GENERIC;
+ if (*p & PACE_CAPABILITY_DestroyPACEChannel)
+ flags |= SC_READER_CAP_PACE_DESTROY_CHANNEL;
}
err:
@@ -899,32 +902,30 @@ static size_t part10_detect_max_data(sc_reader_t *reader, SCARDHANDLE card_handl
/* 256 < X <= 0x10000: short and extended APDU of up to X bytes of data */
if (r > 0x100 && r <= 0x10000)
max_data = r;
- }
-
+ }
err:
- return max_data;
+ return max_data;
}
static int part10_get_vendor_product(struct sc_reader *reader,
SCARDHANDLE card_handle, int *id_vendor, int *id_product)
{
- u8 rbuf[256];
- DWORD rcount = sizeof rbuf;
- struct pcsc_private_data *priv;
- /* 0 means no limitations */
- int this_vendor = -1, this_product = -1;
-
- if (!reader)
- return SC_ERROR_INVALID_ARGUMENTS;
- priv = GET_PRIV_DATA(reader);
- if (!priv)
- return SC_ERROR_INVALID_ARGUMENTS;
+ u8 rbuf[256];
+ DWORD rcount = sizeof rbuf;
+ struct pcsc_private_data *priv;
+ int this_vendor = -1, this_product = -1;
+
+ if (!reader)
+ return SC_ERROR_INVALID_ARGUMENTS;
+ priv = GET_PRIV_DATA(reader);
+ if (!priv)
+ return SC_ERROR_INVALID_ARGUMENTS;
if (priv->get_tlv_properties && priv->gpriv) {
if (SCARD_S_SUCCESS != priv->gpriv->SCardControl(card_handle,
priv->get_tlv_properties, NULL, 0, rbuf, sizeof(rbuf),
&rcount)) {
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL,
+ sc_log(reader->ctx,
"PC/SC v2 part 10: Get TLV properties failed!");
return SC_ERROR_TRANSMIT_FAILED;
}
@@ -935,7 +936,7 @@ static int part10_get_vendor_product(struct sc_reader *reader,
PCSCv2_PART10_PROPERTY_wIdProduct);
}
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "id_vendor=%04x id_product=%04x", this_vendor, this_product);
+ sc_log(reader->ctx, "id_vendor=%04x id_product=%04x", this_vendor, this_product);
if (id_vendor)
*id_vendor = this_vendor;
@@ -955,7 +956,7 @@ static void detect_reader_features(sc_reader_t *reader, SCARDHANDLE card_handle)
LONG rv;
const char *log_disabled = "but it's disabled in configuration file";
- SC_FUNC_CALLED(ctx, SC_LOG_DEBUG_NORMAL);
+ LOG_FUNC_CALLED(ctx);
if (gpriv->SCardControl == NULL)
return;
@@ -1041,10 +1042,14 @@ static void detect_reader_features(sc_reader_t *reader, SCARDHANDLE card_handle)
if (caps->wLcdLayout > 0) {
sc_log(ctx, "Reader has a display: %04X", caps->wLcdLayout);
reader->capabilities |= SC_READER_CAP_DISPLAY;
- } else
+ }
+ else {
sc_log(ctx, "Reader does not have a display.");
- } else
+ }
+ }
+ else {
sc_log(ctx, "Returned PIN properties structure has bad length (%d/%d)", rcount, sizeof(PIN_PROPERTIES_STRUCTURE));
+ }
}
}
@@ -1055,7 +1060,8 @@ static void detect_reader_features(sc_reader_t *reader, SCARDHANDLE card_handle)
if (reader->capabilities & SC_READER_CAP_PACE_GENERIC)
sc_log(ctx, log_text);
- } else {
+ }
+ else {
sc_log(ctx, "%s %s", log_text, log_disabled);
}
}
@@ -1104,7 +1110,7 @@ static int pcsc_detect_readers(sc_context_t *ctx)
int ret = SC_ERROR_INTERNAL;
size_t i;
- SC_FUNC_CALLED(ctx, SC_LOG_DEBUG_NORMAL);
+ LOG_FUNC_CALLED(ctx);
if (!gpriv) {
/* FIXME: this is not the correct error */
@@ -1130,8 +1136,7 @@ static int pcsc_detect_readers(sc_context_t *ctx)
rv = SCARD_E_INVALID_HANDLE;
}
else {
- rv = gpriv->SCardListReaders(gpriv->pcsc_ctx, NULL, NULL,
- (LPDWORD) &reader_buf_size);
+ rv = gpriv->SCardListReaders(gpriv->pcsc_ctx, NULL, NULL, (LPDWORD) &reader_buf_size);
if (rv == (LONG)SCARD_E_NO_SERVICE) {
gpriv->SCardReleaseContext(gpriv->pcsc_ctx);
gpriv->pcsc_ctx = -1;
@@ -1149,8 +1154,7 @@ static int pcsc_detect_readers(sc_context_t *ctx)
sc_log(ctx, "Establish PC/SC context");
- rv = gpriv->SCardEstablishContext(SCARD_SCOPE_USER,
- NULL, NULL, &gpriv->pcsc_ctx);
+ rv = gpriv->SCardEstablishContext(SCARD_SCOPE_USER, NULL, NULL, &gpriv->pcsc_ctx);
if (rv != SCARD_S_SUCCESS) {
PCSC_LOG(ctx, "SCardEstablishContext failed", rv);
ret = pcsc_to_opensc_error(rv);
@@ -1166,8 +1170,7 @@ static int pcsc_detect_readers(sc_context_t *ctx)
ret = SC_ERROR_OUT_OF_MEMORY;
goto out;
}
- rv = gpriv->SCardListReaders(gpriv->pcsc_ctx, mszGroups, reader_buf,
- (LPDWORD) &reader_buf_size);
+ rv = gpriv->SCardListReaders(gpriv->pcsc_ctx, mszGroups, reader_buf, (LPDWORD) &reader_buf_size);
if (rv != SCARD_S_SUCCESS) {
PCSC_LOG(ctx, "SCardListReaders failed", rv);
ret = pcsc_to_opensc_error(rv);
@@ -1294,7 +1297,7 @@ out:
/* Wait for an event to occur.
*/
static int pcsc_wait_for_event(sc_context_t *ctx, unsigned int event_mask, sc_reader_t **event_reader, unsigned int *event,
- int timeout, void **reader_states)
+ int timeout, void **reader_states)
{
struct pcsc_global_private_data *gpriv = (struct pcsc_global_private_data *)ctx->reader_drv_data;
LONG rv;
@@ -1304,7 +1307,7 @@ static int pcsc_wait_for_event(sc_context_t *ctx, unsigned int event_mask, sc_re
int r = SC_ERROR_INTERNAL;
DWORD dwtimeout;
- SC_FUNC_CALLED(ctx, SC_LOG_DEBUG_NORMAL);
+ LOG_FUNC_CALLED(ctx);
if (!event_reader && !event && reader_states) {
sc_log(ctx, "free allocated reader states");
@@ -1598,8 +1601,8 @@ static int part10_build_modify_pin_block(struct sc_reader *reader, u8 * buf, siz
unsigned int tmp16;
PIN_MODIFY_STRUCTURE *pin_modify = (PIN_MODIFY_STRUCTURE *)buf;
struct sc_pin_cmd_pin *pin_ref =
- data->flags & SC_PIN_CMD_IMPLICIT_CHANGE ?
- &data->pin2 : &data->pin1;
+ data->flags & SC_PIN_CMD_IMPLICIT_CHANGE ?
+ &data->pin2 : &data->pin1;
/* PIN verification control message */
pin_modify->bTimerOut = SC_CCID_PIN_TIMEOUT; /* bTimeOut */
@@ -1761,15 +1764,15 @@ part10_check_pin_min_max(sc_reader_t *reader, struct sc_pin_cmd_data *data)
size_t length = sizeof buffer;
struct pcsc_private_data *priv = GET_PRIV_DATA(reader);
struct sc_pin_cmd_pin *pin_ref =
- data->flags & SC_PIN_CMD_IMPLICIT_CHANGE ?
- &data->pin1 : &data->pin2;
+ data->flags & SC_PIN_CMD_IMPLICIT_CHANGE ?
+ &data->pin1 : &data->pin2;
if (!priv->get_tlv_properties)
return 0;
r = pcsc_internal_transmit(reader, NULL, 0, buffer, &length,
priv->get_tlv_properties);
- SC_TEST_RET(reader->ctx, SC_LOG_DEBUG_NORMAL, r,
+ LOG_TEST_RET(reader->ctx, r,
"PC/SC v2 part 10: Get TLV properties failed!");
/* minimum pin size */
@@ -1812,7 +1815,7 @@ pcsc_pin_cmd(sc_reader_t *reader, struct sc_pin_cmd_data *data)
DWORD ioctl = 0;
sc_apdu_t *apdu;
- SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_NORMAL);
+ LOG_FUNC_CALLED(reader->ctx);
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
return SC_ERROR_NOT_ALLOWED;
@@ -1822,7 +1825,7 @@ pcsc_pin_cmd(sc_reader_t *reader, struct sc_pin_cmd_data *data)
/* The APDU must be provided by the card driver */
if (!data->apdu) {
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "No APDU provided for PC/SC v2 pinpad verification!");
+ sc_log(reader->ctx, "No APDU provided for PC/SC v2 pinpad verification!");
return SC_ERROR_NOT_SUPPORTED;
}
@@ -1830,7 +1833,7 @@ pcsc_pin_cmd(sc_reader_t *reader, struct sc_pin_cmd_data *data)
switch (data->cmd) {
case SC_PIN_CMD_VERIFY:
if (!(priv->verify_ioctl || (priv->verify_ioctl_start && priv->verify_ioctl_finish))) {
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Pinpad reader does not support verification!");
+ sc_log(reader->ctx, "Pinpad reader does not support verification!");
return SC_ERROR_NOT_SUPPORTED;
}
part10_check_pin_min_max(reader, data);
@@ -1840,7 +1843,7 @@ pcsc_pin_cmd(sc_reader_t *reader, struct sc_pin_cmd_data *data)
case SC_PIN_CMD_CHANGE:
case SC_PIN_CMD_UNBLOCK:
if (!(priv->modify_ioctl || (priv->modify_ioctl_start && priv->modify_ioctl_finish))) {
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Pinpad reader does not support modification!");
+ sc_log(reader->ctx, "Pinpad reader does not support modification!");
return SC_ERROR_NOT_SUPPORTED;
}
part10_check_pin_min_max(reader, data);
@@ -1848,18 +1851,18 @@ pcsc_pin_cmd(sc_reader_t *reader, struct sc_pin_cmd_data *data)
ioctl = priv->modify_ioctl ? priv->modify_ioctl : priv->modify_ioctl_start;
break;
default:
- sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "Unknown PIN command %d", data->cmd);
+ sc_log(reader->ctx, "Unknown PIN command %d", data->cmd);
return SC_ERROR_NOT_SUPPORTED;
}
/* If PIN block building failed, we fail too */
- SC_TEST_RET(reader->ctx, SC_LOG_DEBUG_NORMAL, r, "PC/SC v2 pinpad block building failed!");
+ LOG_TEST_RET(reader->ctx, r, "PC/SC v2 pinpad block building failed!");
/* If not, debug it, just for fun */
sc_debug_hex(reader->ctx, SC_LOG_DEBUG_NORMAL, "PC/SC v2 pinpad block", sbuf, scount);
r = pcsc_internal_transmit(reader, sbuf, scount, rbuf, &rcount, ioctl);
- SC_TEST_RET(reader->ctx, SC_LOG_DEBUG_NORMAL, r, "PC/SC v2 pinpad: block transmit failed!");
+ LOG_TEST_RET(reader->ctx, r, "PC/SC v2 pinpad: block transmit failed!");
/* finish the call if it was a two-phase operation */
if ((ioctl == priv->verify_ioctl_start)
|| (ioctl == priv->modify_ioctl_start)) {
@@ -1870,7 +1873,7 @@ pcsc_pin_cmd(sc_reader_t *reader, struct sc_pin_cmd_data *data)
rcount = sizeof(rbuf);
r = pcsc_internal_transmit(reader, sbuf, 0, rbuf, &rcount, ioctl);
- SC_TEST_RET(reader->ctx, SC_LOG_DEBUG_NORMAL, r, "PC/SC v2 pinpad: finish operation failed!");
+ LOG_TEST_RET(reader->ctx, r, "PC/SC v2 pinpad: finish operation failed!");
}
/* We expect only two bytes of result data (SW1 and SW2) */
@@ -1901,205 +1904,204 @@ pcsc_pin_cmd(sc_reader_t *reader, struct sc_pin_cmd_data *data)
break;
}
- SC_TEST_RET(reader->ctx, SC_LOG_DEBUG_NORMAL, r, "PIN command failed");
+ LOG_TEST_RET(reader->ctx, r, "PIN command failed");
/* PIN command completed, all is good */
return SC_SUCCESS;
}
-static int transform_pace_input(
- struct establish_pace_channel_input *pace_input,
- u8 *sbuf, size_t *scount)
+static int transform_pace_input(struct establish_pace_channel_input *pace_input,
+ u8 *sbuf, size_t *scount)
{
- u8 *p = sbuf;
- uint16_t lengthInputData, lengthCertificateDescription;
- uint8_t lengthCHAT, lengthPIN;
+ u8 *p = sbuf;
+ uint16_t lengthInputData, lengthCertificateDescription;
+ uint8_t lengthCHAT, lengthPIN;
- if (!pace_input || !sbuf || !scount)
- return SC_ERROR_INVALID_ARGUMENTS;
+ if (!pace_input || !sbuf || !scount)
+ return SC_ERROR_INVALID_ARGUMENTS;
- lengthInputData = 5 + pace_input->pin_length + pace_input->chat_length
- + pace_input->certificate_description_length;
+ lengthInputData = 5 + pace_input->pin_length + pace_input->chat_length
+ + pace_input->certificate_description_length;
- if ((unsigned)(lengthInputData + 3) > *scount)
- return SC_ERROR_OUT_OF_MEMORY;
+ if ((unsigned)(lengthInputData + 3) > *scount)
+ return SC_ERROR_OUT_OF_MEMORY;
- /* idxFunction */
- *(p++) = PACE_FUNCTION_EstablishPACEChannel;
+ /* idxFunction */
+ *(p++) = PACE_FUNCTION_EstablishPACEChannel;
- /* lengthInputData */
- memcpy(p, &lengthInputData, sizeof lengthInputData);
- p += sizeof lengthInputData;
+ /* lengthInputData */
+ memcpy(p, &lengthInputData, sizeof lengthInputData);
+ p += sizeof lengthInputData;
- *(p++) = pace_input->pin_id;
+ *(p++) = pace_input->pin_id;
- /* length CHAT */
- lengthCHAT = pace_input->chat_length;
- *(p++) = lengthCHAT;
- /* CHAT */
- memcpy(p, pace_input->chat, lengthCHAT);
- p += lengthCHAT;
+ /* length CHAT */
+ lengthCHAT = pace_input->chat_length;
+ *(p++) = lengthCHAT;
+ /* CHAT */
+ memcpy(p, pace_input->chat, lengthCHAT);
+ p += lengthCHAT;
- /* length PIN */
- lengthPIN = pace_input->pin_length;
- *(p++) = lengthPIN;
+ /* length PIN */
+ lengthPIN = pace_input->pin_length;
+ *(p++) = lengthPIN;
- /* PIN */
- memcpy(p, pace_input->pin, lengthPIN);
- p += lengthPIN;
+ /* PIN */
+ memcpy(p, pace_input->pin, lengthPIN);
+ p += lengthPIN;
- /* lengthCertificateDescription */
- lengthCertificateDescription = pace_input->certificate_description_length;
- memcpy(p, &lengthCertificateDescription,
- sizeof lengthCertificateDescription);
- p += sizeof lengthCertificateDescription;
+ /* lengthCertificateDescription */
+ lengthCertificateDescription = pace_input->certificate_description_length;
+ memcpy(p, &lengthCertificateDescription,
+ sizeof lengthCertificateDescription);
+ p += sizeof lengthCertificateDescription;
- /* certificate description */
- memcpy(p, pace_input->certificate_description,
- lengthCertificateDescription);
+ /* certificate description */
+ memcpy(p, pace_input->certificate_description,
+ lengthCertificateDescription);
- *scount = lengthInputData + 3;
+ *scount = lengthInputData + 3;
- return SC_SUCCESS;
+ return SC_SUCCESS;
}
static int transform_pace_output(u8 *rbuf, size_t rbuflen,
- struct establish_pace_channel_output *pace_output)
+ struct establish_pace_channel_output *pace_output)
{
- size_t parsed = 0;
-
- uint8_t ui8;
- uint16_t ui16;
-
- if (!rbuf || !pace_output)
- return SC_ERROR_INVALID_ARGUMENTS;
-
- /* Result */
- if (parsed+4 > rbuflen)
- return SC_ERROR_UNKNOWN_DATA_RECEIVED;
- memcpy(&pace_output->result, &rbuf[parsed], 4);
- parsed += 4;
-
- /* length_OutputData */
- if (parsed+2 > rbuflen)
- return SC_ERROR_UNKNOWN_DATA_RECEIVED;
- memcpy(&ui16, &rbuf[parsed], 2);
- if ((size_t)ui16+6 != rbuflen)
- return SC_ERROR_UNKNOWN_DATA_RECEIVED;
- parsed += 2;
-
- /* MSE:Set AT Statusbytes */
- if (parsed+2 > rbuflen)
- return SC_ERROR_UNKNOWN_DATA_RECEIVED;
- pace_output->mse_set_at_sw1 = rbuf[parsed+0];
- pace_output->mse_set_at_sw2 = rbuf[parsed+1];
- parsed += 2;
-
- /* length_CardAccess */
- if (parsed+2 > rbuflen)
- return SC_ERROR_UNKNOWN_DATA_RECEIVED;
- memcpy(&ui16, &rbuf[parsed], 2);
- /* do not just yet copy ui16 to pace_output->ef_cardaccess_length */
- parsed += 2;
-
- /* EF_CardAccess */
- if (parsed+ui16 > rbuflen)
- return SC_ERROR_UNKNOWN_DATA_RECEIVED;
- if (pace_output->ef_cardaccess) {
- /* caller wants EF.CardAccess */
- if (pace_output->ef_cardaccess_length < ui16)
- return SC_ERROR_OUT_OF_MEMORY;
-
- /* now save ui16 to pace_output->ef_cardaccess_length */
- pace_output->ef_cardaccess_length = ui16;
- memcpy(pace_output->ef_cardaccess, &rbuf[parsed], ui16);
- } else {
- /* caller does not want EF.CardAccess */
- pace_output->ef_cardaccess_length = 0;
- }
- parsed += ui16;
-
- if (parsed < rbuflen) {
- /* The following elements are only present if the execution of PACE is
- * to be followed by an execution of Terminal Authentication Version 2
- * as defined in [TR-03110]. These data are needed to perform the
- * Terminal Authentication. */
-
- /* length_CARcurr */
- ui8 = rbuf[parsed];
- /* do not just yet copy ui8 to pace_output->recent_car_length */
- parsed += 1;
-
- /* CARcurr */
- if (parsed+ui8 > rbuflen)
- return SC_ERROR_UNKNOWN_DATA_RECEIVED;
- if (pace_output->recent_car) {
- /* caller wants most recent certificate authority reference */
- if (pace_output->recent_car_length < ui8)
- return SC_ERROR_OUT_OF_MEMORY;
- /* now save ui8 to pace_output->recent_car_length */
- pace_output->recent_car_length = ui8;
- memcpy(pace_output->recent_car, &rbuf[parsed], ui8);
- } else {
- /* caller does not want most recent certificate authority reference */
- pace_output->recent_car_length = 0;
- }
- parsed += ui8;
-
- /* length_CARprev */
- ui8 = rbuf[parsed];
- /* do not just yet copy ui8 to pace_output->previous_car_length */
- parsed += 1;
-
- /* length_CCARprev */
- if (parsed+ui8 > rbuflen)
- return SC_ERROR_UNKNOWN_DATA_RECEIVED;
- if (pace_output->previous_car) {
- /* caller wants previous certificate authority reference */
- if (pace_output->previous_car_length < ui8)
- return SC_ERROR_OUT_OF_MEMORY;
- /* now save ui8 to pace_output->previous_car_length */
- pace_output->previous_car_length = ui8;
- memcpy(pace_output->previous_car, &rbuf[parsed], ui8);
- } else {
- /* caller does not want previous certificate authority reference */
- pace_output->previous_car_length = 0;
- }
- parsed += ui8;
-
- /* length_IDicc */
- if (parsed+2 > rbuflen)
- return SC_ERROR_UNKNOWN_DATA_RECEIVED;
- memcpy(&ui16, &rbuf[parsed], 2);
- /* do not just yet copy ui16 to pace_output->id_icc_length */
- parsed += 2;
-
- /* IDicc */
- if (parsed+ui16 > rbuflen)
- return SC_ERROR_UNKNOWN_DATA_RECEIVED;
- if (pace_output->id_icc) {
- /* caller wants Ephemeral PACE public key of the IFD */
- if (pace_output->id_icc_length < ui16)
- return SC_ERROR_OUT_OF_MEMORY;
-
- /* now save ui16 to pace_output->id_icc_length */
- pace_output->id_icc_length = ui16;
- memcpy(pace_output->id_icc, &rbuf[parsed], ui16);
- } else {
- /* caller does not want Ephemeral PACE public key of the IFD */
- pace_output->id_icc_length = 0;
- }
- parsed += ui16;
-
- if (parsed < rbuflen)
- return SC_ERROR_UNKNOWN_DATA_RECEIVED;
- } else {
- pace_output->recent_car_length = 0;
- pace_output->previous_car_length = 0;
- pace_output->id_icc_length = 0;
- }
+ size_t parsed = 0;
+
+ uint8_t ui8;
+ uint16_t ui16;
+
+ if (!rbuf || !pace_output)
+ return SC_ERROR_INVALID_ARGUMENTS;
- return SC_SUCCESS;
+ /* Result */
+ if (parsed+4 > rbuflen)
+ return SC_ERROR_UNKNOWN_DATA_RECEIVED;
+ memcpy(&pace_output->result, &rbuf[parsed], 4);
+ parsed += 4;
+
+ /* length_OutputData */
+ if (parsed+2 > rbuflen)
+ return SC_ERROR_UNKNOWN_DATA_RECEIVED;
+ memcpy(&ui16, &rbuf[parsed], 2);
+ if ((size_t)ui16+6 != rbuflen)
+ return SC_ERROR_UNKNOWN_DATA_RECEIVED;
+ parsed += 2;
+
+ /* MSE:Set AT Statusbytes */
+ if (parsed+2 > rbuflen)
+ return SC_ERROR_UNKNOWN_DATA_RECEIVED;
+ pace_output->mse_set_at_sw1 = rbuf[parsed+0];
+ pace_output->mse_set_at_sw2 = rbuf[parsed+1];
+ parsed += 2;
+
+ /* length_CardAccess */
+ if (parsed+2 > rbuflen)
+ return SC_ERROR_UNKNOWN_DATA_RECEIVED;
+ memcpy(&ui16, &rbuf[parsed], 2);
+ /* do not just yet copy ui16 to pace_output->ef_cardaccess_length */
+ parsed += 2;
+
+ /* EF_CardAccess */
+ if (parsed+ui16 > rbuflen)
+ return SC_ERROR_UNKNOWN_DATA_RECEIVED;
+ if (pace_output->ef_cardaccess) {
+ /* caller wants EF.CardAccess */
+ if (pace_output->ef_cardaccess_length < ui16)
+ return SC_ERROR_OUT_OF_MEMORY;
+
+ /* now save ui16 to pace_output->ef_cardaccess_length */
+ pace_output->ef_cardaccess_length = ui16;
+ memcpy(pace_output->ef_cardaccess, &rbuf[parsed], ui16);
+ } else {
+ /* caller does not want EF.CardAccess */
+ pace_output->ef_cardaccess_length = 0;
+ }
+ parsed += ui16;
+
+ if (parsed < rbuflen) {
+ /* The following elements are only present if the execution of PACE is
+ * to be followed by an execution of Terminal Authentication Version 2
+ * as defined in [TR-03110]. These data are needed to perform the
+ * Terminal Authentication. */
+
+ /* length_CARcurr */
+ ui8 = rbuf[parsed];
+ /* do not just yet copy ui8 to pace_output->recent_car_length */
+ parsed += 1;
+
+ /* CARcurr */
+ if (parsed+ui8 > rbuflen)
+ return SC_ERROR_UNKNOWN_DATA_RECEIVED;
+ if (pace_output->recent_car) {
+ /* caller wants most recent certificate authority reference */
+ if (pace_output->recent_car_length < ui8)
+ return SC_ERROR_OUT_OF_MEMORY;
+ /* now save ui8 to pace_output->recent_car_length */
+ pace_output->recent_car_length = ui8;
+ memcpy(pace_output->recent_car, &rbuf[parsed], ui8);
+ } else {
+ /* caller does not want most recent certificate authority reference */
+ pace_output->recent_car_length = 0;
+ }
+ parsed += ui8;
+
+ /* length_CARprev */
+ ui8 = rbuf[parsed];
+ /* do not just yet copy ui8 to pace_output->previous_car_length */
+ parsed += 1;
+
+ /* length_CCARprev */
+ if (parsed+ui8 > rbuflen)
+ return SC_ERROR_UNKNOWN_DATA_RECEIVED;
+ if (pace_output->previous_car) {
+ /* caller wants previous certificate authority reference */
+ if (pace_output->previous_car_length < ui8)
+ return SC_ERROR_OUT_OF_MEMORY;
+ /* now save ui8 to pace_output->previous_car_length */
+ pace_output->previous_car_length = ui8;
+ memcpy(pace_output->previous_car, &rbuf[parsed], ui8);
+ } else {
+ /* caller does not want previous certificate authority reference */
+ pace_output->previous_car_length = 0;
+ }
+ parsed += ui8;
+
+ /* length_IDicc */
+ if (parsed+2 > rbuflen)
+ return SC_ERROR_UNKNOWN_DATA_RECEIVED;
+ memcpy(&ui16, &rbuf[parsed], 2);
+ /* do not just yet copy ui16 to pace_output->id_icc_length */
+ parsed += 2;
+
+ /* IDicc */
+ if (parsed+ui16 > rbuflen)
+ return SC_ERROR_UNKNOWN_DATA_RECEIVED;
+ if (pace_output->id_icc) {
+ /* caller wants Ephemeral PACE public key of the IFD */
+ if (pace_output->id_icc_length < ui16)
+ return SC_ERROR_OUT_OF_MEMORY;
+
+ /* now save ui16 to pace_output->id_icc_length */
+ pace_output->id_icc_length = ui16;
+ memcpy(pace_output->id_icc, &rbuf[parsed], ui16);
+ } else {
+ /* caller does not want Ephemeral PACE public key of the IFD */
+ pace_output->id_icc_length = 0;
+ }
+ parsed += ui16;
+
+ if (parsed < rbuflen)
+ return SC_ERROR_UNKNOWN_DATA_RECEIVED;
+ } else {
+ pace_output->recent_car_length = 0;
+ pace_output->previous_car_length = 0;
+ pace_output->id_icc_length = 0;
+ }
+
+ return SC_SUCCESS;
}
@@ -2112,27 +2114,27 @@ pcsc_perform_pace(struct sc_reader *reader, void *input_pace, void *output_pace)
u8 rbuf[SC_MAX_EXT_APDU_BUFFER_SIZE], sbuf[SC_MAX_EXT_APDU_BUFFER_SIZE];
size_t rcount = sizeof rbuf, scount = sizeof sbuf;
- if (!reader || !(reader->capabilities & SC_READER_CAP_PACE_GENERIC))
- return SC_ERROR_INVALID_ARGUMENTS;
+ if (!reader || !(reader->capabilities & SC_READER_CAP_PACE_GENERIC))
+ return SC_ERROR_INVALID_ARGUMENTS;
- priv = GET_PRIV_DATA(reader);
- if (!priv)
- return SC_ERROR_INVALID_ARGUMENTS;
+ priv = GET_PRIV_DATA(reader);
+ if (!priv)
+ return SC_ERROR_INVALID_ARGUMENTS;
- LOG_TEST_RET(reader->ctx,
- transform_pace_input(pace_input, sbuf, &scount),
- "Creating EstabishPACEChannel input data");
+ LOG_TEST_RET(reader->ctx,
+ transform_pace_input(pace_input, sbuf, &scount),
+ "Creating EstabishPACEChannel input data");
- LOG_TEST_RET(reader->ctx,
- pcsc_internal_transmit(reader, sbuf, scount, rbuf, &rcount,
- priv->pace_ioctl),
- "Executing EstabishPACEChannel");
+ LOG_TEST_RET(reader->ctx,
+ pcsc_internal_transmit(reader, sbuf, scount, rbuf, &rcount,
+ priv->pace_ioctl),
+ "Executing EstabishPACEChannel");
- LOG_TEST_RET(reader->ctx,
- transform_pace_output(rbuf, rcount, pace_output),
- "Parsing EstabishPACEChannel output data");
+ LOG_TEST_RET(reader->ctx,
+ transform_pace_output(rbuf, rcount, pace_output),
+ "Parsing EstabishPACEChannel output data");
- return SC_SUCCESS;
+ return SC_SUCCESS;
}
struct sc_reader_driver * sc_get_pcsc_driver(void)
@@ -2287,7 +2289,7 @@ int cardmod_use_reader(sc_context_t *ctx, void * pcsc_context_handle, void * pcs
int ret = SC_ERROR_INTERNAL;
unsigned int i;
- SC_FUNC_CALLED(ctx, SC_LOG_DEBUG_NORMAL);
+ LOG_FUNC_CALLED(ctx);
if (!gpriv) {
ret = SC_ERROR_NO_READERS_FOUND;
@@ -2315,13 +2317,10 @@ int cardmod_use_reader(sc_context_t *ctx, void * pcsc_context_handle, void * pcs
struct pcsc_private_data *priv = NULL;
DWORD readers_len = 0, state, prot, atr_len = SC_MAX_ATR_SIZE;
unsigned char atr[SC_MAX_ATR_SIZE];
+ char texte[2048];
- if(1)
- {
- char texte[2048];
- sc_bin_to_hex(reader_name, reader_name_size, texte, sizeof(texte)-5, ':');
- sc_log(ctx, "lecteur name = %s\n%s\n", reader_name,texte);
- }
+ sc_bin_to_hex(reader_name, reader_name_size, texte, sizeof(texte)-5, ':');
+ sc_log(ctx, "lecteur name = %s\n%s\n", reader_name,texte);
if ((reader = calloc(1, sizeof(sc_reader_t))) == NULL) {
ret = SC_ERROR_OUT_OF_MEMORY;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-opensc/opensc.git
More information about the pkg-opensc-commit
mailing list