aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2009-04-16 14:34:28 +0000
committerAndreas Schneider <mail@cynapses.org>2009-04-16 14:34:28 +0000
commit1a22d18afacea8202b482e1f1dc95a6ac5e7064f (patch)
tree4c88dadd22c529199b31db2781c2486c1babb4ab
parentbaf2eaf16503ae6c2ed36614fa1b5f2c31bdca1e (diff)
downloadlibssh-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.h4
-rw-r--r--libssh/dh.c26
-rw-r--r--libssh/server.c5
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: