diff options
author | Andreas Schneider <mail@cynapses.org> | 2009-04-16 14:31:06 +0000 |
---|---|---|
committer | Andreas Schneider <mail@cynapses.org> | 2009-04-16 14:31:06 +0000 |
commit | baf2eaf16503ae6c2ed36614fa1b5f2c31bdca1e (patch) | |
tree | 32f8943ef5ba831205dc651ab71c4b0de0d88957 | |
parent | ece047171a45dc09d12e08753d3c7a08c5a2a73c (diff) | |
download | libssh-baf2eaf16503ae6c2ed36614fa1b5f2c31bdca1e.tar.gz libssh-baf2eaf16503ae6c2ed36614fa1b5f2c31bdca1e.tar.xz libssh-baf2eaf16503ae6c2ed36614fa1b5f2c31bdca1e.zip |
Add return value to dh_generate_e().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@500 7dcaeef0-15fb-0310-b436-a5af3365683c
-rw-r--r-- | include/libssh/priv.h | 2 | ||||
-rw-r--r-- | libssh/client.c | 4 | ||||
-rw-r--r-- | libssh/dh.c | 26 |
3 files changed, 23 insertions, 9 deletions
diff --git a/include/libssh/priv.h b/include/libssh/priv.h index ece643d0..26c6f0e2 100644 --- a/include/libssh/priv.h +++ b/include/libssh/priv.h @@ -514,7 +514,7 @@ void ssh_set_error(void *error, int code, const char *descr, ...) PRINTF_ATTRIBU /* in dh.c */ /* DH key generation */ -void dh_generate_e(SSH_SESSION *session); +int dh_generate_e(SSH_SESSION *session); void ssh_print_bignum(const char *which,bignum num); int dh_generate_x(SSH_SESSION *session); int dh_generate_y(SSH_SESSION *session); diff --git a/libssh/client.c b/libssh/client.c index 57cbd18e..70956c98 100644 --- a/libssh/client.c +++ b/libssh/client.c @@ -204,7 +204,9 @@ static int dh_handshake(SSH_SESSION *session) { if (dh_generate_x(session) < 0) { goto error; } - dh_generate_e(session); + if (dh_generate_e(session) < 0) { + goto error; + } e = dh_get_e(session); if (e == NULL) { diff --git a/libssh/dh.c b/libssh/dh.c index f9684215..db916b87 100644 --- a/libssh/dh.c +++ b/libssh/dh.c @@ -255,22 +255,34 @@ int dh_generate_y(SSH_SESSION *session) { } /* used by server */ -void dh_generate_e(SSH_SESSION *session){ +int dh_generate_e(SSH_SESSION *session) { #ifdef HAVE_LIBCRYPTO - bignum_CTX ctx=bignum_ctx_new(); + bignum_CTX ctx = bignum_ctx_new(); + if (ctx == NULL) { + return -1; + } #endif - session->next_crypto->e=bignum_new(); + + session->next_crypto->e = bignum_new(); + if (session->next_crypto->e == NULL) { + return -1; + } + #ifdef HAVE_LIBGCRYPT - bignum_mod_exp(session->next_crypto->e,g,session->next_crypto->x,p); + bignum_mod_exp(session->next_crypto->e, g, session->next_crypto->x, p); #elif defined HAVE_LIBCRYPTO - bignum_mod_exp(session->next_crypto->e,g,session->next_crypto->x,p,ctx); + bignum_mod_exp(session->next_crypto->e, g, session->next_crypto->x, p, ctx); #endif + #ifdef DEBUG_CRYPTO - ssh_print_bignum("e",session->next_crypto->e); + ssh_print_bignum("e", session->next_crypto->e); #endif + #ifdef HAVE_LIBCRYPTO - bignum_ctx_free(ctx); + bignum_ctx_free(ctx); #endif + + return 0; } void dh_generate_f(SSH_SESSION *session){ |