aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libssh/dh.c14
-rw-r--r--libssh/init.c11
2 files changed, 12 insertions, 13 deletions
diff --git a/libssh/dh.c b/libssh/dh.c
index bb22fcf5..069f5568 100644
--- a/libssh/dh.c
+++ b/libssh/dh.c
@@ -72,7 +72,7 @@ static unsigned char p_value[] = {
static unsigned long g_int = 2 ; /* G is defined as 2 by the ssh2 standards */
static bignum g;
static bignum p;
-static unsigned int ssh_crypto_initialized_ref_count = 0;
+static int ssh_crypto_initialized;
int ssh_get_random(void *where, int len, int strong){
@@ -101,7 +101,7 @@ int ssh_get_random(void *where, int len, int strong){
* FIXME: Make the function thread safe by adding a semaphore or mutex.
*/
int ssh_crypto_init(void) {
- if (ssh_crypto_initialized_ref_count == 0) {
+ if (ssh_crypto_initialized == 0) {
#ifdef HAVE_LIBGCRYPT
gcry_check_version(NULL);
@@ -134,19 +134,15 @@ int ssh_crypto_init(void) {
bignum_bin2bn(p_value, P_LEN, p);
OpenSSL_add_all_algorithms();
#endif
- }
- ssh_crypto_initialized_ref_count++;
+ ssh_crypto_initialized = 1;
+ }
return 0;
}
void ssh_crypto_finalize(void) {
- if (ssh_crypto_initialized_ref_count) {
- ssh_crypto_initialized_ref_count--;
- }
-
- if (ssh_crypto_initialized_ref_count == 0) {
+ if (ssh_crypto_initialized) {
bignum_free(g);
g = NULL;
bignum_free(p);
diff --git a/libssh/init.c b/libssh/init.c
index 6b10033b..158151bf 100644
--- a/libssh/init.c
+++ b/libssh/init.c
@@ -32,12 +32,15 @@
* \addtogroup ssh_session
* @{
*/
+
/**
- * \brief finalize and cleanup all libssh and cryptographic data structures
- * \returns 0
+ * @brief Finalize and cleanup all libssh and cryptographic data structures.
+ *
+ * This function should only be called once, at the end of the program!
+ *
+ * @returns 0
*/
-int ssh_finalize(void)
-{
+int ssh_finalize(void) {
ssh_crypto_finalize();
#ifdef HAVE_LIBGCRYPT
gcry_control(GCRYCTL_TERM_SECMEM);