aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelen <jjelen@redhat.com>2020-04-28 12:27:03 +0200
committerAndreas Schneider <asn@cryptomilk.org>2020-05-05 14:23:06 +0200
commit239eef6322d1bca0786a60f68dab3d9b402a41b7 (patch)
tree7b9a9b6f53117652d060b60ef4509e7be01bc1c3
parent201fd661767f769584d782503c9fa59a5d1f340d (diff)
downloadlibssh-239eef6322d1bca0786a60f68dab3d9b402a41b7.tar.gz
libssh-239eef6322d1bca0786a60f68dab3d9b402a41b7.tar.xz
libssh-239eef6322d1bca0786a60f68dab3d9b402a41b7.zip
packet: Check if set_*_key functions exists before calling it
Signed-off-by: Jakub Jelen <jjelen@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
-rw-r--r--src/packet.c34
1 files changed, 19 insertions, 15 deletions
diff --git a/src/packet.c b/src/packet.c
index c53800ea..40b60a10 100644
--- a/src/packet.c
+++ b/src/packet.c
@@ -1969,23 +1969,27 @@ ssh_packet_set_newkeys(ssh_session session,
session->opts.rekey_time/1000);
}
- /* Initialize the encryption and decryption keys in next_crypto */
- rc = in_cipher->set_decrypt_key(in_cipher,
- session->next_crypto->decryptkey,
- session->next_crypto->decryptIV);
- if (rc < 0) {
- /* On error, make sure it is not used */
- session->next_crypto->used = 0;
- return SSH_ERROR;
+ if (in_cipher->set_decrypt_key) {
+ /* Initialize the encryption and decryption keys in next_crypto */
+ rc = in_cipher->set_decrypt_key(in_cipher,
+ session->next_crypto->decryptkey,
+ session->next_crypto->decryptIV);
+ if (rc < 0) {
+ /* On error, make sure it is not used */
+ session->next_crypto->used = 0;
+ return SSH_ERROR;
+ }
}
- rc = out_cipher->set_encrypt_key(out_cipher,
- session->next_crypto->encryptkey,
- session->next_crypto->encryptIV);
- if (rc < 0) {
- /* On error, make sure it is not used */
- session->next_crypto->used = 0;
- return SSH_ERROR;
+ if (out_cipher->set_encrypt_key) {
+ rc = out_cipher->set_encrypt_key(out_cipher,
+ session->next_crypto->encryptkey,
+ session->next_crypto->encryptIV);
+ if (rc < 0) {
+ /* On error, make sure it is not used */
+ session->next_crypto->used = 0;
+ return SSH_ERROR;
+ }
}
return SSH_OK;