summaryrefslogtreecommitdiffstats
path: root/libssh/dh.c
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2009-04-01 21:24:16 +0000
committerAndreas Schneider <mail@cynapses.org>2009-04-01 21:24:16 +0000
commit891539af6cbdbdfabb8d37fb491f7f8cadf9823c (patch)
tree1699cb47cd68dc35a972f8b5e1d834946c48d944 /libssh/dh.c
parent1b627b386763e22a7b8f7a7c8de9610c1da56cd2 (diff)
downloadlibssh-891539af6cbdbdfabb8d37fb491f7f8cadf9823c.tar.gz
libssh-891539af6cbdbdfabb8d37fb491f7f8cadf9823c.tar.xz
libssh-891539af6cbdbdfabb8d37fb491f7f8cadf9823c.zip
Add memory error checks for crypto wrapper functions.
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@330 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh/dh.c')
-rw-r--r--libssh/dh.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/libssh/dh.c b/libssh/dh.c
index 377cfe3..c89c7c8 100644
--- a/libssh/dh.c
+++ b/libssh/dh.c
@@ -355,6 +355,8 @@ static void sha_add(STRING *str,SHACTX ctx){
#endif
}
*/
+
+/* TODO FIXME add memory checking and a return value */
void make_sessionid(SSH_SESSION *session){
SHACTX ctx;
STRING *num,*str;
@@ -362,7 +364,11 @@ void make_sessionid(SSH_SESSION *session){
BUFFER *buf=buffer_new();
u32 len;
enter_function();
- ctx=sha1_init();
+
+ ctx = sha1_init();
+ if (ctx == NULL) {
+ return;
+ }
str=string_from_char(session->clientbanner);
buffer_add_ssh_string(buf,str);
@@ -450,8 +456,12 @@ void hashbufin_add_cookie(SSH_SESSION *session,unsigned char *cookie){
buffer_add_data(session->in_hashbuf,cookie,16);
}
+/* TODO FIXME add return value for memory checks */
static void generate_one_key(STRING *k,unsigned char session_id[SHA_DIGEST_LEN],unsigned char output[SHA_DIGEST_LEN],char letter){
SHACTX ctx=sha1_init();
+ if (ctx == NULL) {
+ return;
+ }
sha1_update(ctx,k,string_len(k)+4);
sha1_update(ctx,session_id,SHA_DIGEST_LEN);
sha1_update(ctx,&letter,1);
@@ -459,6 +469,7 @@ static void generate_one_key(STRING *k,unsigned char session_id[SHA_DIGEST_LEN],
sha1_final(output,ctx);
}
+/* TODO FIXME add return value for memory checks */
void generate_session_keys(SSH_SESSION *session){
STRING *k_string;
SHACTX ctx;
@@ -484,6 +495,9 @@ void generate_session_keys(SSH_SESSION *session){
/* XXX verify it's ok for server implementation */
if(session->next_crypto->out_cipher->keysize > SHA_DIGEST_LEN*8){
ctx=sha1_init();
+ if (ctx == NULL) {
+ return;
+ }
sha1_update(ctx,k_string,string_len(k_string)+4);
sha1_update(ctx,session->next_crypto->session_id,SHA_DIGEST_LEN);
sha1_update(ctx,session->next_crypto->encryptkey,SHA_DIGEST_LEN);
@@ -533,6 +547,10 @@ int ssh_get_pubkey_hash(SSH_SESSION *session,unsigned char hash[MD5_DIGEST_LEN])
int len=string_len(pubkey);
ctx=md5_init();
+ if (ctx == NULL) {
+ return 0;
+ }
+
md5_update(ctx,pubkey->string,len);
md5_final(hash,ctx);
return MD5_DIGEST_LEN;