diff options
author | Andreas Schneider <mail@cynapses.org> | 2009-04-15 07:59:07 +0000 |
---|---|---|
committer | Andreas Schneider <mail@cynapses.org> | 2009-04-15 07:59:07 +0000 |
commit | c50da458d1b903966a87fada1d702f3927040c3e (patch) | |
tree | a3fb0c82a7b923b735847119368cf0d945f4537f /libssh/crypt.c | |
parent | 576187c68623df68b0173be6013aef8bdacaaa9c (diff) | |
download | libssh-c50da458d1b903966a87fada1d702f3927040c3e.tar.gz libssh-c50da458d1b903966a87fada1d702f3927040c3e.tar.xz libssh-c50da458d1b903966a87fada1d702f3927040c3e.zip |
Improve packet_decrypt().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@479 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh/crypt.c')
-rw-r--r-- | libssh/crypt.c | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/libssh/crypt.c b/libssh/crypt.c index 472cb9fb..b5c9109f 100644 --- a/libssh/crypt.c +++ b/libssh/crypt.c @@ -55,26 +55,32 @@ u32 packet_decrypt_len(SSH_SESSION *session, char *crypted){ return ntohl(decrypted); } -int packet_decrypt(SSH_SESSION *session, void *data,u32 len){ - struct crypto_struct *crypto=session->current_crypto->in_cipher; - char *out=malloc(len); - if (out == NULL) { - return -1; - } - ssh_log(session,SSH_LOG_PACKET,"Decrypting %d bytes",len); +int packet_decrypt(SSH_SESSION *session, void *data,u32 len) { + struct crypto_struct *crypto = session->current_crypto->in_cipher; + char *out = NULL; + + out = malloc(len); + if (out == NULL) { + return -1; + } + + ssh_log(session,SSH_LOG_PACKET, "Decrypting %d bytes", len); + #ifdef HAVE_LIBGCRYPT - crypto->set_decrypt_key(crypto,session->current_crypto->decryptkey,session->current_crypto->decryptIV); - crypto->cbc_decrypt(crypto,data,out,len); + crypto->set_decrypt_key(crypto,session->current_crypto->decryptkey,session->current_crypto->decryptIV); + crypto->cbc_decrypt(crypto,data,out,len); #elif defined HAVE_LIBCRYPTO - crypto->set_decrypt_key(crypto,session->current_crypto->decryptkey); - crypto->cbc_decrypt(crypto,data,out,len,session->current_crypto->decryptIV); + crypto->set_decrypt_key(crypto,session->current_crypto->decryptkey); + crypto->cbc_decrypt(crypto,data,out,len,session->current_crypto->decryptIV); #endif - memcpy(data,out,len); - memset(out,0,len); - free(out); - return 0; + + memcpy(data,out,len); + memset(out,0,len); + + SAFE_FREE(out); + return 0; } - + unsigned char * packet_encrypt(SSH_SESSION *session,void *data,u32 len){ struct crypto_struct *crypto; HMACCTX ctx; |