{
DECR_LEN (data_size, priv->mki_size);
memcpy(priv->mki, p, priv->mki_size);
+ priv->mki_received = 1;
}
return 0;
* @mki: will hold the MKI
*
* This function exports the negotiated Master Key Identifier,
- * if any. The returned value in @mki should be treated as
- * constant and valid only during the session's lifetime.
+ * received by the peer if any. The returned value in @mki should be
+ * treated as constant and valid only during the session's lifetime.
*
* Returns: On success, %GNUTLS_E_SUCCESS (0) is returned,
* otherwise a negative error code is returned.
_gnutls_ext_get_session_data (session, GNUTLS_EXTENSION_SRTP,
&epriv);
if (ret < 0)
- {
- gnutls_assert ();
- return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE;
- }
+ return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE);
priv = epriv.ptr;
+
+ if (priv->mki_received == 0)
+ return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE);
mki->data = priv->mki;
mki->size = priv->mki_size;
{
BUFFER_APPEND_NUM (ps, priv->profiles[i]);
}
- BUFFER_APPEND_NUM (ps, priv->selected_profile);
+
+ BUFFER_APPEND_NUM (ps, priv->mki_received);
+ if (priv->mki_received)
+ {
+ BUFFER_APPEND_NUM (ps, priv->selected_profile);
+ BUFFER_APPEND_PFX4 (ps, priv->mki, priv->mki_size);
+ }
return 0;
}
}
BUFFER_POP_NUM (ps, priv->selected_profile);
+ BUFFER_POP_NUM (ps, priv->mki_received);
+ if (priv->mki_received)
+ {
+ BUFFER_POP_NUM (ps, priv->mki_size);
+ BUFFER_POP (ps, priv->mki, priv->mki_size);
+ }
+
epriv.ptr = priv;
*_priv = epriv;