* TNCCS connection state
*/
TNC_ConnectionState state;
+
+ /**
+ * IMC Attestation handshake state
+ */
+ imc_attestation_handshake_state_t handshake_state;
};
free(this);
}
+METHOD(imc_attestation_state_t, get_handshake_state, imc_attestation_handshake_state_t,
+ private_imc_attestation_state_t *this)
+{
+ return this->handshake_state;
+}
+
+METHOD(imc_attestation_state_t, set_handshake_state, void,
+ private_imc_attestation_state_t *this, imc_attestation_handshake_state_t new_state)
+{
+ this->handshake_state = new_state;
+}
+
/**
* Described in header.
*/
.change_state = _change_state,
.destroy = _destroy,
},
+ .get_handshake_state = _get_handshake_state,
+ .set_handshake_state = _set_handshake_state,
},
.state = TNC_CONNECTION_STATE_CREATE,
.connection_id = connection_id,
+ .handshake_state = IMC_ATTESTATION_STATE_INIT,
);
return &this->public.interface;
#include <library.h>
typedef struct imc_attestation_state_t imc_attestation_state_t;
+typedef enum imc_attestation_handshake_state_t imc_attestation_handshake_state_t;
+
+/**
+ * IMC Attestation Handshake States (state machine)
+ */
+enum imc_attestation_handshake_state_t {
+ IMC_ATTESTATION_STATE_INIT,
+ IMC_ATTESTATION_STATE_REQ_PROTO_CAP,
+ IMC_ATTESTATION_STATE_REQ_MEAS_ALGO,
+ IMC_ATTESTATION_STATE_GET_TPM_INFO,
+ IMC_ATTESTATION_STATE_GET_AIK,
+ IMC_ATTESTATION_STATE_REQ_FUNCT_COMP_EVID,
+ IMC_ATTESTATION_STATE_GEN_ATTEST_EVID,
+ IMC_ATTESTATION_STATE_REQ_FILE_METADATA,
+ IMC_ATTESTATION_STATE_REQ_FILE_MEAS,
+ IMC_ATTESTATION_STATE_REQ_IML,
+};
/**
* Internal state of an imc_attestation_t connection instance
* imc_state_t interface
*/
imc_state_t interface;
+
+ /**
+ * get state of the handshake
+ *
+ * @return the handshake state of IMC
+ */
+ imc_attestation_handshake_state_t (*get_handshake_state)(imc_attestation_state_t *this);
+
+ /**
+ * get state of the handshake
+ *
+ * @param new_state the handshake state of IMC
+ */
+ void (*set_handshake_state)(imc_attestation_state_t *this, imc_attestation_handshake_state_t new_state);
};
/**
* Create an imc_attestation_state_t instance
*
* @param id connection ID
- * @param rounds total number of IMC re-measurements
*/
imc_state_t* imc_attestation_state_create(TNC_ConnectionID id);
* TNCCS connection state
*/
TNC_ConnectionState state;
+
+ /**
+ * IMV Attestation handshake state
+ */
+ imv_attestation_handshake_state_t handshake_state;
/**
* IMV action recommendation
free(this);
}
+METHOD(imv_attestation_state_t, get_handshake_state, imv_attestation_handshake_state_t,
+ private_imv_attestation_state_t *this)
+{
+ return this->handshake_state;
+}
+
+METHOD(imv_attestation_state_t, set_handshake_state, void,
+ private_imv_attestation_state_t *this, imv_attestation_handshake_state_t new_state)
+{
+ this->handshake_state = new_state;
+}
+
/**
* Described in header.
*/
.get_reason_string = _get_reason_string,
.destroy = _destroy,
},
+ .get_handshake_state = _get_handshake_state,
+ .set_handshake_state = _set_handshake_state,
},
.state = TNC_CONNECTION_STATE_CREATE,
+ .handshake_state = IMC_ATTESTATION_STATE_INIT,
.rec = TNC_IMV_ACTION_RECOMMENDATION_NO_RECOMMENDATION,
.eval = TNC_IMV_EVALUATION_RESULT_DONT_KNOW,
);
return &this->public.interface;
}
-
-
#include <library.h>
typedef struct imv_attestation_state_t imv_attestation_state_t;
+typedef enum imv_attestation_handshake_state_t imv_attestation_handshake_state_t;
+
+/**
+ * IMV Attestation Handshake States (state machine)
+ */
+enum imv_attestation_handshake_state_t {
+ IMV_ATTESTATION_STATE_INIT,
+ IMV_ATTESTATION_STATE_PROTO_CAP,
+ IMV_ATTESTATION_STATE_MEAS_ALGO,
+ IMV_ATTESTATION_STATE_TPM_INFO,
+ IMV_ATTESTATION_STATE_AIK,
+ IMV_ATTESTATION_STATE_SIMPLE_COMP_EVID,
+ IMV_ATTESTATION_STATE_SIMPLE_EVID_FINAL,
+ IMV_ATTESTATION_STATE_FILE_METADATA,
+ IMV_ATTESTATION_STATE_FILE_MEAS,
+ IMV_ATTESTATION_STATE_IML,
+};
/**
* Internal state of an imv_attestation_t connection instance
imv_state_t interface;
/**
- * Add any setters and getters here
+ * get state of the handshake
+ *
+ * @return the handshake state of IMV
+ */
+ imv_attestation_handshake_state_t (*get_handshake_state)(imv_attestation_state_t *this);
+
+ /**
+ * get state of the handshake
+ *
+ * @param new_state the handshake state of IMV
*/
+ void (*set_handshake_state)(imv_attestation_state_t *this, imv_attestation_handshake_state_t new_state);
};
/**