diff options
author | Andreas Schneider <mail@cynapses.org> | 2009-04-16 14:24:13 +0000 |
---|---|---|
committer | Andreas Schneider <mail@cynapses.org> | 2009-04-16 14:24:13 +0000 |
commit | 5dc03728ed48c0b60715af36c09804a88c0751f2 (patch) | |
tree | 7edf49defff6d5f696856fa7b3949adbaba7a6ec | |
parent | 50b701b4e47a9071685de989137b650b1af61196 (diff) | |
download | libssh-5dc03728ed48c0b60715af36c09804a88c0751f2.tar.gz libssh-5dc03728ed48c0b60715af36c09804a88c0751f2.tar.xz libssh-5dc03728ed48c0b60715af36c09804a88c0751f2.zip |
Add return value to dh_generate_x().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@498 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 | 20 |
3 files changed, 18 insertions, 8 deletions
diff --git a/include/libssh/priv.h b/include/libssh/priv.h index 247c401..2648b60 100644 --- a/include/libssh/priv.h +++ b/include/libssh/priv.h @@ -516,7 +516,7 @@ void ssh_set_error(void *error, int code, const char *descr, ...) PRINTF_ATTRIBU /* DH key generation */ void dh_generate_e(SSH_SESSION *session); void ssh_print_bignum(const char *which,bignum num); -void dh_generate_x(SSH_SESSION *session); +int dh_generate_x(SSH_SESSION *session); void dh_generate_y(SSH_SESSION *session); void dh_generate_f(SSH_SESSION *session); diff --git a/libssh/client.c b/libssh/client.c index cfcaf96..57cbd18 100644 --- a/libssh/client.c +++ b/libssh/client.c @@ -201,7 +201,9 @@ static int dh_handshake(SSH_SESSION *session) { goto error; } - dh_generate_x(session); + if (dh_generate_x(session) < 0) { + goto error; + } dh_generate_e(session); e = dh_get_e(session); diff --git a/libssh/dh.c b/libssh/dh.c index 376408f..439d198 100644 --- a/libssh/dh.c +++ b/libssh/dh.c @@ -213,18 +213,26 @@ void ssh_print_hexa(const char *descr, const unsigned char *what, size_t len) { printf("%s: %s\n", descr, hexa); } -void dh_generate_x(SSH_SESSION *session){ - session->next_crypto->x=bignum_new(); +int dh_generate_x(SSH_SESSION *session) { + session->next_crypto->x = bignum_new(); + if (session->next_crypto->x == NULL) { + return -1; + } + #ifdef HAVE_LIBGCRYPT - bignum_rand(session->next_crypto->x,128); + bignum_rand(session->next_crypto->x, 128); #elif defined HAVE_LIBCRYPTO - bignum_rand(session->next_crypto->x,128,0,-1); + bignum_rand(session->next_crypto->x, 128, 0, -1); #endif - /* not harder than this */ + + /* not harder than this */ #ifdef DEBUG_CRYPTO - ssh_print_bignum("x",session->next_crypto->x); + ssh_print_bignum("x", session->next_crypto->x); #endif + + return 0; } + /* used by server */ void dh_generate_y(SSH_SESSION *session){ session->next_crypto->y=bignum_new(); |