sa->tp = silc_thread_pool_alloc(NULL, min_threads, max_threads, TRUE);
if (!sa->tp) {
silc_free(sa);
+ sa = NULL;
return FALSE;
}
out:
silc_sfree(stack, e->src);
silc_sfree(stack, e->data);
+ silc_sfree(stack, e->result_data);
silc_sfree(stack, e);
silc_stack_free(stack);
}
SilcSoftaccExec e = context;
SilcStack stack = e->stack;
- /* Pop e->src and e->data from memory */
+ /* Pop e->src */
silc_stack_pop(stack);
if (success)
SilcSoftaccExec e = context;
SilcStack stack = e->stack;
+ /* Pop e->src and e->data from memory */
silc_stack_pop(stack);
+
e->result = success;
}
case SILC_SOFTACC_SIGN:
silc_pkcs_sign(e->key.private_key, e->src, e->src_len, e->compute_hash,
- e->hash, silc_softacc_data_cb, e);
+ e->hash, e->rng, silc_softacc_data_cb, e);
break;
case SILC_SOFTACC_VERIFY:
e->stack = stack;
e->type = SILC_SOFTACC_SIGN;
+ e->rng = rng;
e->src = silc_smemdup(stack, src, src_len);
e->src_len = src_len;
e->compute_hash = compute_hash;