X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcske%2Fpayload.c;h=9bf2aa862e9346096871103aa27c50fa43c6941d;hb=a818c5b5411bbc4436d1c5f011236985c96bb787;hp=ce14c9faca8312f7d5e7decaa426563745d6c09d;hpb=622dbba14878964ca76301bdf9c8f59f3312fbc7;p=silc.git diff --git a/lib/silcske/payload.c b/lib/silcske/payload.c index ce14c9fa..9bf2aa86 100644 --- a/lib/silcske/payload.c +++ b/lib/silcske/payload.c @@ -2,7 +2,7 @@ payload.c - Author: Pekka Riikonen + Author: Pekka Riikonen Copyright (C) 2000 - 2001 Pekka Riikonen @@ -20,7 +20,6 @@ /* $Id$ */ #include "silcincludes.h" -#include "payload_internal.h" /* Encodes Key Exchange Start Payload into a SILC Buffer to be sent to the other end. */ @@ -159,22 +158,14 @@ silc_ske_payload_start_decode(SilcSKE ske, void silc_ske_payload_start_free(SilcSKEStartPayload *payload) { if (payload) { - if (payload->cookie) - silc_free(payload->cookie); - if (payload->version) - silc_free(payload->version); - if (payload->ke_grp_list) - silc_free(payload->ke_grp_list); - if (payload->pkcs_alg_list) - silc_free(payload->pkcs_alg_list); - if (payload->enc_alg_list) - silc_free(payload->enc_alg_list); - if (payload->hash_alg_list) - silc_free(payload->hash_alg_list); - if (payload->hmac_alg_list) - silc_free(payload->hmac_alg_list); - if (payload->comp_alg_list) - silc_free(payload->comp_alg_list); + silc_free(payload->cookie); + silc_free(payload->version); + silc_free(payload->ke_grp_list); + silc_free(payload->pkcs_alg_list); + silc_free(payload->enc_alg_list); + silc_free(payload->hash_alg_list); + silc_free(payload->hmac_alg_list); + silc_free(payload->comp_alg_list); silc_free(payload); } } @@ -188,7 +179,7 @@ SilcSKEStatus silc_ske_payload_ke_encode(SilcSKE ske, { SilcBuffer buf; unsigned char *x_str; - unsigned int x_len; + SilcUInt32 x_len; int ret; SILC_LOG_DEBUG(("Encoding KE Payload")); @@ -196,7 +187,8 @@ SilcSKEStatus silc_ske_payload_ke_encode(SilcSKE ske, if (!payload) return SILC_SKE_STATUS_ERROR; - if (ske->start_payload->flags & SILC_SKE_SP_FLAG_MUTUAL && + if (ske->start_payload && + ske->start_payload->flags & SILC_SKE_SP_FLAG_MUTUAL && !payload->sign_data) { SILC_LOG_DEBUG(("Signature data is missing")); return SILC_SKE_STATUS_ERROR; @@ -251,8 +243,8 @@ SilcSKEStatus silc_ske_payload_ke_decode(SilcSKE ske, SilcSKEStatus status = SILC_SKE_STATUS_ERROR; SilcSKEKEPayload *payload; unsigned char *x = NULL; - unsigned short x_len; - unsigned int tot_len = 0, len2; + SilcUInt16 x_len; + SilcUInt32 tot_len = 0, len2; int ret; SILC_LOG_DEBUG(("Decoding Key Exchange Payload")); @@ -273,7 +265,7 @@ SilcSKEStatus silc_ske_payload_ke_decode(SilcSKE ske, goto err; } - if (payload->pk_len < 5) { + if (payload->pk_type == 0) { status = SILC_SKE_STATUS_BAD_PAYLOAD; goto err; } @@ -302,7 +294,8 @@ SilcSKEStatus silc_ske_payload_ke_decode(SilcSKE ske, goto err; } - if ((ske->start_payload->flags & SILC_SKE_SP_FLAG_MUTUAL) && + if (ske->start_payload && + (ske->start_payload->flags & SILC_SKE_SP_FLAG_MUTUAL) && (payload->sign_len < 3 || !payload->sign_data)) { SILC_LOG_DEBUG(("The signature data is missing - both parties are " "required to do authentication")); @@ -327,12 +320,9 @@ SilcSKEStatus silc_ske_payload_ke_decode(SilcSKE ske, return SILC_SKE_STATUS_OK; err: - if (payload->pk_data) - silc_free(payload->pk_data); - if (payload->sign_data) - silc_free(payload->sign_data); - if (x) - silc_free(x); + silc_free(payload->pk_data); + silc_free(payload->sign_data); + silc_free(x); silc_free(payload); ske->status = status; return status; @@ -343,11 +333,9 @@ SilcSKEStatus silc_ske_payload_ke_decode(SilcSKE ske, void silc_ske_payload_ke_free(SilcSKEKEPayload *payload) { if (payload) { - if (payload->pk_data) - silc_free(payload->pk_data); - silc_mp_clear(&payload->x); - if (payload->sign_data) - silc_free(payload->sign_data); + silc_free(payload->pk_data); + silc_mp_uninit(&payload->x); + silc_free(payload->sign_data); silc_free(payload); } }