X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=lib%2Fsilcske%2Fsilcske.c;h=89e4a8480fd62184eed807cc05aebb8d8f64de42;hp=4a407490c4f91305c27b60a01351f04381a2ae0d;hb=771e796bf38a0ecc73390aa295cd68e75a79e640;hpb=b5c781b1cd1c64039084ad29e2eed2b95a5cedb8 diff --git a/lib/silcske/silcske.c b/lib/silcske/silcske.c index 4a407490..89e4a848 100644 --- a/lib/silcske/silcske.c +++ b/lib/silcske/silcske.c @@ -3285,7 +3285,7 @@ SilcBool silc_ske_set_keys(SilcSKE ske, SilcHmac *ret_hmac_receive, SilcHash *ret_hash) { - unsigned char iv[32]; + unsigned char iv[SILC_HASH_MAXLEN]; SilcBool iv_included = (prop->flags & SILC_SKE_SP_FLAG_IV_INCLUDED); /* Allocate ciphers to be used in the communication */ @@ -3337,6 +3337,8 @@ SilcBool silc_ske_set_keys(SilcSKE ske, silc_hash_make(prop->hash, keymat->receive_iv, 8, iv); if (!iv_included) memcpy(iv + 4, keymat->receive_iv, 8); + else + memset(iv + 4, 0, 12); } silc_cipher_set_iv(*ret_send_key, iv); @@ -3361,6 +3363,8 @@ SilcBool silc_ske_set_keys(SilcSKE ske, silc_hash_make(prop->hash, keymat->send_iv, 8, iv); if (!iv_included) memcpy(iv + 4, keymat->send_iv, 8); + else + memset(iv + 4, 0, 12); } silc_cipher_set_iv(*ret_receive_key, iv); @@ -3392,6 +3396,8 @@ SilcBool silc_ske_set_keys(SilcSKE ske, silc_hash_make(prop->hash, keymat->send_iv, 8, iv); if (!iv_included) memcpy(iv + 4, keymat->send_iv, 8); + else + memset(iv + 4, 0, 12); } silc_cipher_set_iv(*ret_send_key, iv); @@ -3417,7 +3423,9 @@ SilcBool silc_ske_set_keys(SilcSKE ske, silc_hash_make(prop->hash, keymat->receive_iv, 8, iv); if (!iv_included) memcpy(iv + 4, keymat->receive_iv, 8); - } + else + memset(iv + 4, 0, 12); + } silc_cipher_set_iv(*ret_receive_key, iv); } else {