soft_token
if (soft_token.flags.hardware_slot)
if (soft_token.flags.login_done == 0)
pInfo->ulSessionCount = soft_token.open_sessions;
pInfo->ulRwSessionCount = soft_token.open_sessions;
if (soft_token.flags.app_error_fatal)
if (soft_token.open_sessions == MAX_NUM_SESSION)
soft_token.application = pApplication;
soft_token.notify = Notify;
if (soft_token.state[i].session_handle == CK_INVALID_HANDLE)
soft_token.open_sessions++;
soft_token.state[i].session_handle =
if (soft_token.logfile == NULL)
*phSession = soft_token.state[i].session_handle;
if (soft_token.state[i].session_handle != CK_INVALID_HANDLE)
vfprintf(soft_token.logfile, fmt, ap);
close_session(&soft_token.state[i]);
if (soft_token.flags.login_done)
fflush(soft_token.logfile);
ret = read_conf_file(soft_token.config_file, userType, pin);
soft_token.flags.login_done = 1;
return soft_token.flags.login_done ? CKR_OK : CKR_PIN_INCORRECT;
for (i = state->find.next_object; i < soft_token.object.num_objs; i++) {
if (attributes_match(soft_token.object.objs[i],
*phObject++ = soft_token.object.objs[i]->object_handle;
o = soft_token.object.objs[state->sign_object];
o = soft_token.object.objs[state->verify_object];
if (soft_token.state[i].session_handle == hSession)
*state = &soft_token.state[i];
if (i >= soft_token.object.num_objs)
if (soft_token.object.objs[i] == NULL)
if (soft_token.object.objs[i]->object_handle != handle)
*object = soft_token.object.objs[i];
for (i = 0; i < soft_token.object.num_objs; i++) {
if (soft_token.object.objs == NULL) {
soft_token.object.objs[i] = o;
if (i == soft_token.object.num_objs) {
objs = realloc(soft_token.object.objs,
(soft_token.object.num_objs + 1) * sizeof(soft_token.object.objs[0]));
soft_token.object.objs = objs;
soft_token.object.objs[soft_token.object.num_objs++] = o;
soft_token.object.objs[i]->object_handle =
soft_token.application = NULL_PTR;
soft_token.notify = NULL_PTR;
return soft_token.open_sessions > 0 ? "yes" : "no";
if (soft_token.logfile)
fclose(soft_token.logfile);
soft_token.logfile = stdout;
soft_token.logfile = fopen(name, "a");
if (soft_token.logfile)
rk_cloexec_file(soft_token.logfile);
if (soft_token.logfile == NULL)
soft_token.flags.app_error_fatal = 1;
soft_token.flags.app_error_fatal = 0;
soft_token.state[i].session_handle = CK_INVALID_HANDLE;
soft_token.state[i].find.attributes = NULL;
soft_token.state[i].find.num_attributes = 0;
soft_token.state[i].find.next_object = -1;
reset_crypto_state(&soft_token.state[i]);
soft_token.flags.hardware_slot = 1;
soft_token.flags.app_error_fatal = 0;
soft_token.flags.login_done = 0;
soft_token.object.objs = NULL;
soft_token.object.num_objs = 0;
soft_token.logfile = NULL;
soft_token.logfile = stdout;
soft_token.logfile = fopen("/tmp/log-pkcs11.txt", "a");
soft_token.config_file = get_config_file_for_user();
ret = read_conf_file(soft_token.config_file, CKU_USER, NULL);
soft_token.flags.login_done = 1;
#define MAX_NUM_SESSION (sizeof(soft_token.state)/sizeof(soft_token.state[0]))
if (soft_token.state[i].session_handle != CK_INVALID_HANDLE) {
close_session(&soft_token.state[i]);
} soft_token;