- 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 + payload->cookie_len + 2 + payload->version_len + 2;
- silc_buffer_pull(buffer, len);
-
- /* Parse group list */
- ret = silc_buffer_unformat(buffer,
- SILC_STR_UI_XNSTRING_ALLOC(&payload->ke_grp_list,
- payload->ke_grp_len),
- SILC_STR_UI_SHORT(&payload->pkcs_alg_len),
- SILC_STR_END);
- if (ret == -1) {
- status = SILC_SKE_STATUS_ERROR;
- goto err;
- }
-
- 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);
-
- /* Parse PKCS alg list */
- ret =
- silc_buffer_unformat(buffer,
- SILC_STR_UI_XNSTRING_ALLOC(&payload->pkcs_alg_list,
- payload->pkcs_alg_len),
- SILC_STR_UI_SHORT(&payload->enc_alg_len),
- SILC_STR_END);
- if (ret == -1) {
- status = SILC_SKE_STATUS_ERROR;
- goto err;
- }
-
- 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);
-
- /* Parse encryption alg list */
- ret =
- silc_buffer_unformat(buffer,
- SILC_STR_UI_XNSTRING_ALLOC(&payload->enc_alg_list,
- payload->enc_alg_len),
- SILC_STR_UI_SHORT(&payload->hash_alg_len),
- SILC_STR_END);
- if (ret == -1) {
- status = SILC_SKE_STATUS_ERROR;
- goto err;
- }
-
- 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);
-
- /* Parse hash alg list */
- ret =
- silc_buffer_unformat(buffer,
- SILC_STR_UI_XNSTRING_ALLOC(&payload->hash_alg_list,
- payload->hash_alg_len),
- SILC_STR_UI_SHORT(&payload->comp_alg_len),
- SILC_STR_END);
- if (ret == -1) {
- status = SILC_SKE_STATUS_ERROR;
- goto err;
- }
-
- len2 += len = payload->hash_alg_len + 2;
- silc_buffer_pull(buffer, len);
-
- /* Parse compression alg list */
- if (payload->comp_alg_len) {
- ret =
- silc_buffer_unformat(buffer,
- SILC_STR_UI_XNSTRING_ALLOC(&payload->comp_alg_list,
- payload->comp_alg_len),
- SILC_STR_END);
- if (ret == -1) {
- status = SILC_SKE_STATUS_ERROR;
- goto err;
- }
- }
-
- silc_buffer_push(buffer, len2);
-