Proceed with attestation only if Attestation IMC returns a discovery response
This commit is contained in:
@@ -440,9 +440,8 @@ METHOD(imv_agent_if_t, batch_ending, TNC_Result,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* check the IMV state for the next PA-TNC attributes to send */
|
/* check the IMV state for the next PA-TNC attributes to send */
|
||||||
if (!imv_attestation_build(out_msg, attestation_state,
|
if (!imv_attestation_build(out_msg, state, this->supported_algorithms,
|
||||||
this->supported_algorithms,
|
this->supported_dh_groups, this->pts_db))
|
||||||
this->supported_dh_groups, this->pts_db))
|
|
||||||
{
|
{
|
||||||
state->set_recommendation(state,
|
state->set_recommendation(state,
|
||||||
TNC_IMV_ACTION_RECOMMENDATION_NO_RECOMMENDATION,
|
TNC_IMV_ACTION_RECOMMENDATION_NO_RECOMMENDATION,
|
||||||
|
|||||||
@@ -28,18 +28,29 @@
|
|||||||
#include <utils/debug.h>
|
#include <utils/debug.h>
|
||||||
|
|
||||||
bool imv_attestation_build(imv_msg_t *out_msg,
|
bool imv_attestation_build(imv_msg_t *out_msg,
|
||||||
imv_attestation_state_t *attestation_state,
|
imv_state_t *state,
|
||||||
pts_meas_algorithms_t supported_algorithms,
|
pts_meas_algorithms_t supported_algorithms,
|
||||||
pts_dh_group_t supported_dh_groups,
|
pts_dh_group_t supported_dh_groups,
|
||||||
pts_database_t *pts_db)
|
pts_database_t *pts_db)
|
||||||
{
|
{
|
||||||
|
imv_attestation_state_t *attestation_state;
|
||||||
imv_attestation_handshake_state_t handshake_state;
|
imv_attestation_handshake_state_t handshake_state;
|
||||||
pts_t *pts;
|
pts_t *pts;
|
||||||
pa_tnc_attr_t *attr = NULL;
|
pa_tnc_attr_t *attr = NULL;
|
||||||
|
|
||||||
|
attestation_state = (imv_attestation_state_t*)state;
|
||||||
handshake_state = attestation_state->get_handshake_state(attestation_state);
|
handshake_state = attestation_state->get_handshake_state(attestation_state);
|
||||||
pts = attestation_state->get_pts(attestation_state);
|
pts = attestation_state->get_pts(attestation_state);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Received a response form the Attestation IMC so we can proceeed
|
||||||
|
*/
|
||||||
|
if (handshake_state == IMV_ATTESTATION_STATE_DISCOVERY &&
|
||||||
|
(state->get_action_flags(state) & IMV_ATTESTATION_FLAG_ALGO))
|
||||||
|
{
|
||||||
|
handshake_state = IMV_ATTESTATION_STATE_NONCE_REQ;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Skip DH Nonce Parameters Request attribute when
|
* Skip DH Nonce Parameters Request attribute when
|
||||||
* DH Nonce Exchange is not selected by PTS-IMC side
|
* DH Nonce Exchange is not selected by PTS-IMC side
|
||||||
@@ -80,9 +91,11 @@ bool imv_attestation_build(imv_msg_t *out_msg,
|
|||||||
out_msg->add_attribute(out_msg, attr);
|
out_msg->add_attribute(out_msg, attr);
|
||||||
|
|
||||||
attestation_state->set_handshake_state(attestation_state,
|
attestation_state->set_handshake_state(attestation_state,
|
||||||
IMV_ATTESTATION_STATE_NONCE_REQ);
|
IMV_ATTESTATION_STATE_DISCOVERY);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case IMV_ATTESTATION_STATE_DISCOVERY:
|
||||||
|
break;
|
||||||
case IMV_ATTESTATION_STATE_NONCE_REQ:
|
case IMV_ATTESTATION_STATE_NONCE_REQ:
|
||||||
{
|
{
|
||||||
int min_nonce_len;
|
int min_nonce_len;
|
||||||
|
|||||||
@@ -34,14 +34,14 @@
|
|||||||
* Process a TCG PTS attribute
|
* Process a TCG PTS attribute
|
||||||
*
|
*
|
||||||
* @param out_msg outbound PA-TNC message to be built
|
* @param out_msg outbound PA-TNC message to be built
|
||||||
* @param attestation_state attestation state of a given connection
|
* @param _state state of a given connection
|
||||||
* @param supported_algorithms supported PTS measurement algorithms
|
* @param supported_algorithms supported PTS measurement algorithms
|
||||||
* @param supported_dh_groups supported DH groups
|
* @param supported_dh_groups supported DH groups
|
||||||
* @param pts_db PTS configuration database
|
* @param pts_db PTS configuration database
|
||||||
* @return TRUE if successful
|
* @return TRUE if successful
|
||||||
*/
|
*/
|
||||||
bool imv_attestation_build(imv_msg_t *out_msg,
|
bool imv_attestation_build(imv_msg_t *out_msg,
|
||||||
imv_attestation_state_t *attestation_state,
|
imv_state_t *state,
|
||||||
pts_meas_algorithms_t supported_algorithms,
|
pts_meas_algorithms_t supported_algorithms,
|
||||||
pts_dh_group_t supported_dh_groups,
|
pts_dh_group_t supported_dh_groups,
|
||||||
pts_database_t *pts_db);
|
pts_database_t *pts_db);
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ enum imv_attestation_flag_t {
|
|||||||
*/
|
*/
|
||||||
enum imv_attestation_handshake_state_t {
|
enum imv_attestation_handshake_state_t {
|
||||||
IMV_ATTESTATION_STATE_INIT,
|
IMV_ATTESTATION_STATE_INIT,
|
||||||
|
IMV_ATTESTATION_STATE_DISCOVERY,
|
||||||
IMV_ATTESTATION_STATE_NONCE_REQ,
|
IMV_ATTESTATION_STATE_NONCE_REQ,
|
||||||
IMV_ATTESTATION_STATE_TPM_INIT,
|
IMV_ATTESTATION_STATE_TPM_INIT,
|
||||||
IMV_ATTESTATION_STATE_COMP_EVID,
|
IMV_ATTESTATION_STATE_COMP_EVID,
|
||||||
|
|||||||
Reference in New Issue
Block a user