- if (payload->ke_grp_len < 1) {
- SILC_LOG_DEBUG(("Bad payload length"));
- status = SILC_SKE_STATUS_BAD_PAYLOAD_LENGTH;
- goto err;
- }
-
- len2 = len = 1 + 1 + 2 + SILC_SKE_COOKIE_LEN + 2;
- silc_buffer_pull(buffer, len);
-
- /* Copy cookie from payload */
- payload->cookie = silc_calloc(SILC_SKE_COOKIE_LEN,
- sizeof(unsigned char));
- payload->cookie_len = SILC_SKE_COOKIE_LEN;
- memcpy(payload->cookie, buf, SILC_SKE_COOKIE_LEN);
- memset(buf, 0, sizeof(buf));
-
- silc_buffer_unformat(buffer,
- SILC_STR_UI_XNSTRING(&buf, payload->ke_grp_len),
- SILC_STR_UI_SHORT(&payload->pkcs_alg_len),
- SILC_STR_END);
-
- if (payload->pkcs_alg_len < 1) {
- SILC_LOG_DEBUG(("Bad payload length"));
- status = SILC_SKE_STATUS_BAD_PAYLOAD_LENGTH;
- goto err;
- }
-
- len2 += len = payload->ke_grp_len + 2;
- silc_buffer_pull(buffer, len);
-
- /* Copy KE groups from payload */
- payload->ke_grp_list = silc_calloc(payload->ke_grp_len + 1,
- sizeof(unsigned char));
- memcpy(payload->ke_grp_list, buf, payload->ke_grp_len);
- memset(buf, 0, sizeof(buf));
-
- silc_buffer_unformat(buffer,
- SILC_STR_UI_XNSTRING(&buf, payload->pkcs_alg_len),
- SILC_STR_UI_SHORT(&payload->enc_alg_len),
- SILC_STR_END);
-
- if (payload->enc_alg_len < 1) {
- SILC_LOG_DEBUG(("Bad payload length"));
- status = SILC_SKE_STATUS_BAD_PAYLOAD_LENGTH;
- goto err;
- }
-
- len2 += len = payload->pkcs_alg_len + 2;
- silc_buffer_pull(buffer, len);
-
- /* Copy PKCS algs from payload */
- payload->pkcs_alg_list = silc_calloc(payload->pkcs_alg_len + 1,
- sizeof(unsigned char));
- memcpy(payload->pkcs_alg_list, buf, payload->pkcs_alg_len);
- memset(buf, 0, sizeof(buf));
-
- silc_buffer_unformat(buffer,
- SILC_STR_UI_XNSTRING(&buf, payload->enc_alg_len),
- SILC_STR_UI_SHORT(&payload->hash_alg_len),
- SILC_STR_END);
-
- if (payload->hash_alg_len < 1) {
- SILC_LOG_DEBUG(("Bad payload length"));
- status = SILC_SKE_STATUS_BAD_PAYLOAD_LENGTH;
- goto err;
- }
-
- len2 += len = payload->enc_alg_len + 2;
- silc_buffer_pull(buffer, len);
-
- /* Copy encryption algs from payload */
- payload->enc_alg_list = silc_calloc(payload->enc_alg_len + 1,
- sizeof(unsigned char));
- memcpy(payload->enc_alg_list, buf, payload->enc_alg_len);
- memset(buf, 0, sizeof(buf));
-
- silc_buffer_unformat(buffer,
- SILC_STR_UI_XNSTRING(&buf, payload->hash_alg_len),
- SILC_STR_UI_SHORT(&payload->comp_alg_len),
- SILC_STR_END);
-
- len2 += len = payload->hash_alg_len + 2;
- silc_buffer_pull(buffer, len);
-
- /* Copy hash algs from payload */
- payload->hash_alg_list = silc_calloc(payload->hash_alg_len + 1,
- sizeof(unsigned char));
- memcpy(payload->hash_alg_list, buf, payload->hash_alg_len);
- memset(buf, 0, sizeof(buf));
-
- if (payload->comp_alg_len) {
- silc_buffer_unformat(buffer,
- SILC_STR_UI_XNSTRING(&buf, payload->comp_alg_len),
- SILC_STR_END);
-
- /* Copy compression algs from payload */
- payload->comp_alg_list = silc_calloc(payload->comp_alg_len + 1,
- sizeof(unsigned char));
- memcpy(payload->comp_alg_list, buf, payload->comp_alg_len);
- memset(buf, 0, sizeof(buf));
- }
-
- silc_buffer_push(buffer, len2);
-