#include "config.h"
#include "libssh/crypto.h"
#include "libssh/threads.h"
#include <libssh/callbacks.h>
#if (GCRYPT_VERSION_NUMBER >= 0x010600)
GCRY_THREAD_OPTION_PTHREAD_IMPL;
int crypto_thread_init(struct ssh_threads_callbacks_struct *user_callbacks)
{
(void) user_callbacks;
return SSH_OK;
}
#else
static struct gcry_thread_cbs gcrypt_threads_callbacks;
int crypto_thread_init(struct ssh_threads_callbacks_struct *user_callbacks)
{
int cmp;
if (user_callbacks == NULL) {
return SSH_OK;
}
cmp = strcmp(user_callbacks->type, "threads_noop");
if (cmp == 0) {
gcrypt_threads_callbacks.option= GCRY_THREAD_OPTION_VERSION << 8 ||
GCRY_THREAD_OPTION_DEFAULT;
} else {
gcrypt_threads_callbacks.option= GCRY_THREAD_OPTION_VERSION << 8 ||
GCRY_THREAD_OPTION_USER;
}
gcrypt_threads_callbacks.mutex_init = user_callbacks->mutex_init;
gcrypt_threads_callbacks.mutex_destroy = user_callbacks->mutex_destroy;
gcrypt_threads_callbacks.mutex_lock = user_callbacks->mutex_lock;
gcrypt_threads_callbacks.mutex_unlock = user_callbacks->mutex_unlock;
gcry_control(GCRYCTL_SET_THREAD_CBS, &gcrypt_threads_callbacks);
return SSH_OK;
}
#endif
void crypto_thread_finalize(void)
{
return;
}