diff options
author | Andreas Schneider <mail@cynapses.org> | 2009-04-16 14:34:28 +0000 |
---|---|---|
committer | Andreas Schneider <mail@cynapses.org> | 2009-04-16 14:34:28 +0000 |
commit | 1a22d18afacea8202b482e1f1dc95a6ac5e7064f (patch) | |
tree | 4c88dadd22c529199b31db2781c2486c1babb4ab | |
parent | baf2eaf16503ae6c2ed36614fa1b5f2c31bdca1e (diff) | |
download | libssh-1a22d18afacea8202b482e1f1dc95a6ac5e7064f.tar.gz libssh-1a22d18afacea8202b482e1f1dc95a6ac5e7064f.tar.xz libssh-1a22d18afacea8202b482e1f1dc95a6ac5e7064f.zip |
Add return value to dh_generate_f().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@501 7dcaeef0-15fb-0310-b436-a5af3365683c
-rw-r--r-- | include/libssh/priv.h | 4 | ||||
-rw-r--r-- | libssh/dh.c | 26 | ||||
-rw-r--r-- | libssh/server.c | 5 |
3 files changed, 25 insertions, 10 deletions
diff --git a/include/libssh/priv.h b/include/libssh/priv.h index 26c6f0e2..1deff590 100644 --- a/include/libssh/priv.h +++ b/include/libssh/priv.h @@ -514,11 +514,11 @@ void ssh_set_error(void *error, int code, const char *descr, ...) PRINTF_ATTRIBU /* in dh.c */ /* DH key generation */ -int dh_generate_e(SSH_SESSION *session); void ssh_print_bignum(const char *which,bignum num); +int dh_generate_e(SSH_SESSION *session); +int dh_generate_f(SSH_SESSION *session); int dh_generate_x(SSH_SESSION *session); int dh_generate_y(SSH_SESSION *session); -void dh_generate_f(SSH_SESSION *session); int ssh_crypto_init(void); void ssh_crypto_finalize(void); diff --git a/libssh/dh.c b/libssh/dh.c index db916b87..f2bd20e4 100644 --- a/libssh/dh.c +++ b/libssh/dh.c @@ -285,22 +285,34 @@ int dh_generate_e(SSH_SESSION *session) { return 0; } -void dh_generate_f(SSH_SESSION *session){ +int dh_generate_f(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->f=bignum_new(); + + session->next_crypto->f = bignum_new(); + if (session->next_crypto->f == NULL) { + return -1; + } + #ifdef HAVE_LIBGCRYPT - bignum_mod_exp(session->next_crypto->f,g,session->next_crypto->y,p); + bignum_mod_exp(session->next_crypto->f, g, session->next_crypto->y, p); #elif defined HAVE_LIBCRYPTO - bignum_mod_exp(session->next_crypto->f,g,session->next_crypto->y,p,ctx); + bignum_mod_exp(session->next_crypto->f, g, session->next_crypto->y, p, ctx); #endif + #ifdef DEBUG_CRYPTO - ssh_print_bignum("f",session->next_crypto->f); + ssh_print_bignum("f", session->next_crypto->f); #endif + #ifdef HAVE_LIBCRYPTO - bignum_ctx_free(ctx); + bignum_ctx_free(ctx); #endif + + return 0; } STRING *make_bignum_string(bignum num){ diff --git a/libssh/server.c b/libssh/server.c index 7e3eb448..2809a8ec 100644 --- a/libssh/server.c +++ b/libssh/server.c @@ -278,7 +278,10 @@ static int dh_handshake_server(SSH_SESSION *session){ ssh_set_error(session,SSH_FATAL,"Could not create y number"); return -1; } - dh_generate_f(session); + if (dh_generate_f(session) < 0) { + ssh_set_error(session,SSH_FATAL,"Could not create f number"); + return -1; + } f=dh_get_f(session); switch(session->hostkeys){ case TYPE_DSS: |