SILC_STR_UI_SHORT(payload->hash_alg_len),
SILC_STR_UI_XNSTRING(payload->hash_alg_list,
payload->hash_alg_len),
+ SILC_STR_UI_SHORT(payload->hmac_alg_len),
+ SILC_STR_UI_XNSTRING(payload->hmac_alg_list,
+ payload->hmac_alg_len),
SILC_STR_UI_SHORT(payload->comp_alg_len),
SILC_STR_UI_XNSTRING(payload->comp_alg_list,
payload->comp_alg_len),
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_UI_SHORT(&payload->hmac_alg_len),
SILC_STR_END);
if (ret == -1) {
status = SILC_SKE_STATUS_ERROR;
len2 += len = payload->hash_alg_len + 2;
silc_buffer_pull(buffer, len);
+ /* Parse HMAC list */
+ ret =
+ silc_buffer_unformat(buffer,
+ SILC_STR_UI_XNSTRING_ALLOC(&payload->hmac_alg_list,
+ payload->hmac_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->hmac_alg_len + 2;
+ silc_buffer_pull(buffer, len);
+
/* Parse compression alg list */
if (payload->comp_alg_len) {
ret =
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);